From 1b363e4fdddfa13e5655afada25f2add291c302c Mon Sep 17 00:00:00 2001 From: Volker Scheuber Date: Wed, 19 Jun 2024 16:38:47 -0500 Subject: [PATCH] resolves #402 - Exporting Journeys or Scripts doesn't include any required Library Scripts --- CHANGELOG.md | 4 + package.json | 2 +- src/ops/ConfigOps.ts | 2 +- src/ops/JourneyOps.ts | 32 +- src/ops/OAuth2ClientOps.ts | 4 +- src/ops/ScriptOps.test.ts | 32 +- src/ops/ScriptOps.ts | 156 +- .../recording.har | 84 +- .../recording.har | 38 +- .../recording.har | 42 +- .../recording.har | 42 +- .../recording.har | 3192 +-- .../recording.har | 8412 +++++- .../recording.har | 38 +- .../recording.har | 30 +- .../recording.har | 42 +- .../recording.har | 42 +- .../1-Read-scripts_679488918/recording.har | 40 +- .../recording.har | 38 +- src/test/snapshots/ops/ScriptOps.test.js.snap | 21744 +++++++++------- 20 files changed, 21898 insertions(+), 12118 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 838bdb30a..c0cc2d386 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- \#402: Library scripts are now treated as dependencies during script and journey exports and imports. + ## [2.0.0-85] - 2024-06-11 ### Changed diff --git a/package.json b/package.json index f13455af0..868455353 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "build": "npx tsup && npm run clean-types && npm run generate-types", "doc": "npx typedoc", "prettier:fix": "npm run prettier write", - "dev": "npx tsup --watch src" + "dev": "npx tsup --watch src --onSuccess 'npx tsup --dts-only'" }, "description": "A library to manage ForgeRock Identity Cloud tenants, ForgeOps deployments, and classic deployments.", "keywords": [ diff --git a/src/ops/ConfigOps.ts b/src/ops/ConfigOps.ts index d1452b976..f5fc6f600 100644 --- a/src/ops/ConfigOps.ts +++ b/src/ops/ConfigOps.ts @@ -334,7 +334,7 @@ export async function exportFullConfiguration({ await exportOrImportWithErrorHandling( exportScripts, { - includeDefault, + options: { includeLibraries: false, includeDefault, useStringArrays }, state, }, errors diff --git a/src/ops/JourneyOps.ts b/src/ops/JourneyOps.ts index 5564a354d..6e915037e 100644 --- a/src/ops/JourneyOps.ts +++ b/src/ops/JourneyOps.ts @@ -24,7 +24,7 @@ import { type Saml2ProviderSkeleton, updateProvider, } from '../api/Saml2Api'; -import { getScript, type ScriptSkeleton } from '../api/ScriptApi'; +import { type ScriptSkeleton } from '../api/ScriptApi'; import { getSocialIdentityProviders, putProviderByTypeAndId, @@ -81,7 +81,12 @@ import { } from './NodeOps'; import { type ExportMetaData } from './OpsTypes'; import { readSaml2ProviderStubs } from './Saml2Ops'; -import { updateScript } from './ScriptOps'; +import { + getLibraryScriptNames, + readScript, + readScriptByName, + updateScript, +} from './ScriptOps'; import { readThemes, type ThemeSkeleton, updateThemes } from './ThemeOps'; export type Journey = { @@ -920,7 +925,7 @@ export async function exportJourney({ hasScriptDependency(nodeObject) && nodeObject.script !== emptyScriptPlaceholder ) { - scriptPromises.push(getScript({ scriptId: nodeObject.script, state })); + scriptPromises.push(readScript({ scriptId: nodeObject.script, state })); } // frodo supports email templates in platform deployments @@ -1055,7 +1060,7 @@ export async function exportJourney({ // handle script node types if (deps && hasScriptDependency(innerNodeObject)) { scriptPromises.push( - getScript({ scriptId: innerNodeObject.script, state }) + readScript({ scriptId: innerNodeObject.script, state }) ); } @@ -1244,7 +1249,7 @@ export async function exportJourney({ state, }); scriptPromises.push( - getScript({ scriptId: socialProvider.transform, state }) + readScript({ scriptId: socialProvider.transform, state }) ); exportData.socialIdentityProviders[socialProvider._id] = socialProvider; @@ -1262,6 +1267,7 @@ export async function exportJourney({ printMessage({ message: '\n - Scripts:', newline: false, state }); try { const scriptObjects = await Promise.all(scriptPromises); + const name2uuid: { [key: string]: string } = {}; for (const scriptObject of scriptObjects) { if (scriptObject) { if (verbose) @@ -1275,6 +1281,22 @@ export async function exportJourney({ ? convertBase64TextToArray(scriptObject.script) : JSON.stringify(decode(scriptObject.script)); exportData.scripts[scriptObject._id] = scriptObject; + + // handle library scripts + const scriptNames = getLibraryScriptNames(scriptObject); + for (const scriptName of scriptNames) { + if (name2uuid[scriptName] === undefined) { + const libScriptObject = await readScriptByName({ + scriptName, + state, + }); + name2uuid[scriptName] = libScriptObject._id; + libScriptObject.script = useStringArrays + ? convertBase64TextToArray(libScriptObject.script as string) + : JSON.stringify(decode(scriptObject.script)); + exportData.scripts[libScriptObject._id] = libScriptObject; + } + } } } } catch (error) { diff --git a/src/ops/OAuth2ClientOps.ts b/src/ops/OAuth2ClientOps.ts index 52d3da6f2..a2781d959 100644 --- a/src/ops/OAuth2ClientOps.ts +++ b/src/ops/OAuth2ClientOps.ts @@ -532,8 +532,8 @@ async function exportOAuth2ClientDependencies( } catch (error) { if ( !( - error.response?.status === 403 && - error.response?.data?.message === + (error as FrodoError).httpStatus === 403 && + (error as FrodoError).httpMessage === 'This operation is not available in ForgeRock Identity Cloud.' ) ) { diff --git a/src/ops/ScriptOps.test.ts b/src/ops/ScriptOps.test.ts index 3300b6163..5b8e6dd05 100644 --- a/src/ops/ScriptOps.test.ts +++ b/src/ops/ScriptOps.test.ts @@ -475,7 +475,11 @@ describe('ScriptOps', () => { test('1: Export all scripts', async () => { const response = await ScriptOps.exportScripts({ - includeDefault: false, + options: { + includeLibraries: false, + includeDefault: false, + useStringArrays: true, + }, state, }); expect(response).toMatchSnapshot({ @@ -485,7 +489,11 @@ describe('ScriptOps', () => { test('2: Export all scripts, including default scripts', async () => { const response = await ScriptOps.exportScripts({ - includeDefault: true, + options: { + includeLibraries: false, + includeDefault: true, + useStringArrays: true, + }, state, }); expect(response).toMatchSnapshot({ @@ -525,16 +533,16 @@ describe('ScriptOps', () => { test(`3: Import no scripts when excluding default scripts and only default scripts given`, async () => { expect.assertions(1); - const result = await ScriptOps.importScripts({ - scriptName: '', - importData: import2.data, - options: { - reUuid: false, - includeDefault: false, - }, - state, - }); - expect(result).toMatchSnapshot(); + const result = await ScriptOps.importScripts({ + scriptName: '', + importData: import2.data, + options: { + reUuid: false, + includeDefault: false, + }, + state, + }); + expect(result).toMatchSnapshot(); }); }); diff --git a/src/ops/ScriptOps.ts b/src/ops/ScriptOps.ts index 4d719b9bb..6fe58b00c 100644 --- a/src/ops/ScriptOps.ts +++ b/src/ops/ScriptOps.ts @@ -12,6 +12,7 @@ import { } from '../api/ScriptApi'; import { type ExportMetaData } from '../ops/OpsTypes'; import { State } from '../shared/State'; +import { decode } from '../utils/Base64Utils'; import { createProgressIndicator, debugMessage, @@ -39,6 +40,11 @@ export type Script = { * @returns {Promise} a promise that resolves to an array of script objects */ readScripts(): Promise; + /** + * Get the names of library scripts required by the input script object + * @returns an array of required library script names + */ + getLibraryScriptNames(scriptObj: ScriptSkeleton): string[]; /** * Read script * @param {string} scriptId script id @@ -92,22 +98,28 @@ export type Script = { deleteScripts(): Promise; /** * Export all scripts - * @param includeDefault true to include default scripts in export, false otherwise. Default: false + * @param options script export options * @returns {Promise} a promise that resolved to a ScriptExportInterface object */ - exportScripts(includeDefault: boolean): Promise; + exportScripts(options?: ScriptExportOptions): Promise; /** * Export script by id * @param {string} scriptId script uuid * @returns {Promise} a promise that resolved to a ScriptExportInterface object */ - exportScript(scriptId: string): Promise; + exportScript( + scriptId: string, + options?: ScriptExportOptions + ): Promise; /** * Export script by name * @param {string} scriptName script name * @returns {Promise} a promise that resolved to a ScriptExportInterface object */ - exportScriptByName(scriptName: string): Promise; + exportScriptByName( + scriptName: string, + options?: ScriptExportOptions + ): Promise; /** * Import scripts * @param {string} scriptName Optional name of script. If supplied, only the script of that name is imported @@ -183,6 +195,9 @@ export default (state: State): Script => { async readScripts(): Promise { return readScripts({ state }); }, + getLibraryScriptNames(scriptObj: ScriptSkeleton): string[] { + return getLibraryScriptNames(scriptObj); + }, async readScript(scriptId: string): Promise { return readScript({ scriptId, state }); }, @@ -211,18 +226,34 @@ export default (state: State): Script => { async deleteScripts(): Promise { return deleteScripts({ state }); }, - async exportScript(scriptId: string): Promise { - return exportScript({ scriptId, state }); + async exportScript( + scriptId: string, + options: ScriptExportOptions = { + includeLibraries: true, + includeDefault: true, + useStringArrays: true, + } + ): Promise { + return exportScript({ scriptId, options, state }); }, async exportScriptByName( - scriptName: string + scriptName: string, + options: ScriptExportOptions = { + includeLibraries: true, + includeDefault: true, + useStringArrays: true, + } ): Promise { - return exportScriptByName({ scriptName, state }); + return exportScriptByName({ scriptName, options, state }); }, async exportScripts( - includeDefault = false + options: ScriptExportOptions = { + includeLibraries: true, + includeDefault: false, + useStringArrays: true, + } ): Promise { - return exportScripts({ includeDefault, state }); + return exportScripts({ options, state }); }, async importScripts( scriptName: string, @@ -281,6 +312,24 @@ export interface ScriptImportOptions { includeDefault: boolean; } +/** + * Script export options + */ +export interface ScriptExportOptions { + /** + * Include library scripts in export + */ + includeLibraries: boolean; + /** + * Include default scripts in import if true + */ + includeDefault: boolean; + /** + * Use string arrays to store script code + */ + useStringArrays: boolean; +} + /** * Create an empty script export template * @returns {ScriptExportInterface} an empty script export template @@ -313,9 +362,22 @@ export async function readScripts({ } } +/** + * Get the names of library scripts required by the input script object + * @returns an array of required library script names + */ +export function getLibraryScriptNames(scriptObj: ScriptSkeleton): string[] { + const script = Array.isArray(scriptObj.script) + ? scriptObj.script.join('\n') + : decode(scriptObj.script as string); + const regex = /require\(['|"](.+?)['|"]\)/g; + const matches = [...script.matchAll(regex)]; + return matches.map((m) => String(m[1])); +} + /** * Get script - * @returns {Promise} a promise that resolves to an array of script objects + * @returns {Promise} a promise that resolves to an array of script objects */ export async function readScript({ scriptId, @@ -325,7 +387,8 @@ export async function readScript({ state: State; }): Promise { try { - return _getScript({ scriptId, state }); + const result = await _getScript({ scriptId, state }); + return result; } catch (error) { throw new FrodoError(`Error reading script ${scriptId}`, error); } @@ -495,17 +558,38 @@ export async function deleteScripts({ */ export async function exportScript({ scriptId, + options = { + includeLibraries: true, + includeDefault: true, + useStringArrays: true, + }, state, }: { scriptId: string; + options?: ScriptExportOptions; state: State; }): Promise { try { debugMessage({ message: `ScriptOps.exportScriptById: start`, state }); + const { includeLibraries } = options; const scriptData = await _getScript({ scriptId, state }); scriptData.script = convertBase64TextToArray(scriptData.script); const exportData = createScriptExportTemplate({ state }); exportData.script[scriptData._id] = scriptData; + // handle library scripts + if (includeLibraries) { + const scriptNames = getLibraryScriptNames(scriptData); + for (const scriptName of scriptNames) { + const libScriptObject = await readScriptByName({ + scriptName, + state, + }); + libScriptObject.script = convertBase64TextToArray( + libScriptObject.script as string + ); + exportData.script[libScriptObject._id] = libScriptObject; + } + } debugMessage({ message: `ScriptOps.exportScriptById: end`, state }); return exportData; } catch (error) { @@ -520,17 +604,38 @@ export async function exportScript({ */ export async function exportScriptByName({ scriptName, + options = { + includeLibraries: true, + includeDefault: true, + useStringArrays: true, + }, state, }: { scriptName: string; + options?: ScriptExportOptions; state: State; }): Promise { try { debugMessage({ message: `ScriptOps.exportScriptByName: start`, state }); + const { includeLibraries } = options; const scriptData = await readScriptByName({ scriptName, state }); scriptData.script = convertBase64TextToArray(scriptData.script as string); const exportData = createScriptExportTemplate({ state }); exportData.script[scriptData._id] = scriptData; + // handle library scripts + if (includeLibraries) { + const scriptNames = getLibraryScriptNames(scriptData); + for (const scriptName of scriptNames) { + const libScriptObject = await readScriptByName({ + scriptName, + state, + }); + libScriptObject.script = convertBase64TextToArray( + libScriptObject.script as string + ); + exportData.script[libScriptObject._id] = libScriptObject; + } + } debugMessage({ message: `ScriptOps.exportScriptByName: end`, state }); return exportData; } catch (error) { @@ -544,15 +649,20 @@ export async function exportScriptByName({ * @returns {Promise} a promise that resolved to a ScriptExportInterface object */ export async function exportScripts({ - includeDefault = false, + options = { + includeLibraries: true, + includeDefault: false, + useStringArrays: true, + }, state, }: { - includeDefault: boolean; + options?: ScriptExportOptions; state: State; }): Promise { const errors: Error[] = []; let indicatorId: string; try { + const { includeLibraries, includeDefault } = options; let scriptList = await readScripts({ state }); if (!includeDefault) scriptList = scriptList.filter((script) => !script.default); @@ -562,6 +672,7 @@ export async function exportScripts({ message: `Exporting ${scriptList.length} scripts...`, state, }); + const name2uuid: { [key: string]: string } = {}; for (const script of scriptList) { try { updateProgressIndicator({ @@ -577,6 +688,23 @@ export async function exportScripts({ scriptData.script as string ); exportData.script[scriptData._id] = scriptData; + // handle library scripts + if (includeLibraries) { + const scriptNames = getLibraryScriptNames(scriptData); + for (const scriptName of scriptNames) { + if (name2uuid[scriptName] === undefined) { + const libScriptObject = await readScriptByName({ + scriptName, + state, + }); + name2uuid[scriptName] = libScriptObject._id; + libScriptObject.script = convertBase64TextToArray( + libScriptObject.script as string + ); + exportData.script[libScriptObject._id] = libScriptObject; + } + } + } } catch (error) { errors.push(error); } diff --git a/src/test/mock-recordings/ScriptOps_3024995978/deleteScriptByName_571993320/1-delete-script-by-name_2688005936/recording.har b/src/test/mock-recordings/ScriptOps_3024995978/deleteScriptByName_571993320/1-delete-script-by-name_2688005936/recording.har index 8e732f66b..f17c7ac07 100644 --- a/src/test/mock-recordings/ScriptOps_3024995978/deleteScriptByName_571993320/1-delete-script-by-name_2688005936/recording.har +++ b/src/test/mock-recordings/ScriptOps_3024995978/deleteScriptByName_571993320/1-delete-script-by-name_2688005936/recording.har @@ -20,16 +20,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-27" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-ee96d45c-53fa-47c1-826f-a7fa93acec65" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -37,14 +37,18 @@ }, { "name": "authorization", - "value": "Bearer eyJ0eXAiOiJKV1QiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..rJeuF3EnnVbE69gg9OUdsg.krFoGTo0Ijtz5pHSZ0MU-r0KhlOwLP6yi-ggAJUxhT03J_rcka8ckxc8KrDH3eqBY43rJJFw10-e03yaLQw31sm9oo8qmna3wpQjuUHhrD2iWGDfA0SXDeRNwg-jz47IbfKaKMb2g664qKZrrGt_XAv1jS6mMoa6drnlud5KDkC65Ad80SicDFB6J1HeG2qyR98yf15b-p9_Ruq1dUNYvHk3WPq6qDL2no3I0q-R5V8Y7F6SppivopRDgHt_Dhhba_CS-txICMub5LB4XqXRmakMPVEXzyoZjbUFSkRDhdyPjvk5NJps5e6jiCHzaMqFbYg6HtM4gupPL0byaeNjGiZD69wgIlF27YSfbJx6WG0gvBLwOqXMY5oXYif2i1koibIwvLAxCgLRrsAE4KeYw1S1Ftu__GMA0F7YQ-QVso1nJm5wBwgzW-OjrqMZq9_ntpqpuubnWsDQ6sB8Toajv1Gjg_7pXupzEfTqg6FfkgqG-I3q0VsM2BesKuJswsrfJum76ENksV_zf4s1FLV-o0LNwWsQzRBW-Pz66iQKqciBpJS4D3zvIcsR5siDfyRqfgfrVaaX1z6dg5pQ7eAr_s5kQ1q336e74ts6qYx_RM46HEpYlbQ5_g2D7dBxu-6U_2L1A7efbN8DcnJHvc-0ZpXDC2-wkEHfpmwbt61wKypzwJSC3rgnCTHNfzyMBGvtuf5vA0gr2df8SbFjIyO5a2w4fiCApPjduvTC5z65omop5hbg4D8CtjADLatrNybmV-xaWkgb0WeqRXkLIJ_nzvJ9v83XEiyW_Coy-WDgPirrbOK6MnvsOe37LS1RUByc-30T4lKPR_m72ugU0THBKFEzYgQND0-tmyXEJFScxMYOMxKDcp2hNx2Tz1AjG1jR_hIeGIeIgavk8ww2uYLSRcfM9smb7VBp2XCMq2tEWEK5j_0D7jMgrLXonpFfGVU3dXOS0g2p52pID1pcF29xokNS52Hulw8VBrItd4Jhcup_FKqrXKNubdVo4KF8WXd3vgW_FPu5y3stY0YCur1VaCplkRiFaBX9ddHhLKtGFM8.pVbT9DpYjlNT4zaT0Hz-7Q" + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1627, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ @@ -56,11 +60,11 @@ "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript2%22" }, "response": { - "bodySize": 1106, + "bodySize": 1131, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1106, - "text": "{\"result\":[{\"_id\":\"b7259916-71ed-4675-8c5a-de86a80e4aed\",\"name\":\"FrodoTestScript2\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1131, + "text": "{\"result\":[{\"_id\":\"b7259916-71ed-4675-8c5a-de86a80e4aed\",\"name\":\"FrodoTestScript2\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -70,7 +74,7 @@ }, { "name": "content-security-policy-report-only", - "value": "script-src 'self' 'unsafe-eval' 'unsafe-inline'; frame-ancestors 'self'" + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" }, { "name": "x-content-type-options", @@ -110,20 +114,24 @@ }, { "name": "content-length", - "value": "1106" + "value": "1131" }, { "name": "date", - "value": "Thu, 10 Aug 2023 18:20:28 GMT" + "value": "Wed, 19 Jun 2024 21:28:31 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-ee96d45c-53fa-47c1-826f-a7fa93acec65" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -133,14 +141,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2023-08-10T18:20:29.202Z", - "time": 82, + "startedDateTime": "2024-06-19T21:28:32.742Z", + "time": 100, "timings": { "blocked": -1, "connect": -1, @@ -148,7 +156,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 82 + "wait": 100 } }, { @@ -164,16 +172,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-27" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-ee96d45c-53fa-47c1-826f-a7fa93acec65" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -181,14 +189,18 @@ }, { "name": "authorization", - "value": "Bearer eyJ0eXAiOiJKV1QiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..rJeuF3EnnVbE69gg9OUdsg.krFoGTo0Ijtz5pHSZ0MU-r0KhlOwLP6yi-ggAJUxhT03J_rcka8ckxc8KrDH3eqBY43rJJFw10-e03yaLQw31sm9oo8qmna3wpQjuUHhrD2iWGDfA0SXDeRNwg-jz47IbfKaKMb2g664qKZrrGt_XAv1jS6mMoa6drnlud5KDkC65Ad80SicDFB6J1HeG2qyR98yf15b-p9_Ruq1dUNYvHk3WPq6qDL2no3I0q-R5V8Y7F6SppivopRDgHt_Dhhba_CS-txICMub5LB4XqXRmakMPVEXzyoZjbUFSkRDhdyPjvk5NJps5e6jiCHzaMqFbYg6HtM4gupPL0byaeNjGiZD69wgIlF27YSfbJx6WG0gvBLwOqXMY5oXYif2i1koibIwvLAxCgLRrsAE4KeYw1S1Ftu__GMA0F7YQ-QVso1nJm5wBwgzW-OjrqMZq9_ntpqpuubnWsDQ6sB8Toajv1Gjg_7pXupzEfTqg6FfkgqG-I3q0VsM2BesKuJswsrfJum76ENksV_zf4s1FLV-o0LNwWsQzRBW-Pz66iQKqciBpJS4D3zvIcsR5siDfyRqfgfrVaaX1z6dg5pQ7eAr_s5kQ1q336e74ts6qYx_RM46HEpYlbQ5_g2D7dBxu-6U_2L1A7efbN8DcnJHvc-0ZpXDC2-wkEHfpmwbt61wKypzwJSC3rgnCTHNfzyMBGvtuf5vA0gr2df8SbFjIyO5a2w4fiCApPjduvTC5z65omop5hbg4D8CtjADLatrNybmV-xaWkgb0WeqRXkLIJ_nzvJ9v83XEiyW_Coy-WDgPirrbOK6MnvsOe37LS1RUByc-30T4lKPR_m72ugU0THBKFEzYgQND0-tmyXEJFScxMYOMxKDcp2hNx2Tz1AjG1jR_hIeGIeIgavk8ww2uYLSRcfM9smb7VBp2XCMq2tEWEK5j_0D7jMgrLXonpFfGVU3dXOS0g2p52pID1pcF29xokNS52Hulw8VBrItd4Jhcup_FKqrXKNubdVo4KF8WXd3vgW_FPu5y3stY0YCur1VaCplkRiFaBX9ddHhLKtGFM8.pVbT9DpYjlNT4zaT0Hz-7Q" + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1619, + "headersSize": 1663, "httpVersion": "HTTP/1.1", "method": "DELETE", "queryString": [], @@ -209,7 +221,7 @@ }, { "name": "content-security-policy-report-only", - "value": "script-src 'self' 'unsafe-eval' 'unsafe-inline'; frame-ancestors 'self'" + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" }, { "name": "x-content-type-options", @@ -253,16 +265,20 @@ }, { "name": "date", - "value": "Thu, 10 Aug 2023 18:20:28 GMT" + "value": "Wed, 19 Jun 2024 21:28:32 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-ee96d45c-53fa-47c1-826f-a7fa93acec65" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -272,14 +288,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 745, + "headersSize": 765, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2023-08-10T18:20:29.291Z", - "time": 69, + "startedDateTime": "2024-06-19T21:28:32.846Z", + "time": 92, "timings": { "blocked": -1, "connect": -1, @@ -287,7 +303,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 69 + "wait": 92 } } ], diff --git a/src/test/mock-recordings/ScriptOps_3024995978/deleteScript_3257550726/1-delete-script-by-id_2302622086/recording.har b/src/test/mock-recordings/ScriptOps_3024995978/deleteScript_3257550726/1-delete-script-by-id_2302622086/recording.har index 40191c334..91b178b41 100644 --- a/src/test/mock-recordings/ScriptOps_3024995978/deleteScript_3257550726/1-delete-script-by-id_2302622086/recording.har +++ b/src/test/mock-recordings/ScriptOps_3024995978/deleteScript_3257550726/1-delete-script-by-id_2302622086/recording.har @@ -20,16 +20,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-27" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-ee96d45c-53fa-47c1-826f-a7fa93acec65" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -37,14 +37,18 @@ }, { "name": "authorization", - "value": "Bearer eyJ0eXAiOiJKV1QiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..rJeuF3EnnVbE69gg9OUdsg.krFoGTo0Ijtz5pHSZ0MU-r0KhlOwLP6yi-ggAJUxhT03J_rcka8ckxc8KrDH3eqBY43rJJFw10-e03yaLQw31sm9oo8qmna3wpQjuUHhrD2iWGDfA0SXDeRNwg-jz47IbfKaKMb2g664qKZrrGt_XAv1jS6mMoa6drnlud5KDkC65Ad80SicDFB6J1HeG2qyR98yf15b-p9_Ruq1dUNYvHk3WPq6qDL2no3I0q-R5V8Y7F6SppivopRDgHt_Dhhba_CS-txICMub5LB4XqXRmakMPVEXzyoZjbUFSkRDhdyPjvk5NJps5e6jiCHzaMqFbYg6HtM4gupPL0byaeNjGiZD69wgIlF27YSfbJx6WG0gvBLwOqXMY5oXYif2i1koibIwvLAxCgLRrsAE4KeYw1S1Ftu__GMA0F7YQ-QVso1nJm5wBwgzW-OjrqMZq9_ntpqpuubnWsDQ6sB8Toajv1Gjg_7pXupzEfTqg6FfkgqG-I3q0VsM2BesKuJswsrfJum76ENksV_zf4s1FLV-o0LNwWsQzRBW-Pz66iQKqciBpJS4D3zvIcsR5siDfyRqfgfrVaaX1z6dg5pQ7eAr_s5kQ1q336e74ts6qYx_RM46HEpYlbQ5_g2D7dBxu-6U_2L1A7efbN8DcnJHvc-0ZpXDC2-wkEHfpmwbt61wKypzwJSC3rgnCTHNfzyMBGvtuf5vA0gr2df8SbFjIyO5a2w4fiCApPjduvTC5z65omop5hbg4D8CtjADLatrNybmV-xaWkgb0WeqRXkLIJ_nzvJ9v83XEiyW_Coy-WDgPirrbOK6MnvsOe37LS1RUByc-30T4lKPR_m72ugU0THBKFEzYgQND0-tmyXEJFScxMYOMxKDcp2hNx2Tz1AjG1jR_hIeGIeIgavk8ww2uYLSRcfM9smb7VBp2XCMq2tEWEK5j_0D7jMgrLXonpFfGVU3dXOS0g2p52pID1pcF29xokNS52Hulw8VBrItd4Jhcup_FKqrXKNubdVo4KF8WXd3vgW_FPu5y3stY0YCur1VaCplkRiFaBX9ddHhLKtGFM8.pVbT9DpYjlNT4zaT0Hz-7Q" + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1619, + "headersSize": 1663, "httpVersion": "HTTP/1.1", "method": "DELETE", "queryString": [], @@ -65,7 +69,7 @@ }, { "name": "content-security-policy-report-only", - "value": "script-src 'self' 'unsafe-eval' 'unsafe-inline'; frame-ancestors 'self'" + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" }, { "name": "x-content-type-options", @@ -109,16 +113,20 @@ }, { "name": "date", - "value": "Thu, 10 Aug 2023 18:20:28 GMT" + "value": "Wed, 19 Jun 2024 21:28:31 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-ee96d45c-53fa-47c1-826f-a7fa93acec65" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -128,14 +136,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 745, + "headersSize": 765, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2023-08-10T18:20:29.121Z", - "time": 67, + "startedDateTime": "2024-06-19T21:28:32.039Z", + "time": 692, "timings": { "blocked": -1, "connect": -1, @@ -143,7 +151,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 67 + "wait": 692 } } ], diff --git a/src/test/mock-recordings/ScriptOps_3024995978/exportScriptByName_2694550125/1-Export-script-by-name-FrodoTestScript1_1520254671/recording.har b/src/test/mock-recordings/ScriptOps_3024995978/exportScriptByName_2694550125/1-Export-script-by-name-FrodoTestScript1_1520254671/recording.har index a3c51b7cf..8a797cb39 100644 --- a/src/test/mock-recordings/ScriptOps_3024995978/exportScriptByName_2694550125/1-Export-script-by-name-FrodoTestScript1_1520254671/recording.har +++ b/src/test/mock-recordings/ScriptOps_3024995978/exportScriptByName_2694550125/1-Export-script-by-name-FrodoTestScript1_1520254671/recording.har @@ -20,16 +20,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-32" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-a3f32770-5881-4c4f-82d9-180a286b5f60" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -39,12 +39,16 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1625, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ @@ -56,11 +60,11 @@ "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript1%22" }, "response": { - "bodySize": 1106, + "bodySize": 1131, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1106, - "text": "{\"result\":[{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1131, + "text": "{\"result\":[{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -110,20 +114,24 @@ }, { "name": "content-length", - "value": "1106" + "value": "1131" }, { "name": "date", - "value": "Sat, 30 Sep 2023 16:45:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:21 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-a3f32770-5881-4c4f-82d9-180a286b5f60" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -133,14 +141,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2023-09-30T16:45:21.858Z", - "time": 58, + "startedDateTime": "2024-06-19T21:28:22.470Z", + "time": 54, "timings": { "blocked": -1, "connect": -1, @@ -148,7 +156,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 58 + "wait": 54 } } ], diff --git a/src/test/mock-recordings/ScriptOps_3024995978/exportScript_2410661895/1-Export-script-by-id-c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d_3108485184/recording.har b/src/test/mock-recordings/ScriptOps_3024995978/exportScript_2410661895/1-Export-script-by-id-c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d_3108485184/recording.har index b151dcc02..bfea8929c 100644 --- a/src/test/mock-recordings/ScriptOps_3024995978/exportScript_2410661895/1-Export-script-by-id-c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d_3108485184/recording.har +++ b/src/test/mock-recordings/ScriptOps_3024995978/exportScript_2410661895/1-Export-script-by-id-c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d_3108485184/recording.har @@ -20,16 +20,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-32" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-a3f32770-5881-4c4f-82d9-180a286b5f60" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -39,23 +39,27 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1614, + "headersSize": 1660, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [], "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts/c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d" }, "response": { - "bodySize": 969, + "bodySize": 994, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 969, - "text": "{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0}" + "size": 994, + "text": "{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}" }, "cookies": [], "headers": [ @@ -105,20 +109,24 @@ }, { "name": "content-length", - "value": "969" + "value": "994" }, { "name": "date", - "value": "Sat, 30 Sep 2023 16:45:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:21 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-a3f32770-5881-4c4f-82d9-180a286b5f60" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -128,14 +136,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 746, + "headersSize": 766, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2023-09-30T16:45:21.742Z", - "time": 104, + "startedDateTime": "2024-06-19T21:28:22.381Z", + "time": 73, "timings": { "blocked": -1, "connect": -1, @@ -143,7 +151,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 104 + "wait": 73 } } ], diff --git a/src/test/mock-recordings/ScriptOps_3024995978/exportScripts_3396715418/1-Export-all-scripts_4159107411/recording.har b/src/test/mock-recordings/ScriptOps_3024995978/exportScripts_3396715418/1-Export-all-scripts_4159107411/recording.har index f5f97c3ef..2b2673aab 100644 --- a/src/test/mock-recordings/ScriptOps_3024995978/exportScripts_3396715418/1-Export-all-scripts_4159107411/recording.har +++ b/src/test/mock-recordings/ScriptOps_3024995978/exportScripts_3396715418/1-Export-all-scripts_4159107411/recording.har @@ -20,16 +20,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -39,12 +39,16 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1595, + "headersSize": 1641, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ @@ -56,11 +60,11 @@ "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=true" }, "response": { - "bodySize": 370804, + "bodySize": 464939, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 370804, - "text": "{\"result\":[{\"_id\":\"3b2f6836-184c-4ee9-8a1d-557cb01837a5\",\"name\":\"FrodoTestScript3\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1d475815-72cb-42eb-aafd-4026989d28a7\",\"name\":\"Social Identity Provider Profile Transformation Script\",\"description\":\"Default global script for Social Identity Provider Profile Transformation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyogRGVmYXVsdCBTb2NpYWwgSWRlbnRpdHkgUHJvdmlkZXIgUHJvZmlsZSBUcmFuc2Zvcm1hdGlvbiBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzICov\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"bae1d54a-e97d-4997-aa5d-c027f21af82c\",\"name\":\"Facebook Profile Normalization\",\"description\":\"Normalizes raw profile data from Facebook\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"69f06e63-128c-4e2f-af52-079a8a6f448b\",\"name\":\"SAML2 SP Adapter Script\",\"description\":\"Default global script for SAML2 SP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_SP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c735de08-f8f2-4e69-aa4a-2d8d3d438323\",\"name\":\"OAuth2 May Act Script\",\"description\":\"Default global script for OAuth2 May Act\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKiB0b2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gdG8gYmUgdXBkYXRlZC4gTXV0YWJsZSBvYmplY3QsIGFsbCBjaGFuZ2VzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gd2lsbCBiZSByZWZsZWN0ZWQuCiAqIGxvZ2dlciAtIGFsd2F5cyBwcmVzZW50LCBjb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIHNjcmlwdE5hbWUgLSBhbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0CiAqIHNlc3Npb24gLSBwcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdAogKiByZXF1ZXN0UHJvcGVydGllcyAtIGFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIHRoZSByZXF1ZXN0IFVSSQogKiAgICAgICAgICAgICAgICAgICAgIHJlYWxtIC0gdGhlIHJlYWxtIHRoYXQgdGhlIHJlcXVlc3QgcmVsYXRlcyB0bwogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBhIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLiBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IKICogICAgICAgICAgICAgICAgICAgICBtb3JlIHByb3BlcnRpZXMuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QKICogICAgICAgICAgICAgICAgICAgICBwcmFjdGljZXMuCiAqIGNsaWVudFByb3BlcnRpZXMgLSBwcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICBjbGllbnRJZCAtIHRoZSBjbGllbnQncyBVcmkgZm9yIHRoZSByZXF1ZXN0IGxvY2FsZQogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBsaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gbGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudAogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFNjb3BlcyAtIGxpc3Qgb2YgdGhlIGFsbG93ZWQgc2NvcGVzIGZvciB0aGUgY2xpZW50CiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzLCBlLmc6CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdE1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyB0ZXN0bWFwIC0+IEtleTEgLT4gVmFsdWUxCiAqCiAqIGlkZW50aXR5IC0gYWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIKICogc2NvcGVzIC0gYWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzCiAqLwovKgppbXBvcnQgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQoKdG9rZW4uc2V0TWF5QWN0KAogICAgSnNvblZhbHVlLmpzb24oSnNvblZhbHVlLm9iamVjdCgKICAgICAgICBKc29uVmFsdWUuZmllbGQoImNsaWVudF9pZCIsICJteUNsaWVudCIpLCAKICAgICAgICBKc29uVmFsdWUuZmllbGQoInN1YiIsICIodXNyIW15QWN0b3IpIikpKSkKKi8=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"OAUTH2_MAY_ACT\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"91d197de-5916-4dca-83b5-9a4df26e7159\",\"name\":\"WordPress Profile Normalization\",\"description\":\"Normalizes raw profile data from WordPress\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJuYW1lKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5hdmF0YXJfVVJMKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e1db8a0a-0329-4962-a5bf-ecffaca376ae\",\"name\":\"Alpha endUserUIClient OIDC Claims Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"ed685f9f-5909-4726-86e8-22bd38b47663\",\"name\":\"Normalized Profile to Identity\",\"description\":\"Converts a normalized social profile into an Identity\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgaWRlbnRpdHkgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgiY24iLCBub3JtYWxpemVkUHJvZmlsZS5kaXNwbGF5TmFtZSksCiAgICAgICAgZmllbGQoInVzZXJOYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUudXNlcm5hbWUpLAogICAgICAgIGZpZWxkKCJpcGxhbmV0LWFtLXVzZXItYWxpYXMtbGlzdCIsIHNlbGVjdGVkSWRwICsgJy0nICsgbm9ybWFsaXplZFByb2ZpbGUuaWQuYXNTdHJpbmcoKSkpKQoKcmV0dXJuIGlkZW50aXR5\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"39c08084-1238-43e8-857f-2e11005eac49\",\"name\":\"Alpha OAuth2 Access Token Modification Script\",\"description\":\"Default alpha realm script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"b7259916-71ed-4675-8c5a-de86a80e4aed\",\"name\":\"FrodoTestScript2\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3bd13a46-61c4-4974-8efb-1700c80c64e3\",\"name\":\"Inactive Device Match Script\",\"description\":\"Inactive Device Match Script\",\"script\":\"LyoKICogSW5hY3RpdmUgRGV2aWNlIE1hdGNoIFNjcmlwdAogKi8KCm91dGNvbWUgPSAidHJ1ZSI7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"13e3f263-9cd3-4844-8d1c-040fd0dd02eb\",\"name\":\"Device Profile Match Template - Decision Node Script\",\"description\":\"Default global script template for Device Profile Match decision node script for Authentication Tree\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGEgc2ltcGxpZmllZCB0ZW1wbGF0ZSBmb3IgdW5kZXJzdGFuZGluZwogKiB0aGUgYmFzaWNzIG9mIGRldmljZSBtYXRjaGluZy4gX1RoaXMgaXMgbm90IGZ1bmN0aW9uYWxseSBjb21wbGV0ZS5fCiAqIEZvciBhIGZ1bmN0aW9uYWxseSBjb21wbGV0ZSBzY3JpcHQgYXMgd2VsbCBhcyBhIGRldmVsb3BtZW50IHRvb2xraXQsCiAqIHZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9Gb3JnZVJvY2svZm9yZ2Vyb2NrLWRldmljZS1tYXRjaC1zY3JpcHQuCiAqCiAqIEdsb2JhbCBub2RlIHZhcmlhYmxlcyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGlzIHNjb3BlOgogKiAxLiBgc2hhcmVkU3RhdGVgIHByb3ZpZGVzIGFjY2VzcyB0byBpbmNvbWluZyByZXF1ZXN0CiAqIDIuIGBkZXZpY2VQcm9maWxlc0Rhb2AgcHJvdmlkZXMgYWNjZXNzIHRvIHN0b3JlZCBwcm9maWxlcwogKiAzLiBgb3V0Y29tZWAgdmFyaWFibGUgbWFwcyB0byBhdXRoIHRyZWUgbm9kZSBvdXRjb21lczsgdmFsdWVzIGFyZQogKiAgICAndHJ1ZScsICdmYWxzZScsIG9yICd1bmtub3duRGV2aWNlJyAobm90aWNlIF9hbGxfIGFyZSBzdHJpbmdzKS4KICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgcmVxdWVzdCdzIGRldmljZSBwcm9maWxlLgogKiBSZXR1cm5zIHNlcmlhbGl6ZWQgSlNPTiAodHlwZSBzdHJpbmcpOyBwYXJzaW5nIHRoaXMgd2lsbCByZXN1bHQgYQogKiBuYXRpdmUgSlMgb2JqZWN0LgogKi8KdmFyIGluY29taW5nSnNvbiA9IHNoYXJlZFN0YXRlLmdldCgnZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlJykudG9TdHJpbmcoKTsKdmFyIGluY29taW5nID0gSlNPTi5wYXJzZShpbmNvbWluZ0pzb24pOwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgdXNlcidzIHVzZXJuYW1lIGFuZCByZWFsbS4KICogTm90aWNlIHRoZSB1c2Ugb2YgYC5hc1N0cmluZygpYC4KICovCnZhciB1c2VybmFtZSA9IHNoYXJlZFN0YXRlLmdldCgidXNlcm5hbWUiKS5hc1N0cmluZygpOwp2YXIgcmVhbG0gPSBzaGFyZWRTdGF0ZS5nZXQoInJlYWxtIikuYXNTdHJpbmcoKTsKCi8qKgogKiBHZXQgdGhlIHVzZXIncyBzdG9yZWQgcHJvZmlsZXMgZm9yIGFwcHJvcHJpYXRlIHJlYWxtLgogKiBSZXR1cm5zIGEgX3NwZWNpYWxfIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIHByb2ZpbGUgZGF0YQogKi8KdmFyIHN0b3JlZFByb2ZpbGVzID0gZGV2aWNlUHJvZmlsZXNEYW8uZ2V0RGV2aWNlUHJvZmlsZXModXNlcm5hbWUsIHJlYWxtKTsKCi8vIERlZmF1bHQgdG8gYG91dGNvbWVgIG9mICd1bmtub3duRGV2aWNlJwpvdXRjb21lID0gJ3Vua25vd25EZXZpY2UnOwoKaWYgKHN0b3JlZFByb2ZpbGVzKSB7CiAgICB2YXIgaSA9IDA7CiAgICAvLyBOT1RFOiBgLnNpemUoKWAgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBzdG9yZWQgcHJvZmlsZXMKICAgIHZhciBsZW4gPSBzdG9yZWRQcm9maWxlcy5zaXplKCk7CgogICAgZm9yIChpOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIHN0b3JlZCBwcm9maWxlLgogICAgICAgICAqIFJldHVybnMgc2VyaWFsaXplZCBKU09OICh0eXBlIHN0cmluZyk7IHBhcnNpbmcgdGhpcyB3aWxsIHJlc3VsdAogICAgICAgICAqIGEgbmF0aXZlIEpTIG9iamVjdC4KICAgICAgICAgKi8KICAgICAgICB2YXIgc3RvcmVkSnNvbiA9IHN0b3JlZFByb2ZpbGVzLmdldChpKTsKICAgICAgICB2YXIgc3RvcmVkID0gSlNPTi5wYXJzZShzdG9yZWRKc29uKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogRmluZCBhIHN0b3JlZCBwcm9maWxlIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllci4KICAgICAgICAgKi8KICAgICAgICBpZiAoaW5jb21pbmcuaWRlbnRpZmllciA9PT0gc3RvcmVkLmlkZW50aWZpZXIpIHsKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBOb3cgdGhhdCB5b3UndmUgZm91bmQgdGhlIGFwcHJvcHJpYXRlIHByb2ZpbGUsIHlvdSB3aWxsIHBlcmZvcm0KICAgICAgICAgICAgICogdGhlIGxvZ2ljIGhlcmUgdG8gbWF0Y2ggdGhlIHZhbHVlcyBvZiB0aGUgYGluY29taW5nYCBwcm9maWxlCiAgICAgICAgICAgICAqIHdpdGggdGhhdCBvZiB0aGUgYHN0b3JlZGAgcHJvZmlsZS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogVGhlIHJlc3VsdCBvZiB0aGUgbWF0Y2hpbmcgbG9naWMgaXMgYXNzaWduZWQgdG8gYG91dGNvbWVgLiBTaW5jZQogICAgICAgICAgICAgKiB3ZSBoYXZlIHByb2ZpbGVzIG9mIHRoZSBzYW1lIGlkZW50aWZpZXIsIHRoZSB2YWx1ZSAodHlwZSBzdHJpbmcpCiAgICAgICAgICAgICAqIHNob3VsZCBub3cgYmUgZWl0aGVyICd0cnVlJyBvciAnZmFsc2UnIChwcm9wZXJ0aWVzIG1hdGNoZWQgb3Igbm90KS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0b3BpYywgdmlzaXQgdGhpcyBHaXRodWIgcmVwbzoKICAgICAgICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL0ZvcmdlUm9jay9mb3JnZXJvY2stZGV2aWNlLW1hdGNoLXNjcmlwdAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgb3V0Y29tZSA9ICdmYWxzZSc7CiAgICAgICAgfQogICAgfQp9\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"703dab1a-1921-4981-98dd-b8e5349d8548\",\"name\":\"Device Id (Match) - Server Side\",\"description\":\"Default global script for server side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAyMyBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIFNjYWxhckNvbXBhcmF0b3IgPSB7fSwgU2NyZWVuQ29tcGFyYXRvciA9IHt9LCBNdWx0aVZhbHVlQ29tcGFyYXRvciA9IHt9LCBVc2VyQWdlbnRDb21wYXJhdG9yID0ge30sIEdlb2xvY2F0aW9uQ29tcGFyYXRvciA9IHt9OwoKdmFyIGNvbmZpZyA9IHsKICAgIHByb2ZpbGVFeHBpcmF0aW9uOiAzMCwgICAgICAgICAgICAgIC8vaW4gZGF5cwogICAgbWF4UHJvZmlsZXNBbGxvd2VkOiA1LAogICAgbWF4UGVuYWx0eVBvaW50czogMCwKICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBzY3JlZW46IHsKICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICAgIGNvbXBhcmF0b3I6IFNjcmVlbkNvbXBhcmF0b3IsCiAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDUwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHBsdWdpbnM6IHsKICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2luczogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmb250czogewogICAgICAgICAgICBpbnN0YWxsZWRGb250czogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogU2NhbGFyQ29tcGFyYXRvciwKICAgICAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdXNlckFnZW50OiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgICBjb21wYXJhdG9yOiBVc2VyQWdlbnRDb21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBpZ25vcmVWZXJzaW9uOiB0cnVlLAogICAgICAgICAgICAgICAgcGVuYWx0eVBvaW50czogMTAwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdlb2xvY2F0aW9uOiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSwKICAgICAgICAgICAgY29tcGFyYXRvcjogR2VvbG9jYXRpb25Db21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBhbGxvd2VkUmFuZ2U6IDEwMCwgICAgICAgICAgICAvL2luIG1pbGVzCiAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJhdG9yIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCgp2YXIgYWxsLCBhbnksIGNhbGN1bGF0ZURpc3RhbmNlLCBjYWxjdWxhdGVJbnRlcnNlY3Rpb24sIGNhbGN1bGF0ZVBlcmNlbnRhZ2UsIG51bGxPclVuZGVmaW5lZCwgc3BsaXRBbmRUcmltLAogICAgdW5kZWZpbmVkTG9jYXRpb247CgovLyBDb21wYXJpc29uUmVzdWx0CgovKioKICogQ29uc3RydWN0cyBhbiBpbnN0YW5jZSBvZiBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gcGVuYWx0eSBwb2ludHMuCiAqCiAqIEBwYXJhbSBwZW5hbHR5UG9pbnRzIChOdW1iZXIpIFRoZSBwZW5hbHR5IHBvaW50cyBmb3IgdGhlIGNvbXBhcmlzb24gKGRlZmF1bHRzIHRvIDApLgogKiBAcGFyYW0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSAoYm9vbGVhbikgV2hldGhlciB0aGUgY3VycmVudCB2YWx1ZSBjb250YWlucyBtb3JlIGluZm9ybWF0aW9uCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIHRoZSBzdG9yZWQgdmFsdWUgKGRlZmF1bHRzIHRvIGZhbHNlKS4KICovCmZ1bmN0aW9uIENvbXBhcmlzb25SZXN1bHQoKSB7CgogICAgdmFyIHBlbmFsdHlQb2ludHMgPSAwLAogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBmYWxzZTsKCiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQpIHsKICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBhcmd1bWVudHNbMV07CiAgICB9CgogICAgaWYgKGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkICYmIGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgaWYgKHR5cGVvZihhcmd1bWVudHNbMF0pID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSA9IGFyZ3VtZW50c1swXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIH0KICAgIH0KCiAgICB0aGlzLnBlbmFsdHlQb2ludHMgPSBwZW5hbHR5UG9pbnRzOwogICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZTsKCn0KCkNvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUyA9IG5ldyBDb21wYXJpc29uUmVzdWx0KDApOwoKLyoqCiAqIFN0YXRpYyBtZXRob2QgZm9yIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcuCiAqCiAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkuCiAqLwpDb21wYXJpc29uUmVzdWx0LmlzU3VjY2Vzc2Z1bCA9ICBmdW5jdGlvbihjb21wYXJpc29uUmVzdWx0KSB7CiAgICByZXR1cm4gY29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKTsKfTsKCgovKioKICogU3RhdGljIG1ldGhvZCBmb3IgZnVuY3Rpb25hbCBwcm9ncmFtbWluZy4KICoKICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gIGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHJldHVybiBjb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU7Cn07CgovKioKICogQ29tcGFyaXNvbiBmdW5jdGlvbiB0aGF0IGNhbiBiZSBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCB0byBhcnJheS5zb3J0CiAqLwpDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUgPSBmdW5jdGlvbihmaXJzdCwgc2Vjb25kKSB7CiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGZpcnN0KSAmJiBudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAwOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoZmlyc3QpKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAxOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoZmlyc3QucGVuYWx0eVBvaW50cyAhPT0gc2Vjb25kLnBlbmFsdHlQb2ludHMpIHsKICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnBlbmFsdHlQb2ludHMgLSBzZWNvbmQucGVuYWx0eVBvaW50czsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gKGZpcnN0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCkgLSAoc2Vjb25kLmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCk7CiAgICAgICAgfQogICAgfQp9OwoKLyoqCiAqIEFtYWxnYW1hdGVzIHRoZSBnaXZlbiBDb21wYXJpc29uUmVzdWx0IGludG8gdGhpcyBDb21wYXJpc29uUmVzdWx0LgogKgogKiBAcGFyYW0gY29tcGFyaXNvblJlc3VsdCBUaGUgQ29tcGFyaXNvblJlc3VsdCB0byBpbmNsdWRlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5wcm90b3R5cGUuYWRkQ29tcGFyaXNvblJlc3VsdCA9IGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHRoaXMucGVuYWx0eVBvaW50cyArPSBjb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHM7CiAgICBpZiAoY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKSB7CiAgICAgICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlOwogICAgfQp9OwoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBubyBwZW5hbHR5IHBvaW50cyBoYXZlIGJlZW4gYXNzaWduZWQgZm9yIHRoZSBjb21wYXJpc29uLgogKgogKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgY29tcGFyaXNvbiB3YXMgc3VjY2Vzc2Z1bC4KICovCkNvbXBhcmlzb25SZXN1bHQucHJvdG90eXBlLmlzU3VjY2Vzc2Z1bCA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZCh0aGlzLnBlbmFsdHlQb2ludHMpIHx8IHRoaXMucGVuYWx0eVBvaW50cyA9PT0gMDsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gc2ltcGxlIG9iamVjdHMgKFN0cmluZ3xOdW1iZXIpIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybwogKiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIGN1cnJlbnQgdmFsdWUuCiAqIEBwYXJhbSBzdG9yZWRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIHN0b3JlZCB2YWx1ZS4KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0LgogKi8KU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlID0gZnVuY3Rpb24gKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUsIGNvbmZpZykgewogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlN0cmluZ0NvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOnN0b3JlZFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoc3RvcmVkVmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOmNvbmZpZzogIiArIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpOwogICAgfQogICAgaWYgKGNvbmZpZy5wZW5hbHR5UG9pbnRzID09PSAwKSB7CiAgICAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUzsKICAgIH0KCiAgICBpZiAoIW51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgfHwgY3VycmVudFZhbHVlICE9PSBzdG9yZWRWYWx1ZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoIW51bGxPclVuZGVmaW5lZChjdXJyZW50VmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KHRydWUpOwogICAgfQoKICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7Cn07CgovKioKICogQ29tcGFyZXMgdHdvIHNjcmVlbnMgYW5kIGlmIHRoZXkgYXJlIGVxdWFsIHRoZW4gcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB6ZXJvIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLAogKiBvdGhlcndpc2UgcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiB7CiAqICAgICAgICAgICAgInNjcmVlbldpZHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBoZWlnaHQuCiAqICAgICAgICAgICAgInNjcmVlbkNvbG91ckRlcHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBjb2xvdXIgZGVwdGguCiAqICAgICAgICB9CiAqIEBwYXJhbSBzdG9yZWRWYWx1ZTogewogKiAgICAgICAgICAgICJzY3JlZW5XaWR0aCI6IChOdW1iZXIpIFRoZSBzdG9yZWQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIHN0b3JlZCBjbGllbnQgc2NyZWVuIGhlaWdodC4KICogICAgICAgICAgICAic2NyZWVuQ29sb3VyRGVwdGgiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGNsaWVudCBzY3JlZW4gY29sb3VyIGRlcHRoLgogKiAgICAgICAgfQogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgInBlbmFsdHlQb2ludHMiOiAoTnVtYmVyKSBUaGUgbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzLgogKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovClNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTY3JlZW5Db21wYXJhdG9yLmNvbXBhcmU6Y3VycmVudFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICBjdXJyZW50VmFsdWUgPSB7c2NyZWVuV2lkdGg6IG51bGwsIHNjcmVlbkhlaWdodDogbnVsbCwgc2NyZWVuQ29sb3VyRGVwdGg6IG51bGx9OwogICAgfQogICAgaWYgKG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBzdG9yZWRWYWx1ZSA9IHtzY3JlZW5XaWR0aDogbnVsbCwgc2NyZWVuSGVpZ2h0OiBudWxsLCBzY3JlZW5Db2xvdXJEZXB0aDogbnVsbH07CiAgICB9CgogICAgdmFyIGNvbXBhcmlzb25SZXN1bHRzID0gWwogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuV2lkdGgsIHN0b3JlZFZhbHVlLnNjcmVlbldpZHRoLCBjb25maWcpLAogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuSGVpZ2h0LCBzdG9yZWRWYWx1ZS5zY3JlZW5IZWlnaHQsIGNvbmZpZyksCiAgICAgICAgU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlKGN1cnJlbnRWYWx1ZS5zY3JlZW5Db2xvdXJEZXB0aCwgc3RvcmVkVmFsdWUuc2NyZWVuQ29sb3VyRGVwdGgsIGNvbmZpZyldOwoKICAgIGlmIChhbGwoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKSkgewogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChhbnkoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSkpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgfQp9OwoKLyoqCiAqIFNwbGl0cyBib3RoIHZhbHVlcyB1c2luZyBkZWxpbWl0ZXIsIHRyaW1zIGV2ZXJ5IHZhbHVlIGFuZCBjb21wYXJlcyBjb2xsZWN0aW9ucyBvZiB2YWx1ZXMuCiAqIFJldHVybnMgemVyby1yZXN1bHQgZm9yIHNhbWUgbXVsdGktdmFsdWUgYXR0cmlidXRlcy4KICoKICogSWYgY29sbGVjdGlvbnMgYXJlIG5vdCBzYW1lIGNoZWNrcyBpZiBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaXMgbGVzcyBvciBlcXVhbCBtYXhEaWZmZXJlbmNlcyBvcgogKiBwZXJjZW50YWdlIG9mIGRpZmZlcmVuY2UgaXMgbGVzcyBvciBlcXVhbCBtYXhQZXJjZW50YWdlRGlmZmVyZW5jZS4KICoKICogSWYgeWVzIHRoZW4gcmV0dXJucyB6ZXJvLXJlc3VsdCB3aXRoIGFkZGl0aW9uYWwgaW5mbywgZWxzZSByZXR1cm5zIHBlbmFsdHlQb2ludHMtcmVzdWx0LgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlOiAoU3RyaW5nKSBUaGUgc3RvcmVkIHZhbHVlLgogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgIm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlIjogKE51bWJlcikgVGhlIG1heCBkaWZmZXJlbmNlIHBlcmNlbnRhZ2UgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgaXMgYXNzaWduZWQuCiAqICAgICAgICAgICAgIm1heERpZmZlcmVuY2VzIjogKE51bWJlcikgVGhlIG1heCBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgcG9pbnRzIGFyZSBhc3NpZ25lZC4KICogICAgICAgICAgICAicGVuYWx0eVBvaW50cyI6IChOdW1iZXIpIFRoZSBudW1iZXIgb2YgcGVuYWx0eSBwb2ludHMuCiAgKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovCk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgdmFyIGRlbGltaXRlciA9ICI7IiwKICAgICAgICBjdXJyZW50VmFsdWVzID0gc3BsaXRBbmRUcmltKGN1cnJlbnRWYWx1ZSwgZGVsaW1pdGVyKSwKICAgICAgICBzdG9yZWRWYWx1ZXMgPSBzcGxpdEFuZFRyaW0oc3RvcmVkVmFsdWUsIGRlbGltaXRlciksCiAgICAgICAgbWF4TnVtYmVyT2ZFbGVtZW50cyA9IE1hdGgubWF4KGN1cnJlbnRWYWx1ZXMubGVuZ3RoLCBzdG9yZWRWYWx1ZXMubGVuZ3RoKSwKICAgICAgICBudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9IGNhbGN1bGF0ZUludGVyc2VjdGlvbihjdXJyZW50VmFsdWVzLCBzdG9yZWRWYWx1ZXMpLmxlbmd0aCwKICAgICAgICBudW1iZXJPZkRpZmZlcmVuY2VzID0gbWF4TnVtYmVyT2ZFbGVtZW50cyAtIG51bWJlck9mVGhlU2FtZUVsZW1lbnRzLAogICAgICAgIHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzID0gY2FsY3VsYXRlUGVyY2VudGFnZShudW1iZXJPZkRpZmZlcmVuY2VzLCBtYXhOdW1iZXJPZkVsZW1lbnRzKTsKCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKHN0b3JlZFZhbHVlKSAmJiAhbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UobnVtYmVyT2ZUaGVTYW1lRWxlbWVudHMgKyAiIG9mICIgKyBtYXhOdW1iZXJPZkVsZW1lbnRzICsgIiBhcmUgc2FtZSIpOwogICAgfQoKICAgIGlmIChtYXhOdW1iZXJPZkVsZW1lbnRzID09PSAwKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBubyBhdHRyaWJ1dGVzIGZvdW5kIGluIGJvdGggcHJvZmlsZXMiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9PT0gbWF4TnVtYmVyT2ZFbGVtZW50cykgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJJZ25vcmVkIGJlY2F1c2UgYWxsIGF0dHJpYnV0ZXMgYXJlIHNhbWUiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZkRpZmZlcmVuY2VzID4gY29uZmlnLm1heERpZmZlcmVuY2VzKSB7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJXb3VsZCBiZSBpZ25vcmVkIGlmIG5vdCBtb3JlIHRoYW4gIiArIGNvbmZpZy5tYXhEaWZmZXJlbmNlcyArICIgZGlmZmVyZW5jZXMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KCiAgICBpZiAocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgPiBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgKyAiIHBlcmNlbnRzIGFyZSBkaWZmZXJlbnQiKTsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIldvdWxkIGJlIGlnbm9yZWQgaWYgbm90IG1vcmUgdGhhbiAiICsgY29uZmlnLm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlICsgIiBwZXJjZW50Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChjb25maWcucGVuYWx0eVBvaW50cyk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBudW1iZXIgb2YgZGlmZmVyZW5jZXMoIiArIG51bWJlck9mRGlmZmVyZW5jZXMgKyAiKSBub3QgbW9yZSB0aGFuICIKICAgICAgICAgICAgKyBjb25maWcubWF4RGlmZmVyZW5jZXMpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzICsgIiBwZXJjZW50cyBhcmUgZGlmZmVyZW50Iik7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBub3QgbW9yZSB0aGFuICIgKyBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UgKyAiIHBlcmNlbnQiKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdCh0cnVlKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gVXNlciBBZ2VudCBTdHJpbmdzIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybyBwZW5hbHR5CiAqIHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlIChTdHJpbmcpIFRoZSBzdG9yZWQgdmFsdWUuCiAqIEBwYXJhbSBjb25maWc6IHsKICogICAgICAgICAgICAiaWdub3JlVmVyc2lvbiI6IChib29sZWFuKSBJZiB0aGUgdmVyc2lvbiBudW1iZXJzIGluIHRoZSBVc2VyIEFnZW50IFN0cmluZ3Mgc2hvdWxkIGJlIGlnbm9yZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb21wYXJpc29uLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBBIENvbXBhcmlzb25SZXN1bHQuCiAqLwpVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiVXNlckFnZW50Q29tcGFyYXRvci5jb21wYXJlOmN1cnJlbnRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgaWYgKGNvbmZpZy5pZ25vcmVWZXJzaW9uKSB7CiAgICAgICAgLy8gcmVtb3ZlIHZlcnNpb24gbnVtYmVyCiAgICAgICAgY3VycmVudFZhbHVlID0gbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgPyBudWxsIDogY3VycmVudFZhbHVlLnJlcGxhY2UoL1tcZFwuXSsvZywgIiIpLnRyaW0oKTsKICAgICAgICBzdG9yZWRWYWx1ZSA9IG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkgPyBudWxsIDogc3RvcmVkVmFsdWUucmVwbGFjZSgvW1xkXC5dKy9nLCAiIikudHJpbSgpOwogICAgfQoKICAgIHJldHVybiBTY2FsYXJDb21wYXJhdG9yLmNvbXBhcmUoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gbG9jYXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50IGEgZGVncmVlIG9mIGRpZmZlcmVuY2UuCiAqCiAqIEBwYXJhbSBjdXJyZW50VmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgY3VycmVudCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGN1cnJlbnQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcGFyYW0gc3RvcmVkVmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxhdGl0dWRlLgogKiAgICAgICAgICAgICJsb25naXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJhbGxvd2VkUmFuZ2UiOiAoTnVtYmVyKSBUaGUgbWF4IGRpZmZlcmVuY2UgYWxsb3dlZCBpbiB0aGUgdHdvIGxvY2F0aW9ucywgYmVmb3JlIHRoZSBwZW5hbHR5IGlzIGFzc2lnbmVkLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KKiAgICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0CiAqLwpHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiR2VvbG9jYXRpb25Db21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICAvLyBDaGVjayBmb3IgdW5kZWZpbmVkIHN0b3JlZCBvciBjdXJyZW50IGxvY2F0aW9ucwoKICAgIGlmICh1bmRlZmluZWRMb2NhdGlvbihjdXJyZW50VmFsdWUpICYmIHVuZGVmaW5lZExvY2F0aW9uKHN0b3JlZFZhbHVlKSkgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CiAgICBpZiAodW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiAhdW5kZWZpbmVkTG9jYXRpb24oc3RvcmVkVmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KICAgIGlmICghdW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiB1bmRlZmluZWRMb2NhdGlvbihzdG9yZWRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgLy8gQm90aCBsb2NhdGlvbnMgZGVmaW5lZCwgdGhlcmVmb3JlIHBlcmZvcm0gY29tcGFyaXNvbgoKICAgIHZhciBkaXN0YW5jZSA9IGNhbGN1bGF0ZURpc3RhbmNlKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUpOwoKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJEaXN0YW5jZSBiZXR3ZWVuICgiICsgY3VycmVudFZhbHVlLmxhdGl0dWRlICsgIiwiICsgY3VycmVudFZhbHVlLmxvbmdpdHVkZSArICIpIGFuZCAoIiArCiAgICAgICAgICAgIHN0b3JlZFZhbHVlLmxhdGl0dWRlICsgIiwiICsgc3RvcmVkVmFsdWUubG9uZ2l0dWRlICsgIikgaXMgIiArIGRpc3RhbmNlICsgIiBtaWxlcyIpOwogICAgfQoKICAgIGlmIChwYXJzZUZsb2F0KGRpc3RhbmNlLnRvUHJlY2lzaW9uKDUpKSA9PT0gMCkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJMb2NhdGlvbiBpcyB0aGUgc2FtZSIpOwogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CgogICAgaWYgKGRpc3RhbmNlIDw9IGNvbmZpZy5hbGxvd2VkUmFuZ2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlRvbGVyYXRlZCBiZWNhdXNlIGRpc3RhbmNlIG5vdCBtb3JlIHRoZW4gIiArIGNvbmZpZy5hbGxvd2VkUmFuZ2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiV291bGQgYmUgaWdub3JlZCBpZiBkaXN0YW5jZSBub3QgbW9yZSB0aGVuICIgKyBjb25maWcuYWxsb3dlZFJhbmdlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KfTsKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi8vICAgICAgICAgICAgICAgICAgICBEZXZpY2UgUHJpbnQgTG9naWMgLSBETyBOT1QgTU9ESUZZICAgICAgICAgICAgICAgICAgICAgLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwoKLy8gVXRpbGl0eSBmdW5jdGlvbnMKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgZXZhbHVhdGluZyBmdW5jdGlvbiBmIG9uIGVhY2ggZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYWxsID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn07CgovKioKICogUmV0dXJucyB0cnVlIGlmIGV2YWx1YXRpbmcgZnVuY3Rpb24gZiBvbiBhbnkgZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYW55ID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGxvY2F0aW9uIGlzIG51bGwgb3IgaGFzIHVuZGVmaW5lZCBsb25naXR1ZGUgb3IgbGF0aXR1ZGUgdmFsdWVzLgogKgogKiBAcGFyYW0gbG9jYXRpb246IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBsb25naXR1ZGUuCiAqICAgICAgICB9CiAqIEByZXR1cm4gYm9vbGVhbgogKi8KdW5kZWZpbmVkTG9jYXRpb24gPSBmdW5jdGlvbihsb2NhdGlvbikgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZChsb2NhdGlvbikgfHwgbnVsbE9yVW5kZWZpbmVkKGxvY2F0aW9uLmxhdGl0dWRlKSB8fCBudWxsT3JVbmRlZmluZWQobG9jYXRpb24ubG9uZ2l0dWRlKTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLgogKgogKiBAcGFyYW0gdmFsdWU6IGEgdmFsdWUgb2YgYW55IHR5cGUKICogQHJldHVybiBib29sZWFuCiAqLwpudWxsT3JVbmRlZmluZWQgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7Cn07CgovKioKICogQ2FsY3VsYXRlcyB0aGUgZGlzdGFuY2VzIGJldHdlZW4gdGhlIHR3byBsb2NhdGlvbnMuCiAqCiAqIEBwYXJhbSBmaXJzdDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBmaXJzdCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGZpcnN0IGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIHNlY29uZDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcmV0dXJuIE51bWJlciBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdHdvIGxvY2F0aW9ucy4KICovCmNhbGN1bGF0ZURpc3RhbmNlID0gZnVuY3Rpb24oZmlyc3QsIHNlY29uZCkgewogICAgdmFyIGZhY3RvciA9IChNYXRoLlBJIC8gMTgwKSwKICAgICAgICB0aGV0YSwKICAgICAgICBkaXN0OwogICAgZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkZWdyZWVzKSB7CiAgICAgICAgcmV0dXJuIGRlZ3JlZXMgKiBmYWN0b3I7CiAgICB9CiAgICBmdW5jdGlvbiByYWRpYW5zVG9EZWdyZWVzKHJhZGlhbnMpIHsKICAgICAgICByZXR1cm4gcmFkaWFucyAvIGZhY3RvcjsKICAgIH0KICAgIHRoZXRhID0gZmlyc3QubG9uZ2l0dWRlIC0gc2Vjb25kLmxvbmdpdHVkZTsKICAgIGRpc3QgPSBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKyBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHRoZXRhKSk7CiAgICBkaXN0ID0gTWF0aC5hY29zKGRpc3QpOwogICAgZGlzdCA9IHJhZGlhbnNUb0RlZ3JlZXMoZGlzdCk7CiAgICBkaXN0ID0gZGlzdCAqIDYwICogMS4xNTE1OwogICAgcmV0dXJuIGRpc3Q7Cn07CgovKioKICogQ29udmVydHMgYSBTdHJpbmcgaG9sZGluZyBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMgaW50byBhbiBhcnJheS4KICoKICogQHBhcmFtIHRleHQgKFN0cmluZykgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMuCiAqIEBwYXJhbSBkZWxpbWl0ZXIgKFN0cmluZykgVGhlIGNoYXJhY3RlciBkZWxpbWl0aW5nIHZhbHVlcyB3aXRoaW4gdGhlIHRleHQgU3RyaW5nLgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMuCiAqLwpzcGxpdEFuZFRyaW0gPSBmdW5jdGlvbih0ZXh0LCBkZWxpbWl0ZXIpIHsKCiAgICB2YXIgcmVzdWx0cyA9IFtdLAogICAgICAgIGksCiAgICAgICAgdmFsdWVzLAogICAgICAgIHZhbHVlOwogICAgaWYgKHRleHQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KCiAgICB2YWx1ZXMgPSB0ZXh0LnNwbGl0KGRlbGltaXRlcik7CiAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFsdWUgPSB2YWx1ZXNbaV0udHJpbSgpOwogICAgICAgIGlmICh2YWx1ZSAhPT0gIiIpIHsKICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdHM7Cn07CgovKioKICogQ29udmVydHMgdmFsdWUgdG8gYSBwZXJjZW50YWdlIG9mIHJhbmdlLgogKgogKiBAcGFyYW0gdmFsdWUgKE51bWJlcikgVGhlIGFjdHVhbCBudW1iZXIgdG8gYmUgY29udmVydGVkIHRvIGEgcGVyY2VudGFnZS4KICogQHBhcmFtIHJhbmdlIChOdW1iZXIpIFRoZSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzIChpLmUuIHJlcHJlc2VudHMgMTAwJSkuCiAqIEByZXR1cm4gKE51bWJlcikgVGhlIHBlcmNlbnRhZ2UuCiAqLwpjYWxjdWxhdGVQZXJjZW50YWdlID0gZnVuY3Rpb24odmFsdWUsIHJhbmdlKSB7CiAgICBpZiAocmFuZ2UgPT09IDApIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBwYXJzZUZsb2F0KCh2YWx1ZSAvIHJhbmdlKS50b1ByZWNpc2lvbigyKSkgKiAxMDA7Cn07CgovKioKICogQ3JlYXRlcyBhIG5ldyBhcnJheSBjb250YWluaW5nIG9ubHkgdGhvc2UgZWxlbWVudHMgZm91bmQgaW4gYm90aCBhcnJheXMgcmVjZWl2ZWQgYXMgYXJndW1lbnRzLgogKgogKiBAcGFyYW0gZmlyc3QgKEFycmF5KSBUaGUgZmlyc3QgYXJyYXkuCiAqIEBwYXJhbSBzZWNvbmQgKEFycmF5KSBUaGUgc2Vjb25kIGFycmF5LgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGVsZW1lbnRzIHRoYXQgZm91bmQgaW4gZmlyc3QgYW5kIHNlY29uZC4KICovCmNhbGN1bGF0ZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGZpcnN0LCBzZWNvbmQpIHsKICAgIHJldHVybiBmaXJzdC5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgIHJldHVybiBzZWNvbmQuaW5kZXhPZihlbGVtZW50KSAhPT0gLTE7CiAgICB9KTsKfTsKCmZ1bmN0aW9uIGdldFZhbHVlKG9iaiwgYXR0cmlidXRlUGF0aCkgewogICAgdmFyIHZhbHVlID0gb2JqLAogICAgICAgIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cmlidXRlUGF0aC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICB2YWx1ZSA9IHZhbHVlW2F0dHJpYnV0ZVBhdGhbaV1dOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwp9CgoKZnVuY3Rpb24gaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWcpIHsKICAgIHJldHVybiBhdHRyaWJ1dGVDb25maWcuY29tcGFyYXRvciAhPT0gdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcsIGF0dHJpYnV0ZVBhdGgpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBbXSwKICAgICAgICBhdHRyaWJ1dGVOYW1lLAogICAgICAgIGF0dHJQYXRocywKICAgICAgICBhdHRyUGF0aCwKICAgICAgICBpOwoKICAgIGZvciAoYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVDb25maWcpIHsKICAgICAgICBpZiAoYXR0cmlidXRlQ29uZmlnLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZU5hbWUpKSB7CgogICAgICAgICAgICBpZiAoaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWdbYXR0cmlidXRlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBhdHRyUGF0aCA9IGF0dHJpYnV0ZVBhdGguc2xpY2UoKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRoLnB1c2goYXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVQYXRocy5wdXNoKGF0dHJQYXRoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJQYXRoID0gYXR0cmlidXRlUGF0aC5zbGljZSgpOwogICAgICAgICAgICAgICAgYXR0clBhdGgucHVzaChhdHRyaWJ1dGVOYW1lKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRocyA9IGdldEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZ1thdHRyaWJ1dGVOYW1lXSwgYXR0clBhdGgpOwogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGF0dHJQYXRocy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVBhdGhzLnB1c2goYXR0clBhdGhzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYXR0cmlidXRlUGF0aHM7Cn0KCmZ1bmN0aW9uIGdldERldmljZVByaW50QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnKSB7CiAgICByZXR1cm4gZ2V0QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnLCBbXSk7Cn0KCmZ1bmN0aW9uIGhhc1JlcXVpcmVkQXR0cmlidXRlcyhkZXZpY2VQcmludCwgYXR0cmlidXRlQ29uZmlnKSB7CgogICAgdmFyIGF0dHJpYnV0ZVBhdGhzID0gZ2V0RGV2aWNlUHJpbnRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcpLAogICAgICAgIGksCiAgICAgICAgYXR0clZhbHVlLAogICAgICAgIGF0dHJDb25maWc7CgogICAgZm9yIChpID0gMDsgaSA8IGF0dHJpYnV0ZVBhdGhzLmxlbmd0aDsgaSsrKSB7CgogICAgICAgIGF0dHJWYWx1ZSA9IGdldFZhbHVlKGRldmljZVByaW50LCBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICBpZiAoYXR0ckNvbmZpZy5yZXF1aXJlZCAmJiBhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBsb2dnZXIud2FybmluZygiRGV2aWNlIFByaW50IHByb2ZpbGUgbWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUsICIgKyBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZSBwcmludCBoYXMgcmVxdWlyZWQgYXR0cmlidXRlcyIpOwogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGF0dHJpYnV0ZUNvbmZpZywgZGV2aWNlUHJpbnQsIGRldmljZVByaW50UHJvZmlsZXMsIG1heFBlbmFsdHlQb2ludHMpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBnZXREZXZpY2VQcmludEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZyksCiAgICAgICAgZGFvID0gc2hhcmVkU3RhdGUuZ2V0KCdfRGV2aWNlSWREYW8nKSwKICAgICAgICByZXN1bHRzLAogICAgICAgIGosCiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQsCiAgICAgICAgaSwKICAgICAgICBjdXJyZW50VmFsdWUsCiAgICAgICAgc3RvcmVkVmFsdWUsCiAgICAgICAgYXR0ckNvbmZpZywKICAgICAgICBjb21wYXJpc29uUmVzdWx0LAogICAgICAgIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICBzZWxlY3RlZFByb2ZpbGUsCiAgICAgICAgY3VyRGV2aWNlUHJpbnRQcm9maWxlLAogICAgICAgIHZhbHM7CgogICAgcmVzdWx0cyA9IFtdOwogICAgZm9yIChqID0gMDsgaiA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBjdXJEZXZpY2VQcmludFByb2ZpbGUgPSBKU09OLnBhcnNlKG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvbihkZXZpY2VQcmludFByb2ZpbGVzW2pdKSk7CiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQgPSBuZXcgQ29tcGFyaXNvblJlc3VsdCgpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdHRyaWJ1dGVQYXRocy5sZW5ndGg7IGkrKykgewoKICAgICAgICAgICAgY3VycmVudFZhbHVlID0gZ2V0VmFsdWUoZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgc3RvcmVkVmFsdWUgPSBnZXRWYWx1ZShjdXJEZXZpY2VQcmludFByb2ZpbGUuZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICAgICAgaWYgKHN0b3JlZFZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb21wYXJpc29uUmVzdWx0ID0gbmV3IENvbXBhcmlzb25SZXN1bHQoYXR0ckNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbXBhcmlzb25SZXN1bHQgPSBhdHRyQ29uZmlnLmNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBhdHRyQ29uZmlnLmFyZ3MpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJDb21wYXJpbmcgYXR0cmlidXRlIHBhdGg6ICIgKyBhdHRyaWJ1dGVQYXRoc1tpXQogICAgICAgICAgICAgICAgICAgICsgIiwgQ29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkgKyAiLCBwZW5hbHR5UG9pbnRzPSIKICAgICAgICAgICAgICAgICAgICArIGNvbXBhcmlzb25SZXN1bHQucGVuYWx0eVBvaW50cyArICIsIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU9IgogICAgICAgICAgICAgICAgICAgICsgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5hZGRDb21wYXJpc29uUmVzdWx0KGNvbXBhcmlzb25SZXN1bHQpOwogICAgICAgIH0KICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIkFnZ3JlZ2F0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKSArICIsIHBlbmFsdHlQb2ludHM9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICAgICArIGFnZ3JlZ2F0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmVzdWx0cy5wdXNoKHsKICAgICAgICAgICAga2V5OiBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICAgICAgdmFsdWU6IGRldmljZVByaW50UHJvZmlsZXNbal0KICAgICAgICB9KTsKICAgIH0KCiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXN1bHRzLnNvcnQoZnVuY3Rpb24oYSwgYikgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUoYS5rZXksIGIua2V5KTsKICAgIH0pOwogICAgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0ID0gcmVzdWx0c1swXS5rZXk7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU2VsZWN0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKQogICAgICAgICAgICArICIsIHBlbmFsdHlQb2ludHM9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgfQoKICAgIHNlbGVjdGVkUHJvZmlsZSA9IG51bGw7CiAgICBpZiAoc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgPD0gbWF4UGVuYWx0eVBvaW50cykgewogICAgICAgIHNlbGVjdGVkUHJvZmlsZSA9IHJlc3VsdHNbMF0udmFsdWU7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTZWxlY3RlZCBwcm9maWxlOiAiICsgc2VsZWN0ZWRQcm9maWxlICsKICAgICAgICAgICAgICAgICIgd2l0aCAiICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgKyAiIHBlbmFsdHkgcG9pbnRzIik7CiAgICAgICAgfQogICAgfQoKICAgIGlmIChzZWxlY3RlZFByb2ZpbGUgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyogdXBkYXRlIHByb2ZpbGUgKi8KICAgIHNlbGVjdGVkUHJvZmlsZS5wdXQoInNlbGVjdGlvbkNvdW50ZXIiLAogICAgICAgIGphdmEubGFuZy5JbnRlZ2VyLnZhbHVlT2YocGFyc2VJbnQoc2VsZWN0ZWRQcm9maWxlLmdldCgic2VsZWN0aW9uQ291bnRlciIpLCAxMCkgKyAxKSk7CiAgICBzZWxlY3RlZFByb2ZpbGUucHV0KCJsYXN0U2VsZWN0ZWREYXRlIiwgamF2YS5sYW5nLkxvbmcudmFsdWVPZihuZXcgRGF0ZSgpLmdldFRpbWUoKSkpOwogICAgc2VsZWN0ZWRQcm9maWxlLnB1dCgiZGV2aWNlUHJpbnQiLCBkZXZpY2VQcmludCk7CgogICAgdmFscyA9IFtdOwogICAgZm9yIChpID0gMDsgaSA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YWxzLnB1c2gob3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uKGRldmljZVByaW50UHJvZmlsZXNbaV0pKTsKICAgIH0KCiAgICBkYW8uc2F2ZURldmljZVByb2ZpbGVzKHVzZXJuYW1lLCByZWFsbSwgdmFscyk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIG1hdGNoRGV2aWNlUHJpbnQoKSB7CgogICAgaWYgKCF1c2VybmFtZSkgewogICAgICAgIGxvZ2dlci5lcnJvcigiVXNlcm5hbWUgbm90IHNldC4gQ2Fubm90IGNvbXBhcmUgdXNlcidzIGRldmljZSBwcmludCBwcm9maWxlcy4iKTsKICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICB9IGVsc2UgewoKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImNsaWVudCBkZXZpY2VQcmludDogIiArIGNsaWVudFNjcmlwdE91dHB1dERhdGEpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGdldFByb2ZpbGVzID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRXhwaXJlZFByb2ZpbGUoZGV2aWNlUHJpbnRQcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cGlyYXRpb25EYXRlID0gbmV3IERhdGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNlbGVjdGVkRGF0ZTsKICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uRGF0ZS5zZXREYXRlKGV4cGlyYXRpb25EYXRlLmdldERhdGUoKSAtIGNvbmZpZy5wcm9maWxlRXhwaXJhdGlvbik7CgogICAgICAgICAgICAgICAgICAgIGxhc3RTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShkZXZpY2VQcmludFByb2ZpbGUubGFzdFNlbGVjdGVkRGF0ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0U2VsZWN0ZWREYXRlIDwgZXhwaXJhdGlvbkRhdGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICBkYW8gPSBzaGFyZWRTdGF0ZS5nZXQoJ19EZXZpY2VJZERhbycpLAogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVzLAogICAgICAgICAgICAgICAgICAgICAgICBpdGVyOwoKICAgICAgICAgICAgICAgICAgICBwcm9maWxlcyA9IGRhby5nZXREZXZpY2VQcm9maWxlcyh1c2VybmFtZSwgcmVhbG0pOwoKICAgICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaXRlciA9IHByb2ZpbGVzLml0ZXJhdG9yKCk7CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgPSBpdGVyLm5leHQoKS5nZXRPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFeHBpcmVkUHJvZmlsZShwcm9maWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChwcm9maWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoInN0b3JlZCBub24tZXhwaXJlZCBwcm9maWxlczogIiArIHJlc3VsdHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRldmljZVByaW50ID0gSlNPTi5wYXJzZShjbGllbnRTY3JpcHRPdXRwdXREYXRhKSwKICAgICAgICAgICAgZGV2aWNlUHJpbnRQcm9maWxlcyA9IGdldFByb2ZpbGVzKCk7CgogICAgICAgIGlmICghaGFzUmVxdWlyZWRBdHRyaWJ1dGVzKGRldmljZVByaW50LCBjb25maWcuYXR0cmlidXRlcykpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZVByaW50Lmhhc1JlcXVpcmVkQXR0cmlidXRlczogZmFsc2UiKTsKICAgICAgICAgICAgLy8gV2lsbCBmYWlsIHRoaXMgbW9kdWxlIGJ1dCBmYWxsLXRocm91Z2ggdG8gbmV4dCBtb2R1bGUuIFdoaWNoIHNob3VsZCBiZSBPVFAuCiAgICAgICAgICAgIGF1dGhTdGF0ZSA9IEZBSUxFRDsKICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGNvbmZpZy5hdHRyaWJ1dGVzLCBkZXZpY2VQcmludCwgZGV2aWNlUHJpbnRQcm9maWxlcywgY29uZmlnLm1heFBlbmFsdHlQb2ludHMpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJkZXZpY2VQcmludC5oYXNWYWxpZFByb2ZpbGU6IHRydWUiKTsKICAgICAgICAgICAgYXV0aFN0YXRlID0gU1VDQ0VTUzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiZGV2aWNlUHJpbnQuaGFzVmFsaWRQcm9maWxlOiBmYWxzZSIpOwogICAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoJ2RldmljZVByaW50UHJvZmlsZScsIEpTT04uc3RyaW5naWZ5KGRldmljZVByaW50KSk7CiAgICAgICAgICAgIC8vIFdpbGwgZmFpbCB0aGlzIG1vZHVsZSBidXQgZmFsbC10aHJvdWdoIHRvIG5leHQgbW9kdWxlLiBXaGljaCBzaG91bGQgYmUgT1RQLgogICAgICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICAgICAgfQogICAgfQp9CgptYXRjaERldmljZVByaW50KCk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"10643e95-873a-4ec0-b713-a7f56760d179\",\"name\":\"FrodoTestScript4\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"157298c0-7d31-4059-a95b-eeb08473b7e5\",\"name\":\"Device Id (Match) - Client Side\",\"description\":\"Default global script for client side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGZvbnREZXRlY3RvciA9IChmdW5jdGlvbiAoKSB7CiAgICAvKioKICAgICAqIEphdmFTY3JpcHQgY29kZSB0byBkZXRlY3QgYXZhaWxhYmxlIGF2YWlsYWJpbGl0eSBvZiBhCiAgICAgKiBwYXJ0aWN1bGFyIGZvbnQgaW4gYSBicm93c2VyIHVzaW5nIEphdmFTY3JpcHQgYW5kIENTUy4KICAgICAqCiAgICAgKiBBdXRob3IgOiBMYWxpdCBQYXRlbAogICAgICogV2Vic2l0ZTogaHR0cDovL3d3dy5sYWxpdC5vcmcvbGFiL2phdmFzY3JpcHQtY3NzLWZvbnQtZGV0ZWN0LwogICAgICogTGljZW5zZTogQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wCiAgICAgKiAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAgICAqIFZlcnNpb246IDAuMTUgKDIxIFNlcCAyMDA5KQogICAgICogICAgICAgICAgQ2hhbmdlZCBjb21wYXJpc2lvbiBmb250IHRvIGRlZmF1bHQgZnJvbSBzYW5zLWRlZmF1bHQtZGVmYXVsdCwKICAgICAqICAgICAgICAgIGFzIGluIEZGMy4wIGZvbnQgb2YgY2hpbGQgZWxlbWVudCBkaWRuJ3QgZmFsbGJhY2sKICAgICAqICAgICAgICAgIHRvIHBhcmVudCBlbGVtZW50IGlmIHRoZSBmb250IGlzIG1pc3NpbmcuCiAgICAgKiBWZXJzaW9uOiAwLjIgKDA0IE1hciAyMDEyKQogICAgICogICAgICAgICAgQ29tcGFyaW5nIGZvbnQgYWdhaW5zdCBhbGwgdGhlIDMgZ2VuZXJpYyBmb250IGZhbWlsaWVzIGllLAogICAgICogICAgICAgICAgJ21vbm9zcGFjZScsICdzYW5zLXNlcmlmJyBhbmQgJ3NhbnMnLiBJZiBpdCBkb2Vzbid0IG1hdGNoIGFsbCAzCiAgICAgKiAgICAgICAgICB0aGVuIHRoYXQgZm9udCBpcyAxMDAlIG5vdCBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbQogICAgICogVmVyc2lvbjogMC4zICgyNCBNYXIgMjAxMikKICAgICAqICAgICAgICAgIFJlcGxhY2VkIHNhbnMgd2l0aCBzZXJpZiBpbiB0aGUgbGlzdCBvZiBiYXNlRm9udHMKICAgICAqLwogICAgLyoKICAgICAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMgRm9yZ2VSb2NrIEFTLgogICAgICovCiAgICB2YXIgZGV0ZWN0b3IgPSB7fSwgYmFzZUZvbnRzLCB0ZXN0U3RyaW5nLCB0ZXN0U2l6ZSwgaCwgcywgZGVmYXVsdFdpZHRoID0ge30sIGRlZmF1bHRIZWlnaHQgPSB7fSwgaW5kZXg7CgogICAgLy8gYSBmb250IHdpbGwgYmUgY29tcGFyZWQgYWdhaW5zdCBhbGwgdGhlIHRocmVlIGRlZmF1bHQgZm9udHMuCiAgICAvLyBhbmQgaWYgaXQgZG9lc24ndCBtYXRjaCBhbGwgMyB0aGVuIHRoYXQgZm9udCBpcyBub3QgYXZhaWxhYmxlLgogICAgYmFzZUZvbnRzID0gWydtb25vc3BhY2UnLCAnc2Fucy1zZXJpZicsICdzZXJpZiddOwoKICAgIC8vd2UgdXNlIG0gb3IgdyBiZWNhdXNlIHRoZXNlIHR3byBjaGFyYWN0ZXJzIHRha2UgdXAgdGhlIG1heGltdW0gd2lkdGguCiAgICAvLyBBbmQgd2UgdXNlIGEgTExpIHNvIHRoYXQgdGhlIHNhbWUgbWF0Y2hpbmcgZm9udHMgY2FuIGdldCBzZXBhcmF0ZWQKICAgIHRlc3RTdHJpbmcgPSAibW1tbW1tbW1tbWxsaSI7CgogICAgLy93ZSB0ZXN0IHVzaW5nIDcycHggZm9udCBzaXplLCB3ZSBtYXkgdXNlIGFueSBzaXplLiBJIGd1ZXNzIGxhcmdlciB0aGUgYmV0dGVyLgogICAgdGVzdFNpemUgPSAnNzJweCc7CgogICAgaCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07CgogICAgLy8gY3JlYXRlIGEgU1BBTiBpbiB0aGUgZG9jdW1lbnQgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgdGV4dCB3ZSB1c2UgdG8gdGVzdAogICAgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIHMuc3R5bGUuZm9udFNpemUgPSB0ZXN0U2l6ZTsKICAgIHMuaW5uZXJIVE1MID0gdGVzdFN0cmluZzsKICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHQgd2lkdGggZm9yIHRoZSB0aHJlZSBiYXNlIGZvbnRzCiAgICAgICAgcy5zdHlsZS5mb250RmFtaWx5ID0gYmFzZUZvbnRzW2luZGV4XTsKICAgICAgICBoLmFwcGVuZENoaWxkKHMpOwogICAgICAgIGRlZmF1bHRXaWR0aFtiYXNlRm9udHNbaW5kZXhdXSA9IHMub2Zmc2V0V2lkdGg7IC8vd2lkdGggZm9yIHRoZSBkZWZhdWx0IGZvbnQKICAgICAgICBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dID0gcy5vZmZzZXRIZWlnaHQ7IC8vaGVpZ2h0IGZvciB0aGUgZGVmdWFsdCBmb250CiAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgIH0KCiAgICBkZXRlY3Rvci5kZXRlY3QgPSBmdW5jdGlvbihmb250KSB7CiAgICAgICAgdmFyIGRldGVjdGVkID0gZmFsc2UsIGluZGV4LCBtYXRjaGVkOwogICAgICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgICAgIHMuc3R5bGUuZm9udEZhbWlseSA9IGZvbnQgKyAnLCcgKyBiYXNlRm9udHNbaW5kZXhdOyAvLyBuYW1lIG9mIHRoZSBmb250IGFsb25nIHdpdGggdGhlIGJhc2UgZm9udCBmb3IgZmFsbGJhY2suCiAgICAgICAgICAgIGguYXBwZW5kQ2hpbGQocyk7CiAgICAgICAgICAgIG1hdGNoZWQgPSAocy5vZmZzZXRXaWR0aCAhPT0gZGVmYXVsdFdpZHRoW2Jhc2VGb250c1tpbmRleF1dIHx8IHMub2Zmc2V0SGVpZ2h0ICE9PSBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dKTsKICAgICAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgICAgICAgICAgZGV0ZWN0ZWQgPSBkZXRlY3RlZCB8fCBtYXRjaGVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGV0ZWN0ZWQ7CiAgICB9OwoKICAgIHJldHVybiBkZXRlY3RvcjsKfSgpKTsKLyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAxNCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGNvbGxlY3RTY3JlZW5JbmZvID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBzY3JlZW5JbmZvID0ge307CiAgICAgICAgaWYgKHNjcmVlbikgewogICAgICAgICAgICBpZiAoc2NyZWVuLndpZHRoKSB7CiAgICAgICAgICAgICAgICBzY3JlZW5JbmZvLnNjcmVlbldpZHRoID0gc2NyZWVuLndpZHRoOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLmhlaWdodCkgewogICAgICAgICAgICAgICAgc2NyZWVuSW5mby5zY3JlZW5IZWlnaHQgPSBzY3JlZW4uaGVpZ2h0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLnBpeGVsRGVwdGgpIHsKICAgICAgICAgICAgICAgIHNjcmVlbkluZm8uc2NyZWVuQ29sb3VyRGVwdGggPSBzY3JlZW4ucGl4ZWxEZXB0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3Qgc2NyZWVuIGluZm9ybWF0aW9uLiBzY3JlZW4gaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzY3JlZW5JbmZvOwogICAgfSwKICAgIGNvbGxlY3RUaW1lem9uZUluZm8gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHRpbWV6b25lSW5mbyA9ICB7fSwgb2Zmc2V0ID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOwoKICAgICAgICBpZiAob2Zmc2V0KSB7CiAgICAgICAgICAgIHRpbWV6b25lSW5mby50aW1lem9uZSA9IG9mZnNldDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbm5vdCBjb2xsZWN0IHRpbWV6b25lIGluZm9ybWF0aW9uLiB0aW1lem9uZSBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aW1lem9uZUluZm87CiAgICB9LAogICAgY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbyA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgaWYgKG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IucGx1Z2lucykgewogICAgICAgICAgICB2YXIgcGx1Z2luc0luZm8gPSB7fSwgaSwgcGx1Z2lucyA9IG5hdmlnYXRvci5wbHVnaW5zOwogICAgICAgICAgICBwbHVnaW5zSW5mby5pbnN0YWxsZWRQbHVnaW5zID0gIiI7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGx1Z2luc0luZm8uaW5zdGFsbGVkUGx1Z2lucyA9IHBsdWdpbnNJbmZvLmluc3RhbGxlZFBsdWdpbnMgKyBwbHVnaW5zW2ldLmZpbGVuYW1lICsgIjsiOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcGx1Z2luc0luZm87CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBicm93c2VyIHBsdWdpbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLnBsdWdpbnMgaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgICAgIHJldHVybiB7fTsKICAgICAgICB9CgogICAgfSwKLy8gR2V0dGluZyBnZW9sb2NhdGlvbiB0YWtlcyBzb21lIHRpbWUgYW5kIGlzIGRvbmUgYXN5bmNocm9ub3VzbHksIGhlbmNlIG5lZWQgYSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgb25jZSBnZW9sb2NhdGlvbiBpcyByZXRyaWV2ZWQuCiAgICBjb2xsZWN0R2VvbG9jYXRpb25JbmZvID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIGdlb2xvY2F0aW9uSW5mbyA9IHt9LAogICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgICAgICAgICAgZ2VvbG9jYXRpb25JbmZvLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGU7CiAgICAgICAgICAgICAgICBnZW9sb2NhdGlvbkluZm8ubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGU7CiAgICAgICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgICAgICB9LCBlcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3QgZ2VvbG9jYXRpb24gaW5mb3JtYXRpb24uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVycm9yLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgY2FsbGJhY2soZ2VvbG9jYXRpb25JbmZvKTsKICAgICAgICAgICAgfTsKICAgICAgICBpZiAobmF2aWdhdG9yICYmIG5hdmlnYXRvci5nZW9sb2NhdGlvbikgewogICAgICAgICAgICAvLyBOQjogSWYgdXNlciBjaG9vc2VzICdOb3Qgbm93JyBvbiBGaXJlZm94IG5laXRoZXIgY2FsbGJhY2sgZ2V0cyBjYWxsZWQKICAgICAgICAgICAgLy8gICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NTUzMwogICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBnZW9sb2NhdGlvbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgIH0KICAgIH0sCiAgICBjb2xsZWN0QnJvd3NlckZvbnRzSW5mbyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZm9udHNJbmZvID0ge30sIGksIGZvbnRzTGlzdCA9IFsiY3Vyc2l2ZSIsIm1vbm9zcGFjZSIsInNlcmlmIiwic2Fucy1zZXJpZiIsImZhbnRhc3kiLCJkZWZhdWx0IiwiQXJpYWwiLCJBcmlhbCBCbGFjayIsCiAgICAgICAgICAgICJBcmlhbCBOYXJyb3ciLCJBcmlhbCBSb3VuZGVkIE1UIEJvbGQiLCJCb29rbWFuIE9sZCBTdHlsZSIsIkJyYWRsZXkgSGFuZCBJVEMiLCJDZW50dXJ5IiwiQ2VudHVyeSBHb3RoaWMiLAogICAgICAgICAgICAiQ29taWMgU2FucyBNUyIsIkNvdXJpZXIiLCJDb3VyaWVyIE5ldyIsIkdlb3JnaWEiLCJHZW50aXVtIiwiSW1wYWN0IiwiS2luZyIsIkx1Y2lkYSBDb25zb2xlIiwiTGFsaXQiLAogICAgICAgICAgICAiTW9kZW5hIiwiTW9ub3R5cGUgQ29yc2l2YSIsIlBhcHlydXMiLCJUYWhvbWEiLCJUZVgiLCJUaW1lcyIsIlRpbWVzIE5ldyBSb21hbiIsIlRyZWJ1Y2hldCBNUyIsIlZlcmRhbmEiLAogICAgICAgICAgICAiVmVyb25hIl07CiAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gIiI7CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBmb250c0xpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGZvbnREZXRlY3Rvci5kZXRlY3QoZm9udHNMaXN0W2ldKSkgewogICAgICAgICAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzICsgZm9udHNMaXN0W2ldICsgIjsiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb250c0luZm87CiAgICB9LAogICAgZGV2aWNlUHJpbnQgPSB7fTsKCmRldmljZVByaW50LnNjcmVlbiA9IGNvbGxlY3RTY3JlZW5JbmZvKCk7CmRldmljZVByaW50LnRpbWV6b25lID0gY29sbGVjdFRpbWV6b25lSW5mbygpOwpkZXZpY2VQcmludC5wbHVnaW5zID0gY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbygpOwpkZXZpY2VQcmludC5mb250cyA9IGNvbGxlY3RCcm93c2VyRm9udHNJbmZvKCk7CgppZiAobmF2aWdhdG9yLnVzZXJBZ2VudCkgewogICAgZGV2aWNlUHJpbnQudXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKfQppZiAobmF2aWdhdG9yLmFwcE5hbWUpIHsKICAgIGRldmljZVByaW50LmFwcE5hbWUgPSBuYXZpZ2F0b3IuYXBwTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcENvZGVOYW1lKSB7CiAgICBkZXZpY2VQcmludC5hcHBDb2RlTmFtZSA9IG5hdmlnYXRvci5hcHBDb2RlTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcFZlcnNpb24pIHsKICAgIGRldmljZVByaW50LmFwcFZlcnNpb24gPSBuYXZpZ2F0b3IuYXBwVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbikgewogICAgZGV2aWNlUHJpbnQuYXBwTWlub3JWZXJzaW9uID0gbmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmJ1aWxkSUQpIHsKICAgIGRldmljZVByaW50LmJ1aWxkSUQgPSBuYXZpZ2F0b3IuYnVpbGRJRDsKfQppZiAobmF2aWdhdG9yLnBsYXRmb3JtKSB7CiAgICBkZXZpY2VQcmludC5wbGF0Zm9ybSA9IG5hdmlnYXRvci5wbGF0Zm9ybTsKfQppZiAobmF2aWdhdG9yLmNwdUNsYXNzKSB7CiAgICBkZXZpY2VQcmludC5jcHVDbGFzcyA9IG5hdmlnYXRvci5jcHVDbGFzczsKfQppZiAobmF2aWdhdG9yLm9zY3B1KSB7CiAgICBkZXZpY2VQcmludC5vc2NwdSA9IG5hdmlnYXRvci5vc2NwdTsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3QpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3QgPSBuYXZpZ2F0b3IucHJvZHVjdDsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3RTdWIpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3RTdWIgPSBuYXZpZ2F0b3IucHJvZHVjdFN1YjsKfQppZiAobmF2aWdhdG9yLnZlbmRvcikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yID0gbmF2aWdhdG9yLnZlbmRvcjsKfQppZiAobmF2aWdhdG9yLnZlbmRvclN1YikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yU3ViID0gbmF2aWdhdG9yLnZlbmRvclN1YjsKfQppZiAobmF2aWdhdG9yLmxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5sYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnVzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQudXNlckxhbmd1YWdlID0gbmF2aWdhdG9yLnVzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQuYnJvd3Nlckxhbmd1YWdlID0gbmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnN5c3RlbUxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5zeXN0ZW1MYW5ndWFnZSA9IG5hdmlnYXRvci5zeXN0ZW1MYW5ndWFnZTsKfQoKLy8gQXR0ZW1wdCB0byBjb2xsZWN0IGdlby1sb2NhdGlvbiBpbmZvcm1hdGlvbiBhbmQgcmV0dXJuIHRoaXMgd2l0aCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgovLyBPdGhlcndpc2UsIGlmIGdlby1sb2NhdGlvbiBmYWlscyBvciB0YWtlcyBsb25nZXIgdGhhbiAzMCBzZWNvbmRzLCBhdXRvLXN1Ym1pdCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgphdXRvU3VibWl0RGVsYXkgPSAzMDAwMDsKb3V0cHV0LnZhbHVlID0gSlNPTi5zdHJpbmdpZnkoZGV2aWNlUHJpbnQpOwpjb2xsZWN0R2VvbG9jYXRpb25JbmZvKGZ1bmN0aW9uKGdlb2xvY2F0aW9uSW5mbykgewogICAgZGV2aWNlUHJpbnQuZ2VvbG9jYXRpb24gPSBnZW9sb2NhdGlvbkluZm87CiAgICBvdXRwdXQudmFsdWUgPSBKU09OLnN0cmluZ2lmeShkZXZpY2VQcmludCk7CiAgICBzdWJtaXQoKTsKfSk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"312e951f-70c5-49d2-a9ae-93aef909d5df\",\"name\":\"Salesforce Profile Normalization\",\"description\":\"Normalizes raw profile data from Salesforce\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZ2l2ZW5fbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmZhbWlseV9uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnBpY3R1cmUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJsb2NhbGUiLCByYXdQcm9maWxlLnpvbmVJbmZvKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"name\":\"shared\",\"description\":\"set the same shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdzaGFyZWRWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzaGFyZWQgYWNyb3NzIGFsbCBuZXN0ZWQgam91cm5leXMuIEl0IGNvbnRhaW5zIGFuIGluZGljYXRvciBpbiB3aGljaCBsZXZlbCBpdCB3YXMgbGFzdCBzZXQuJyk7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6325cf19-a49b-471e-8d26-7e4df76df0e2\",\"name\":\"Okta Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJPa3RhIHJhd1Byb2ZpbGU6ICIrcmF3UHJvZmlsZSkKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5wcmVmZXJyZWRfdXNlcm5hbWUpKSk=\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"58c824ae-84ed-4724-82cd-db128fc3f6c\",\"name\":\"Normalized Profile to Managed User\",\"description\":\"Converts a normalized social profile into a managed user\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgbWFuYWdlZFVzZXIgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlck5hbWUiLCBub3JtYWxpemVkUHJvZmlsZS51c2VybmFtZSkpKQoKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgicG9zdGFsQWRkcmVzcyIsIG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MpCmlmIChub3JtYWxpemVkUHJvZmlsZS5hZGRyZXNzTG9jYWxpdHkuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgiY2l0eSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NMb2NhbGl0eSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24uaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgic3RhdGVQcm92aW5jZSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24pCmlmIChub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInBvc3RhbENvZGUiLCBub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlKQppZiAobm9ybWFsaXplZFByb2ZpbGUuY291bnRyeS5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KCJjb3VudHJ5Iiwgbm9ybWFsaXplZFByb2ZpbGUuY291bnRyeSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBob25lLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInRlbGVwaG9uZU51bWJlciIsIG5vcm1hbGl6ZWRQcm9maWxlLnBob25lKQoKLy8gaWYgdGhlIGdpdmVuTmFtZSBhbmQgZmFtaWx5TmFtZSBpcyBudWxsIG9yIGVtcHR5Ci8vIHRoZW4gYWRkIGEgYm9vbGVhbiBmbGFnIHRvIHRoZSBzaGFyZWQgc3RhdGUgdG8gaW5kaWNhdGUgbmFtZXMgYXJlIG5vdCBwcmVzZW50Ci8vIHRoaXMgY291bGQgYmUgdXNlZCBlbHNld2hlcmUKLy8gZm9yIGVnLiB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gYSBzY3JpcHRlZCBkZWNpc2lvbiBub2RlIHRvIGJ5LXBhc3MgcGF0Y2hpbmcKLy8gdGhlIHVzZXIgb2JqZWN0IHdpdGggYmxhbmsgdmFsdWVzIHdoZW4gZ2l2ZW5OYW1lICBhbmQgZmFtaWx5TmFtZSBpcyBub3QgcHJlc2VudApib29sZWFuIG5vR2l2ZW5OYW1lID0gbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmFzU3RyaW5nKCk/LnRyaW0oKSkKYm9vbGVhbiBub0ZhbWlseU5hbWUgPSBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZmFtaWx5TmFtZS5hc1N0cmluZygpPy50cmltKCkpCnNoYXJlZFN0YXRlLnB1dCgibmFtZUVtcHR5T3JOdWxsIiwgbm9HaXZlbk5hbWUgJiYgbm9GYW1pbHlOYW1lKQoKcmV0dXJuIG1hbmFnZWRVc2VyCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"name\":\"mode\",\"description\":\"Check if mode has already been set.\",\"script\":\"LyogbW9kZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDb2xsZWN0IG1vZGUgaWYgbm90IGFscmVhZHkgc2V0IGFuZCBzZXQgb3V0Y29tZSB0byBtb2RlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSAnc2hhcmVkIGFuZCBsZXZlbCcKICogLSAnc2hhcmVkIG9ubHknCiAqIC0gJ2xldmVsIG9ubHknCiAqIC0gJ25vbmUnCiAqLwooZnVuY3Rpb24gKCkgewogIHZhciBtb2RlID0gbm9kZVN0YXRlLmdldCgnbW9kZScpOwogIGlmIChtb2RlKSB7CiAgICBvdXRjb21lID0gbW9kZS5hc1N0cmluZygpOwogICAgdmFyIGxldmVsID0gbm9kZVN0YXRlLmdldCgnbGV2ZWwnKS5hc0ludGVnZXIoKSArIDE7CiAgICBsb2dnZXIuZXJyb3IoJ21vZGU6IG1vZGU9JyArIG1vZGUuYXNTdHJpbmcoKSArICcsIGxldmVsPScgKyBsZXZlbCk7CiAgICBzaGFyZWRTdGF0ZS5wdXQoJ2xldmVsJywgbGV2ZWwpOwogIH0KICBlbHNlIHsKICAgIHZhciBjaG9pY2VzID0gWydzaGFyZWQgYW5kIGxldmVsJywgJ3NoYXJlZCBvbmx5JywgJ2xldmVsIG9ubHknLCAnbm9uZSddOwogIAogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DaG9pY2VDYWxsYmFjawogICAgKQoKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKFsKICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soJ0Nob29zZSB0ZXN0IG1vZGUnLCBjaG9pY2VzLCAwLCBmYWxzZSkKICAgICAgXSkuYnVpbGQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBjaG9pY2UgPSBwYXJzZUludChjYWxsYmFja3MuZ2V0KDApLmdldFNlbGVjdGVkSW5kZXhlcygpWzBdKTsKICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgnbW9kZScsIGNob2ljZXNbY2hvaWNlXSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2xldmVsJywgMCk7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKGNob2ljZXNbY2hvaWNlXSkuYnVpbGQoKTsKICAgIH0KICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"36863ffb-40ec-48b9-94b1-9a99f71cc3b5\",\"name\":\"OIDC Claims Script\",\"description\":\"Default global script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3d97c436-42c0-4dd0-a571-ea6f34f752b3\",\"name\":\"Itsme Profile Normalization\",\"description\":\"Normalizes raw profile data from Itsme\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKaW1wb3J0IG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUKCkpzb25WYWx1ZSBtYW5hZ2VkVXNlciA9IGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuc3ViKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmdpdmVuX25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5mYW1pbHlfbmFtZSksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQpyZXR1cm4gbWFuYWdlZFVzZXI=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c234ba0b-58a1-4cfd-9567-09edde980745\",\"name\":\"ForgeRock Internal: OAuth2 Access Token Modification Script\",\"description\":\"Internal token modification script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwovLyBTY3JpcHQgaXMgaW50ZW50aW9uYWxseSBlbXB0eQo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":1433147666269,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"25e6c06d-cf70-473b-bd28-26931edc476b\",\"name\":\"OAuth2 Validate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Validation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgdmFsaWRhdGVzIHRoZSByZXF1ZXN0ZWQgc2NvcGVzIGFnYWluc3QgdGhlIGFsbG93ZWQgc2NvcGVzLgogKiBJZiBubyBzY29wZXMgYXJlIHJlcXVlc3RlZCwgZGVmYXVsdCBzY29wZXMgYXJlIGFzc3VtZWQuCiAqIFRoZSBzY3JpcHQgaGFzIGZvdXIgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgZGlmZmVyZW50IE9BdXRoMiBmbG93czoKICogICAgICAtIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlCiAqICAgICAgLSB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUKICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHJlcXVlc3RlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgVGhlIHNldCBvZiByZXF1ZXN0ZWQgc2NvcGVzLgogKiBkZWZhdWx0U2NvcGVzIC0gU2V0PFN0cmluZz4gKDEpLgogKiAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBkZWZhdWx0IHNjb3Blcy4KICogYWxsb3dlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgYWxsb3dlZCBzY29wZXMuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIGRlYnVnIGxvZ2dlciBpbnN0YW5jZToKICogICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgICAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9BVVRIMl9WQUxJREFURV9TQ09QRQogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKgogKiBUaHJvd3MgSW52YWxpZFNjb3BlRXhjZXB0aW9uOgogKiAgICAgIC0gaWYgdGhlcmUgYXJlIG5vIHNjb3BlcyByZXF1ZXN0ZWQgYW5kIGRlZmF1bHQgc2NvcGVzIGFyZSBlbXB0eQogKiAgICAgIC0gaWYgYSByZXF1ZXN0ZWQgc2NvcGUgaXMgbm90IGFsbG93ZWQKICoKICogUmV0dXJuIC0gYSBTZXQ8U3RyaW5nPiBvZiB2YWxpZGF0ZWQgc2NvcGVzICgxKS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICgyKSBDbGllbnQgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svaHR0cC9DbGllbnQuaHRtbC4KICovCgovKioKICogRGVmYXVsdCB2YWxpZGF0ZSBzY29wZSBzY3JpcHQuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZVNjb3BlcyAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkU2NvcGVFeGNlcHRpb24KICAgICk7CgogICAgdmFyIHNjb3BlczsKICAgIGlmIChyZXF1ZXN0ZWRTY29wZXMgPT0gbnVsbCB8fCByZXF1ZXN0ZWRTY29wZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgc2NvcGVzID0gZGVmYXVsdFNjb3BlczsKICAgIH0gZWxzZSB7CiAgICAgICAgc2NvcGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KGFsbG93ZWRTY29wZXMpOwogICAgICAgIHNjb3Blcy5yZXRhaW5BbGwocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICBpZiAocmVxdWVzdGVkU2NvcGVzLnNpemUoKSA+IHNjb3Blcy5zaXplKCkpIHsKICAgICAgICAgICAgdmFyIGludmFsaWRTY29wZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICAgICAgaW52YWxpZFNjb3Blcy5yZW1vdmVBbGwoYWxsb3dlZFNjb3Blcyk7CiAgICAgICAgICAgIHRocm93IG5ldyBmckphdmEuSW52YWxpZFNjb3BlRXhjZXB0aW9uKCdVbmtub3duL2ludmFsaWQgc2NvcGUocyknKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKHNjb3BlcyA9PSBudWxsIHx8IHNjb3Blcy5pc0VtcHR5KCkpIHsKICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRTY29wZUV4Y2VwdGlvbignTm8gc2NvcGUgcmVxdWVzdGVkIGFuZCBubyBkZWZhdWx0IHNjb3BlIGNvbmZpZ3VyZWQnKTsKICAgIH0KICAgIHJldHVybiBzY29wZXM7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlICgpIHsKICAgIHJldHVybiB2YWxpZGF0ZVNjb3BlcygpOwp9CgpmdW5jdGlvbiB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_VALIDATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"8e298710-b55e-4085-a464-88a375a4004b\",\"name\":\"Twitter Profile Normalization\",\"description\":\"Normalizes raw profile data from Twitter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkX3N0ciksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnByb2ZpbGVfaW1hZ2VfdXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnNjcmVlbl9uYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"85523e71-2d77-4577-b078-6f9674cc54e2\",\"name\":\"Saml2 IDP Adapter Always Auth\",\"description\":\"Always redirect browser pre-auth\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4yL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL1NBTUwySWRlbnRpdHlQcm92aWRlckFkYXB0ZXIuaHRtbAogKiBOb3RlIHRoYXQgdGhlIGluaXRpYWxpemUgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIHNjcmlwdHMuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzLiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMgZm9yIHRoZSB2YXJpYWJsZXMgYXZhaWxhYmxlIHRvIGl0LgogKgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZwogKiAgICAgRW50aXR5IElEIGZvciB0aGUgaG9zdGVkIElEUAogKiByZWFsbSAtIFN0cmluZwogKiAgICAgUmVhbG0gb2YgdGhlIGhvc3RlZCBJRFAKICogaWRwQWRhcHRlclNjcmlwdEhlbHBlciAtIElkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEpCiAqICAgICBBbiBpbnN0YW5jZSBvZiBJZHBBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIHJlcXVlc3QgLSBIdHRwU2VydmxldFJlcXVlc3QgKDIpCiAqICAgICBTZXJ2bGV0IHJlcXVlc3Qgb2JqZWN0CiAqIHJlc3BvbnNlIC0gSHR0cFNlcnZsZXRSZXNwb25zZSAoMykKICogICAgIFNlcnZsZXQgcmVzcG9uc2Ugb2JqZWN0CiAqIGF1dGhuUmVxdWVzdCAtIEF1dGhuUmVxdWVzdCAoNCkKICogICAgIFRoZSBvcmlnaW5hbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHNlbnQgZnJvbSBTUAogKiByZXFJZCAtIFN0cmluZwogKiAgICAgVGhlIGlkIHRvIHVzZSBmb3IgY29udGludWF0aW9uIG9mIHByb2Nlc3NpbmcgaWYgdGhlIGFkYXB0ZXIgcmVkaXJlY3RzCiAqIHJlcyAtIFJlc3BvbnNlICg1KQogKiAgICAgVGhlIFNBTUwgUmVzcG9uc2UKICogc2Vzc2lvbiAtIFNTT1Rva2VuICg2KQogKiAgICAgVGhlIHNpbmdsZSBzaWduLW9uIHNlc3Npb24uIFRoZSByZWZlcmVuY2UgdHlwZSBvZiB0aGlzIGlzIE9iamVjdCBhbmQgd291bGQgbmVlZCB0byBiZSBjYXN0ZWQgdG8gU1NPVG9rZW4uCiAqIHJlbGF5U3RhdGUgLSBTdHJpbmcKICogICAgIFRoZSByZWxheVN0YXRlIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSByZWRpcmVjdAogKiBmYXVsdENvZGUgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBjb2RlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgU0FNTCByZXNwb25zZQogKiBmYXVsdERldGFpbCAtIFN0cmluZwogKiAgICAgdGhlIGZhdWx0IGRldGFpbCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogbG9nZ2VyIC0gTG9nZ2VyIGluc3RhbmNlCiAqICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLjxzY3JpcHQgbmFtZT4KICoKICogVGhyb3dzIFNBTUwyRXhjZXB0aW9uICg3KToKICogICAgIGZvciBhbnkgZXhjZXB0aW9ucyBvY2N1cnJpbmcgaW4gdGhlIGFkYXB0ZXIuIFRoZSBmZWRlcmF0aW9uIHByb2Nlc3Mgd2lsbCBjb250aW51ZQogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBpZHBBZGFwdGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL1Jlc3BvbnNlLmh0bWwuCiAqICg2KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvY29tbW9uL1NBTUwyRXhjZXB0aW9uLmh0bWwuCiAqLwoKLyoKICogVGVtcGxhdGUvZGVmYXVsdCBzY3JpcHQgZm9yIFNBTUwyIElEUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTaW5nbGVTaWduT24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNpbmdsZVNpZ25PbiIpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZUF1dGhlbnRpY2F0aW9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlQXV0aGVudGljYXRpb24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZUF1dGhlbnRpY2F0aW9uIik7CiAgICByZXR1cm4gdHJ1ZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZFJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBoYXBwZW5lZCBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTZW5kUmVzcG9uc2UgKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNlbmRSZXNwb25zZSIpOwogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IGF1dGhuUmVxdWVzdDogIithdXRoblJlcXVlc3QpOwogICAgICByZXNwb25zZS5zZW5kUmVkaXJlY3QoImh0dHBzOi8vaWRjLnNjaGV1YmVyLmlvL2FtL1hVSS8/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPURpc3BhdGNoZXImRm9yY2VBdXRoPXRydWUmZ290bz0iK3JlbGF5U3RhdGUpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpZ25SZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICByZXMKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2lnblJlc3BvbnNlICgpIHsKICAgICAgbG9nZ2VyLmVycm9yKCJDaGljYWdvOiBwcmVTaWduUmVzcG9uc2UiKTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZEZhaWx1cmVSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGZhdWx0Q29kZQogKiAgICAgZmF1bHREZXRhaWwKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2VuZEZhaWx1cmVSZXNwb25zZSAoKSB7CiAgICAgIGxvZ2dlci5lcnJvcigiQ2hpY2FnbzogcHJlU2VuZEZhaWx1cmVSZXNwb25zZSIpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"name\":\"level\",\"description\":\"set per level shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdsZXZlbCcgKyBsZXZlbCArICdWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzZXQgYXQgZWFjaCBsZXZlbCBvZiB0aGUgbmVzdGVkIGpvdXJuZXlzLiBJdCBjb250YWlucyBhbiBpbmRpY2F0b3IgaW4gd2hpY2ggbGV2ZWwgaXQgd2FzIHNldC4nKTsKfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3f93ef6e-e54a-4393-aba1-f322656db28a\",\"name\":\"OAuth2 Authorize Endpoint Data Provider Script\",\"description\":\"Default global script for OAuth2 Authorize Endpoint Data Provider\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcmV0dXJuIGFkZGl0aW9uYWwgZGF0YSB3aGVuIGF1dGhvcml6ZSByZXF1ZXN0IGlzIGNhbGxlZC4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LgogKgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cwogKgogKiBsb2dnZXIgLSBEZWJ1ZyAoMykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSAiU2NyaXB0ZWRBdXRob3JpemVFbmRwb2ludERhdGFQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FVVEhPUklaRV9FTkRQT0lOVF9EQVRBX1BST1ZJREVSLgogKgogKiBzY3JpcHROYW1lIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHNjcmlwdAogKgogKiBSZXR1cm4gLSBhIE1hcDxTdHJpbmcsIFN0cmluZz4gb2YgYWRkaXRpb25hbCBkYXRhICg0KS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgzKSBEZWJ1ZyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBhdXRob3JpemUgZW5kcG9pbnQgZGF0YSBwcm92aWRlciBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCi8qIEVYQU1QTEUKdmFyIG1hcCA9IG5ldyBqYXZhLnV0aWwuSGFzaE1hcCgpOwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGEoKSB7CgogICAgLy9JZiBjb25zdGFudCBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkCiAgICBtYXAucHV0KCJoZWxsbyIsICJ3b3JsZCIpOwoKICAgIC8vSWYgc29tZSBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkIGZyb20gdGhpcmQgcGFydHkgc2VydmljZQogICAgYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCk7CgogICAgLy9JZiB0aGVyZSBpcyBhIG5lZWQgdG8gcmV0dXJuIHNvbWUgdXNlciBzZXNzaW9uIGRhdGEKICAgIGFkZEFkZGl0aW9uYWxEYXRhRnJvbVNlc3Npb25Qcm9wZXJ0aWVzKCkKCiAgICByZXR1cm4gbWFwOwp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCkgewogIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLlNlcnZlckV4Y2VwdGlvbgogICAgKTsKICB0cnkgewogICAgICAgIC8vT2J0YWluIGFkZGl0aW9uYWwgZGF0YSBieSBwZXJmb3JtaW5nIGEgUkVTVCBjYWxsIHRvIGFuIGV4dGVybmFsIHNlcnZpY2UKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgICAgIHJlcXVlc3Quc2V0VXJpKCJodHRwczovL3RoaXJkLnBhcnR5LmFwcC9oZWxsby5qc3AiKTsKICAgICAgICByZXF1ZXN0LnNldE1ldGhvZCgiUE9TVCIpOwogICAgICAgIC8vcmVxdWVzdC5zZXRFbnRpdHkoImZvbz1iYXImaGVsbG89d29ybGQiKTsKICAgICAgICByZXF1ZXN0LnNldEVudGl0eShqc29uKG9iamVjdCgKICAgICAgICAgICAgICAgICAgICBmaWVsZCgiZm9vIiwgImJhciIpKSkpOwogICAgICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXRPclRocm93KCk7CiAgICAgICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwogICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICBtYXAucHV0KCJzb21lS2V5IixyZXN1bHQuZ2V0KCJzb21lS2V5IikpOwogIH0gY2F0Y2ggKGVycikgewogICAgIHRocm93IG5ldyBmckphdmEuU2VydmVyRXhjZXB0aW9uKGVycik7CiAgfQp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tU2Vzc2lvblByb3BlcnRpZXMoKSB7CiAgLy9BZGQgYWRkaXRpb25hbCBkYXRhIGZyb20gc2Vzc2lvbiBwcm9wZXJ0eSB2YWx1ZXMKICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeyAvLyBzZXNzaW9uIGlzIG5vdCBhdmFpbGFibGUgZm9yIHJlc291cmNlIG93bmVyIHBhc3N3b3JkIGNyZWRlbnRpYWxzIGdyYW50CiAgICAgbWFwLnB1dCgiaXBBZGRyZXNzIiwgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgiSG9zdCIpKQogICB9Cn07CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKSk7Cn07CgphZGRBZGRpdGlvbmFsRGF0YSgpOwoqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"472534ec-a25f-468d-a606-3fb1935190df\",\"name\":\"WeChat Profile Normalization\",\"description\":\"Normalizes raw profile data from WeChat\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLm9wZW5pZCksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uaWNrbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5oZWFkaW1ndXJsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLm5pY2tuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"name\":\"Check Username\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"da56fe60-8b38-4c46-a405-d6b306d4b336\",\"name\":\"OAuth2 Evaluate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Evaluation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcG9wdWxhdGUgdGhlIHNjb3BlcyB3aXRoIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlcyB3aGVuIHRoZSB0b2tlbmluZm8gZW5kcG9pbnQgaXMgY2FsbGVkLgogKiBGb3IgZXhhbXBsZSwgaWYgb25lIG9mIHRoZSBzY29wZXMgaXMgbWFpbCwgQU0gc2V0cyBtYWlsIHRvIHRoZSByZXNvdXJjZSBvd25lcidzIGVtYWlsIGFkZHJlc3MgaW4gdGhlIHRva2VuIGluZm9ybWF0aW9uIHJldHVybmVkLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDIpLgogKiAgICAgICAgICAgIFRoZSBjbGllbnQncyBpZGVudGl0eSBpZiBwcmVzZW50IG9yIHRoZSByZXNvdXJjZSBvd25lcidzIGlkZW50aXR5LiBDYW4gYmUgbnVsbC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0VWQUxVQVRFX1NDT1BFCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoMykuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIGEgTWFwPFN0cmluZywgT2JqZWN0PiBvZiB0aGUgYWNjZXNzIHRva2VuJ3MgaW5mb3JtYXRpb24gKDQpLgogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBBY2Nlc3NUb2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vYXV0aDIvY29yZS9BY2Nlc3NUb2tlbi5odG1sLgogKiAoMikgQU1JZGVudGl0eSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9pZG0vQU1JZGVudGl0eS5odG1sLgogKiAoMykgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBldmFsdWF0ZSBzY29wZSBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgbWFwID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7CiAgICBpZiAoaWRlbnRpdHkgIT09IG51bGwpIHsKICAgICAgICB2YXIgc2NvcGVzID0gYWNjZXNzVG9rZW4uZ2V0U2NvcGUoKS50b0FycmF5KCk7CiAgICAgICAgc2NvcGVzLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKHNjb3BlKS50b0FycmF5KCk7CiAgICAgICAgICAgIG1hcC5wdXQoc2NvcGUsIGF0dHJpYnV0ZXMuam9pbigiLCIpKTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKCdpZGVudGl0eSBpcyBudWxsJyk7CiAgICB9CiAgICByZXR1cm4gbWFwOwp9KCkpOw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_EVALUATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"8862ca8f-7770-4af5-a888-ac0df0947f36\",\"name\":\"LinkedIn Profile Normalization\",\"description\":\"Normalizes raw profile data from LinkedIn\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5maXJzdE5hbWUubG9jYWxpemVkLmdldCgwKSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3ROYW1lLmxvY2FsaXplZC5nZXQoMCkpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucHJvZmlsZVBpY3R1cmUuZGlzcGxheUltYWdlKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVsZW1lbnRzLmdldCgwKS5nZXQoImhhbmRsZX4iKS5lbWFpbEFkZHJlc3MpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZWxlbWVudHMuZ2V0KDApLmdldCgiaGFuZGxlfiIpLmVtYWlsQWRkcmVzcykpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1244e639-4a31-401d-ab61-d75133d8dc9e\",\"name\":\"Instagram Profile Normalization\",\"description\":\"Normalizes raw profile data from Instagram\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1f389a3d-21cf-417c-a6d3-42ea620071f0\",\"name\":\"ForgeRock Internal: OIDC Claims Script\",\"description\":\"Internal OIDC Claims script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"9de3eb62-f131-4fac-a294-7bd170fd4acb\",\"name\":\"Scripted Policy Condition\",\"description\":\"Default global script for Scripted Policy Conditions\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qKgogKiBUaGlzIGlzIGEgUG9saWN5IENvbmRpdGlvbiBleGFtcGxlIHNjcmlwdC4gSXQgZGVtb25zdHJhdGVzIGhvdyB0byBhY2Nlc3MgYSB1c2VyJ3MgaW5mb3JtYXRpb24sCiAqIHVzZSB0aGF0IGluZm9ybWF0aW9uIGluIGV4dGVybmFsIEhUVFAgY2FsbHMgYW5kIG1ha2UgYSBwb2xpY3kgZGVjaXNpb24gYmFzZWQgb24gdGhlIG91dGNvbWUuCiAqLwoKdmFyIHVzZXJBZGRyZXNzLCB1c2VySVAsIHJlc291cmNlSG9zdDsKCmlmICh2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkpIHsKCiAgICB2YXIgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9IGdldENvdW50cnlGcm9tVXNlckFkZHJlc3MoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJDb3VudHJ5IHJldHJpZXZlZCBmcm9tIHVzZXIncyBhZGRyZXNzOiAiICsgY291bnRyeUZyb21Vc2VyQWRkcmVzcyk7CiAgICB2YXIgY291bnRyeUZyb21Vc2VySVAgPSBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpOwogICAgbG9nZ2VyLm1lc3NhZ2UoIkNvdW50cnkgcmV0cmlldmVkIGZyb20gdXNlcidzIElQOiAiICsgY291bnRyeUZyb21Vc2VySVApOwogICAgdmFyIGNvdW50cnlGcm9tUmVzb3VyY2VVUkkgPSBnZXRDb3VudHJ5RnJvbVJlc291cmNlVVJJKCk7CiAgICBsb2dnZXIubWVzc2FnZSgiQ291bnRyeSByZXRyaWV2ZWQgZnJvbSByZXNvdXJjZSBVUkk6ICIgKyBjb3VudHJ5RnJvbVJlc291cmNlVVJJKTsKCiAgICBpZiAoY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21Vc2VySVAgJiYgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21SZXNvdXJjZVVSSSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIFN1Y2NlZWRlZCIpOwogICAgICAgIHJlc3BvbnNlQXR0cmlidXRlcy5wdXQoImNvdW50cnlPZk9yaWdpbiIsIFtjb3VudHJ5RnJvbVVzZXJBZGRyZXNzXSk7CiAgICAgICAgYXV0aG9yaXplZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIEZhaWxlZCIpOwogICAgICAgIGF1dGhvcml6ZWQgPSBmYWxzZTsKICAgIH0KCn0gZWxzZSB7CiAgICBsb2dnZXIubWVzc2FnZSgiUmVxdWlyZWQgcGFyYW1ldGVycyBub3QgZm91bmQuIEF1dGhvcml6YXRpb24gRmFpbGVkLiIpOwogICAgYXV0aG9yaXplZCA9IGZhbHNlOwp9CgovKioKICogVXNlIHRoZSB1c2VyJ3MgYWRkcmVzcyB0byBsb29rdXAgdGhlaXIgY291bnRyeSBvZiByZXNpZGVuY2UuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgdXNlcidzIGNvdW50cnkgb2YgcmVzaWRlbmNlLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21Vc2VyQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlckFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgZ2VvY29kZSA9IEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvY29kZS5yZXN1bHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGdlb2NvZGUucmVzdWx0c1tpXTsKICAgICAgICB2YXIgajsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgcmVzdWx0LmFkZHJlc3NfY29tcG9uZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAocmVzdWx0LmFkZHJlc3NfY29tcG9uZW50c1tpXS50eXBlc1swXSA9PSAiY291bnRyeSIpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYWRkcmVzc19jb21wb25lbnRzW2ldLmxvbmdfbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKLyoqCiAqIFVzZSB0aGUgdXNlcidzIElQIHRvIGxvb2t1cCB0aGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqLwpmdW5jdGlvbiBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgdXNlcklQKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdC5jb3VudHJ5OwogICAgfQp9CgovKioKICogVXNlIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UncyBob3N0IG5hbWUgdG8gbG9va3VwIHRoZSBjb3VudHJ5IHdoZXJlIHRoZSByZXNvdXJjZSBpcyBob3N0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBpbiB3aGljaCB0aGUgcmVzb3VyY2UgaXMgaG9zdGVkLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21SZXNvdXJjZVVSSSgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgZW5jb2RlVVJJQ29tcG9uZW50KHJlc291cmNlSG9zdCkpOwogICAgICByZXF1ZXN0LnNldE1ldGhvZCgiR0VUIik7CgogICAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3QpLmdldCgpOwogICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwoKICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIGlmIChyZXN1bHQpIHsKICAgICAgICByZXR1cm4gcmVzdWx0LmNvdW50cnk7CiAgICB9Cn0KCi8qKgogKiBSZXRyaWV2ZSBhbmQgdmFsaWRhdGUgdGhlIHZhcmlhYmxlcyByZXF1aXJlZCB0byBtYWtlIHRoZSBleHRlcm5hbCBIVFRQIGNhbGxzLgogKgogKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2lsbCBiZSB0cnVlIGlmIHZhbGlkYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkgewogICAgdmFyIHVzZXJBZGRyZXNzU2V0ID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKCJwb3N0YWxBZGRyZXNzIik7CiAgICBpZiAodXNlckFkZHJlc3NTZXQgPT0gbnVsbCB8fCB1c2VyQWRkcmVzc1NldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gYWRkcmVzcyBzcGVjaWZpZWQgZm9yIHVzZXI6ICIgKyB1c2VybmFtZSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdXNlckFkZHJlc3MgPSB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIGFkZHJlc3M6ICIgKyB1c2VyQWRkcmVzcyk7CgogICAgaWYgKCFlbnZpcm9ubWVudCkgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJObyBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiB0aGUgZXZhbHVhdGlvbiByZXF1ZXN0LiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB2YXIgaXBTZXQgPSBlbnZpcm9ubWVudC5nZXQoIklQIik7CiAgICBpZiAoaXBTZXQgPT0gbnVsbCB8fCBpcFNldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gSVAgc3BlY2lmaWVkIGluIHRoZSBldmFsdWF0aW9uIHJlcXVlc3QgZW52aXJvbm1lbnQgcGFyYW1ldGVycy4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB1c2VySVAgPSBpcFNldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIElQOiAiICsgdXNlcklQKTsKCiAgICBpZiAoIXJlc291cmNlVVJJKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIHJlc291cmNlIFVSSSBzcGVjaWZpZWQuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmVzb3VyY2VIb3N0ID0gcmVzb3VyY2VVUkkubWF0Y2goL14oLio6XC9cLykod3d3XC4pPyhbQS1aYS16MC05XC1cLl0rKSg6WzAtOV0rKT8oLiopJC8pWzNdOwogICAgbG9nZ2VyLm1lc3NhZ2UoIlJlc291cmNlIGhvc3Q6ICIgKyByZXNvdXJjZUhvc3QpOwoKICAgIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"POLICY_CONDITION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"name\":\"debug\",\"description\":\"Display sharedState, transientState, and headers.\",\"script\":\"LyogZGVidWcKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogRGlzcGxheSBzaGFyZWRTdGF0ZSwgdHJhbnNpZW50U3RhdGUsIGFuZCBoZWFkZXJzLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwp2YXIgYW5jaG9yID0gImFuY2hvci0iLmNvbmNhdChnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4JykpOwp2YXIgaGFsaWduID0gImxlZnQiOwp2YXIgbWVzc2FnZSA9ICI8cD48Yj5TaGFyZWQgU3RhdGU8L2I+Ojxici8+Ii5jb25jYXQoCiAgICAgIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpLmNvbmNhdCgKICAgICI8cD48Yj5UcmFuc2llbnQgU3RhdGU8L2I+Ojxici8+IikuY29uY2F0KAogICAgICB0cmFuc2llbnRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+UmVxdWVzdCBIZWFkZXJzPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgICAgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikKdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwidGV4dC1sZWZ0XCI7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIikuY29uY2F0KG1lc3NhZ2UpLmNvbmNhdCgiJztcbiIpLmNvbmNhdCgKICAiICB9XG4iKS5jb25jYXQoCiAgIn0pIikKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawopCmlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgIGFuY2hvcgogICAgICAgICksCiAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICApLmJ1aWxkKCkKfQplbHNlIHsKICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0KCiAvKgogICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAqIAogICogRXhhbXBsZToKICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICogJ3h4eC14eHgnIHByb2R1Y2VzICc0MzItNTIxJwogICovCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxMHwwOwogICAgICAgIHZhciB2ID0gcjsKICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"23143919-6b78-40c3-b25e-beca19b229e0\",\"name\":\"GitHub Profile Normalization (VS)\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJHaXRIdWIgcmF3UHJvZmlsZTogIityYXdQcm9maWxlKQoKcmV0dXJuIGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZmlyc3RfbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3RfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5waWN0dXJlLmRhdGEudXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLmVtYWlsKSkp\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"58d29080-4563-480b-89bb-1e7719776a21\",\"name\":\"Google Profile Normalization\",\"description\":\"Normalizes raw profile data from Google\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c827d2b4-3608-4693-868e-bbcf86bd87c7\",\"name\":\"Scripted Module - Client Side\",\"description\":\"Default global script for client side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTYtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qIERlZmF1bHQgQXV0aGVudGljYXRpb24gY2xpZW50IHNpZGUgc2NyaXB0IHRvIHVzZSBhcyBhIHRlbXBsYXRlIGZvciBuZXcgc2NyaXB0cyAqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6b3cfd48-62d3-48ff-a96f-fe8f3a22ab30\",\"name\":\"Amazon Profile Normalization\",\"description\":\"Normalizes raw profile data from Amazon\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"7e3d7067-d50f-4674-8c76-a3e13a810c33\",\"name\":\"Scripted Module - Server Side\",\"description\":\"Default global script for server side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgp2YXIgU1RBUlRfVElNRSA9IDk7ICAvLyA5YW0KdmFyIEVORF9USU1FICAgPSAxNzsgLy8gNXBtCnZhciBsb25naXR1ZGUsIGxhdGl0dWRlOwp2YXIgbG9jYWxUaW1lOwoKbG9nZ2VyLm1lc3NhZ2UoIlN0YXJ0aW5nIHNjcmlwdGVkIGF1dGhlbnRpY2F0aW9uIik7CmxvZ2dlci5tZXNzYWdlKCJVc2VyOiAiICsgdXNlcm5hbWUpOwoKdmFyIHVzZXJQb3N0YWxBZGRyZXNzID0gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKTsKbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgYWRkcmVzczogIiArIHVzZXJQb3N0YWxBZGRyZXNzKTsKCmdldExvbmdpdHVkZUxhdGl0dWRlRnJvbVVzZXJQb3N0YWxBZGRyZXNzKCk7CmdldExvY2FsVGltZSgpOwoKbG9nZ2VyLm1lc3NhZ2UoIkN1cnJlbnQgdGltZSBhdCB0aGUgdXNlcnMgbG9jYXRpb246ICIgKyBsb2NhbFRpbWUuZ2V0SG91cnMoKSk7CmlmIChsb2NhbFRpbWUuZ2V0SG91cnMoKSA8IFNUQVJUX1RJTUUgfHwgbG9jYWxUaW1lLmdldEhvdXJzKCkgPiBFTkRfVElNRSkgewogICAgbG9nZ2VyLmVycm9yKCJMb2dpbiBmb3JiaWRkZW4gb3V0c2lkZSB3b3JrIGhvdXJzISIpOwogICAgYXV0aFN0YXRlID0gRkFJTEVEOwp9IGVsc2UgewogICAgbG9nZ2VyLm1lc3NhZ2UoIkF1dGhlbnRpY2F0aW9uIGFsbG93ZWQhIik7CiAgICBhdXRoU3RhdGUgPSBTVUNDRVNTOwp9CgpmdW5jdGlvbiBnZXRMb25naXR1ZGVMYXRpdHVkZUZyb21Vc2VyUG9zdGFsQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlclBvc3RhbEFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwogICAgICAvL3RoZSBhYm92ZSBVUkkgaGFzIHRvIGJlIGV4dGVuZGVkIHdpdGggYW4gQVBJX0tFWSBpZiB1c2VkIGluIGEgZnJlcXVlbnQgbWFubmVyCiAgICAgIC8vc2VlIGRvY3VtZW50YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9nZW9jb2RpbmcvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIGdlb2NvZGUgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIHZhciBpOwogICAgZm9yIChpID0gMDsgaSA8IGdlb2NvZGUucmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciByZXN1bHQgPSBnZW9jb2RlLnJlc3VsdHNbaV07CiAgICAgICAgbGF0aXR1ZGUgPSByZXN1bHQuZ2VvbWV0cnkubG9jYXRpb24ubGF0OwogICAgICAgIGxvbmdpdHVkZSA9IHJlc3VsdC5nZW9tZXRyeS5sb2NhdGlvbi5sbmc7CgogICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJsYXRpdHVkZToiICsgbGF0aXR1ZGUgKyAiIGxvbmdpdHVkZToiICsgbG9uZ2l0dWRlKTsKICAgIH0KfQoKZnVuY3Rpb24gZ2V0TG9jYWxUaW1lKCkgewoKICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7CiAgICB2YXIgbG9jYXRpb24gPSAibG9jYXRpb249IiArIGxhdGl0dWRlICsgIiwiICsgbG9uZ2l0dWRlOwogICAgdmFyIHRpbWVzdGFtcCA9ICJ0aW1lc3RhbXA9IiArIG5vdzsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS90aW1lem9uZS9qc29uPyIgKyBsb2NhdGlvbiArICImIiArIHRpbWVzdGFtcCk7CiAgICAgIHJlcXVlc3Quc2V0TWV0aG9kKCJHRVQiKTsKICAgICAgLy90aGUgYWJvdmUgVVJJIGhhcyB0byBiZSBleHRlbmRlZCB3aXRoIGFuIEFQSV9LRVkgaWYgdXNlZCBpbiBhIGZyZXF1ZW50IG1hbm5lcgogICAgICAvL3NlZSBkb2N1bWVudGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vdGltZXpvbmUvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIHRpbWV6b25lID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICB2YXIgbG9jYWxUaW1lc3RhbXAgPSBwYXJzZUludChub3cpICsgcGFyc2VJbnQodGltZXpvbmUuZHN0T2Zmc2V0KSArIHBhcnNlSW50KHRpbWV6b25lLnJhd09mZnNldCk7CiAgICBsb2NhbFRpbWUgPSBuZXcgRGF0ZShsb2NhbFRpbWVzdGFtcCoxMDAwKTsKfQoKZnVuY3Rpb24gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKSB7CiAgICB2YXIgdXNlckFkZHJlc3NTZXQgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCAicG9zdGFsQWRkcmVzcyIpOwogICAgaWYgKHVzZXJBZGRyZXNzU2V0ID09IG51bGwgfHwgdXNlckFkZHJlc3NTZXQuaXNFbXB0eSgpKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIGFkZHJlc3Mgc3BlY2lmaWVkIGZvciB1c2VyOiAiICsgdXNlcm5hbWUpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKQp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"d58977ed-0542-4147-8197-973ef7300191\",\"name\":\"Custom Device Match Script\",\"description\":\"Custom Device Match Script\",\"script\":\"LyoKICogQ3VzdG9tIERldmljZSBNYXRjaCBTY3JpcHQKICovCgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c4f22465-2368-4e27-8013-e6399974fd48\",\"name\":\"SAML2 IDP Attribute Mapper Script\",\"description\":\"Default global script for SAML2 IDP Attribute Mapper\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSBvYmplY3RzIGZvciB0aGUgSURQIGZyYW1ld29yayB0byBpbnNlcnQgaW50byB0aGUgZ2VuZXJhdGVkIEFzc2VydGlvbi4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgICAgICBUaGUgaG9zdGVkIGVudGl0eSBJRC4KICogcmVtb3RlRW50aXR5SWQgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgICAgVGhlIHJlbW90ZSBlbnRpdHkgSUQuCiAqIHJlYWxtIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGluZyB0by4KICogbG9nZ2VyIC0gQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5TQU1MMl9JRFBfQVRUUklCVVRFX01BUFBFUgogKiBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgLSBJZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgKDIpCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFuIElkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlciBpbnN0YW5jZSBjb250YWluaW5nIG1ldGhvZHMgdXNlZCBmb3IgSURQIGF0dHJpYnV0ZSBtYXBwaW5nLgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb246CiAqICAgICAgLSBvbiBmYWlsaW5nIHRvIG1hcCB0aGUgSURQIGF0dHJpYnV0ZXMuCiAqCiAqIFJldHVybiAtIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSAoMykgb2JqZWN0cy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgSWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaHRtbC4KICogKDMpIEF0dHJpYnV0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9hc3NlcnRpb24vQXR0cmlidXRlLmh0bWwuCiAqLwoKLyoqCiAqIERlZmF1bHQgU0FNTDIgSURQIEF0dHJpYnV0ZSBNYXBwZXIuCiAqLwpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKCkgewogICAgdmFyIGZySmF2YSA9IEphdmFJbXBvcnRlcigKICAgICAgICBjb20uc3VuLmlkZW50aXR5LnNhbWwyLmNvbW1vbi5TQU1MMkV4Y2VwdGlvbgogICAgKTsKCiAgICBjb25zdCBkZWJ1Z01ldGhvZCA9ICJTY3JpcHRlZElEUEF0dHJpYnV0ZU1hcHBlci5nZXRBdHRyaWJ1dGVzOjogIjsKCiAgICB0cnkgewoKICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1Nlc3Npb25WYWxpZChzZXNzaW9uKSkgewogICAgICAgICAgICBsb2dnZXIuZXJyb3IoZGVidWdNZXRob2QgKyAiSW52YWxpZCBzZXNzaW9uLiIpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHZhciBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0UmVtb3RlU1BDb25maWdBdHRyaWJ1dGVNYXAocmVhbG0sIHJlbW90ZUVudGl0eUlkKTsKICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJSZW1vdGUgU1AgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICBpZiAoY29uZmlnTWFwID09IG51bGwgfHwgY29uZmlnTWFwLmlzRW1wdHkoKSkgewogICAgICAgICAgICBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0SG9zdGVkSURQQ29uZmlnQXR0cmlidXRlTWFwKHJlYWxtLCBob3N0ZWRFbnRpdHlJZCk7CiAgICAgICAgICAgIGlmIChjb25maWdNYXAgPT0gbnVsbCB8fCBjb25maWdNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJDb25maWd1cmF0aW9uIG1hcCBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKGRlYnVnTWV0aG9kICsgIkhvc3RlZCBJRFAgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICB9CgogICAgICAgIHZhciBhdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoKTsKICAgICAgICB2YXIgc3RyaW5nVmFsdWVNYXAgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKICAgICAgICB2YXIgYmluYXJ5VmFsdWVNYXA7CiAgICAgICAgdmFyIGxvY2FsQXR0cmlidXRlOwoKICAgICAgICAvLyBEb24ndCB0cnkgdG8gcmVhZCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBkYXRhc3RvcmUgaWYgdGhlIGlnbm9yZWQgcHJvZmlsZSBpcyBlbmFibGVkIGluIHRoaXMgcmVhbG0uCiAgICAgICAgaWYgKCFpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaXNJZ25vcmVkUHJvZmlsZShzZXNzaW9uLCByZWFsbSkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIFJlc29sdmUgYXR0cmlidXRlcyB0byBiZSByZWFkIGZyb20gdGhlIGRhdGFzdG9yZS4KICAgICAgICAgICAgICAgIHZhciBzdHJpbmdBdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KCk7CiAgICAgICAgICAgICAgICB2YXIgYmluYXJ5QXR0cmlidXRlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgIHdoaWxlIChrZXlJdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlJdGVyLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBsb2NhbEF0dHJpYnV0ZSA9IGNvbmZpZ01hcC5nZXQoa2V5KTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1N0YXRpY0F0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc0JpbmFyeUF0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHRyZWF0IGFzIGJlaW5nIGJpbmFyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5QXR0cmlidXRlcy5hZGQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLnJlbW92ZUJpbmFyeUF0dHJpYnV0ZUZsYWcobG9jYWxBdHRyaWJ1dGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMuYWRkKGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXN0cmluZ0F0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWVNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0QXR0cmlidXRlcyhzZXNzaW9uLCBzdHJpbmdBdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghYmluYXJ5QXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBiaW5hcnlWYWx1ZU1hcCA9IGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5nZXRCaW5hcnlBdHRyaWJ1dGVzKHNlc3Npb24sIGJpbmFyeUF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGRlYnVnTWV0aG9kICsgIkVycm9yIGFjY2Vzc2luZyB0aGUgZGF0YXN0b3JlLiAiICsgZXJyb3IpOwogICAgICAgICAgICAgICAgLy9jb250aW51ZSB0byBjaGVjayBpbiBzc290b2tlbi4KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICB3aGlsZSAoa2V5SXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgdmFyIGtleSA9IGtleUl0ZXIubmV4dCgpCiAgICAgICAgICAgIHZhciBuYW1lRm9ybWF0ID0gbnVsbDsKICAgICAgICAgICAgdmFyIHNhbWxBdHRyaWJ1dGUgPSBrZXk7CiAgICAgICAgICAgIGxvY2FsQXR0cmlidXRlID0gY29uZmlnTWFwLmdldChrZXkpOwogICAgICAgICAgICAvLyBjaGVjayBpZiBzYW1sQXR0cmlidXRlIGhhcyBmb3JtYXQgbmFtZUZvcm1hdHxzYW1sQXR0cmlidXRlCiAgICAgICAgICAgIHZhciBzYW1sQXR0cmlidXRlcyA9IFN0cmluZyhuZXcgamF2YS5sYW5nLlN0cmluZyhzYW1sQXR0cmlidXRlKSk7CiAgICAgICAgICAgIHZhciB0b2tlbnMgPSBzYW1sQXR0cmlidXRlcy5zcGxpdCgnfCcpOwoKICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICBuYW1lRm9ybWF0ID0gdG9rZW5zWzBdOwogICAgICAgICAgICAgICAgc2FtbEF0dHJpYnV0ZSA9IHRva2Vuc1sxXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVZhbHVlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzU3RhdGljQXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdGF0aWMgZmxhZyBiZWZvcmUgdXNpbmcgaXQgYXMgdGhlIHN0YXRpYyB2YWx1ZQogICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlU3RhdGljQXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoW2xvY2FsQXR0cmlidXRlXSk7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJBZGRpbmcgc3RhdGljIHZhbHVlIHt9IGZvciBhdHRyaWJ1dGUgbmFtZWQge30iLCBsb2NhbEF0dHJpYnV0ZSwgc2FtbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzQmluYXJ5QXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZmxhZyBhcyBub3QgdXNlZCBmb3IgbG9va3VwCiAgICAgICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlQmluYXJ5QXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzID0gaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldEJpbmFyeUF0dHJpYnV0ZVZhbHVlcyhzYW1sQXR0cmlidXRlLCBsb2NhbEF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5VmFsdWVNYXApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWVNYXAgIT0gbnVsbCAmJiAhc3RyaW5nVmFsdWVNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlcyA9IHN0cmluZ1ZhbHVlTWFwLmdldChsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoZGVidWdNZXRob2QgKyAie30gc3RyaW5nIHZhbHVlIG1hcCB3YXMgZW1wdHkgb3IgbnVsbC4iLCBsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSB1c2VycyBzc29Ub2tlbgogICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlcyA9PSBudWxsIHx8IGF0dHJpYnV0ZVZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJVc2VyIHByb2ZpbGUgZG9lcyBub3QgaGF2ZSB2YWx1ZSBmb3Ige30sIGNoZWNraW5nIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldFByb3BlcnR5U2V0KHNlc3Npb24sIGxvY2FsQXR0cmlidXRlKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZXMgPT0gbnVsbCB8fCBhdHRyaWJ1dGVWYWx1ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJ7fSBub3QgZm91bmQgaW4gdXNlciBwcm9maWxlIG9yIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuYWRkKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5jcmVhdGVTQU1MQXR0cmlidXRlKHNhbWxBdHRyaWJ1dGUsIG5hbWVGb3JtYXQsIGF0dHJpYnV0ZVZhbHVlcykpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXR0cmlidXRlczsKCiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGxvZ2dlci5lcnJvcihkZWJ1Z01ldGhvZCArICJFcnJvciBtYXBwaW5nIElEUCBhdHRyaWJ1dGVzLiAiICsgZXJyb3IpOwogICAgICAgIHRocm93IG5ldyBmckphdmEuU0FNTDJFeGNlcHRpb24oZXJyb3IpOwogICAgfQp9CgpnZXRBdHRyaWJ1dGVzKCk7\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ATTRIBUTE_MAPPER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"424da748-82cc-4b54-be6f-82bd64d82a74\",\"name\":\"Yahoo Profile Normalization\",\"description\":\"Normalizes raw profile data from Yahoo\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"403cf226-6051-4368-8b72-9ba14f9a5140\",\"name\":\"VKontakte Profile Normalization\",\"description\":\"Normalizes raw profile data from VKontakte\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGhvdG9fNTApLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"5e854779-6ec1-4c39-aeba-0477e0986646\",\"name\":\"Config Provider Node Script\",\"description\":\"Script to provide values for a config provider node\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKioKICogVGhlIGZvbGxvd2luZyBzY3JpcHQgaXMgYSBzaW1wbGlmaWVkIHRlbXBsYXRlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0byBidWlsZAogKiB1cCBhIGNvbmZpZyBNYXAgb2JqZWN0IHdpdGggY3VzdG9tIHZhbHVlcy4gVGhlIENvbmZpZyBQcm92aWRlciBOb2RlIHdpbGwgdGhlbgogKiBwcm92aWRlIHRoaXMgY29uZmlnIE1hcCB0byB0aGUgZGVzaXJlZCBub2RlIHR5cGUuIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBNYXAKICogeW91IGJ1aWxkIGhlcmUgaXMgbmFtZWQgJ2NvbmZpZycuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKgogKiBub2RlU3RhdGUgLSBOb2RlIFN0YXRlICgxKQogKiAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoaXMgcmVwcmVzZW50cyB0aGUgY3VycmVudCB2YWx1ZXMgc3RvcmVkIGluIHRoZSBub2RlIHN0YXRlLgogKgogKiBpZFJlcG9zaXRvcnkgLSBQcm9maWxlIERhdGEgKDIpCiAqICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgYSByZXBvc2l0b3J5IHRvIHJldHJpZXZlIHVzZXIgaW5mb3JtYXRpb24uCiAqCiAqIHNlY3JldHMgLSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAoMykKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBTZWNyZXRzIEFQSSBmcm9tIGEgc2NyaXB0aW5nIGNvbnRleHQuCiAqCiAqIHJlcXVlc3RIZWFkZXJzICg0KSAtIE1hcCAoNSkKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIGZvciBhY2Nlc3NpbmcgaGVhZGVycyBpbiB0aGUgbG9naW4gcmVxdWVzdC4KICoKICogbG9nZ2VyIC0gRGVidWcgTG9nZ2luZyAoNikKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2UuCiAqCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoNykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cy4KICoKICogcmVhbG0gLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqCiAqIGV4aXN0aW5nU2Vzc2lvbiAtIE1hcDxTdHJpbmcsIFN0cmluZz4gKDUpCiAqICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LiBUaGUgcmV0dXJuZWQgbWFwIGZyb20KICogICAgICAgICAgU1NPVG9rZW4uZ2V0UHJvcGVydGllcygpICg4KQogKgogKiByZXF1ZXN0UGFyYW1ldGVycyAtIE1hcCAoNSkKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBwYXJhbWV0ZXJzLgogKgogKgogKiBPdXRwdXRzOgogKgogKiBjb25maWcgLSBNYXAgKDUpCiAqICAgICAgICAgICBEZWZpbmUgYW5kIGZpbGwgYSBNYXAgb2JqZWN0IG5hbWVkICdjb25maWcnIHdpdGggY3VzdG9tIHZhbHVlcywgdGhpcyB3aWxsIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlCiAqICAgICAgICAgICBhc3NvY2lhdGVkIG5vZGUgc2VsZWN0ZWQgaW4gdGhlIENvbmZpZ1Byb3ZpZGVyTm9kZS4KICoKICogUmVmZXJlbmNlOgogKiAoMSkgTm9kZSBTdGF0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9pZGNsb3VkLWFtL2xhdGVzdC9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtbm9kZVN0YXRlCiAqICgyKSBQcm9maWxlIERhdGEgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4xL2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1pZC1yZXBvCiAqICgzKSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjEvYXV0aGVudGljYXRpb24tZ3VpZGUvc2NyaXB0aW5nLWFwaS1ub2RlLmh0bWwjc2NyaXB0aW5nLWFwaS1hdXRobi1zZWNyZXRzCiAqICg0KSBSZXF1ZXN0IEhlYWRlcnMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtcmVxdWVzdEhlYWRlcnMuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL01hcC5odG1sCiAqICg2KSBEZWJ1ZyBMb2dnaW5nIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogKDcpIEhUVFAgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg4KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqLwoKY29uZmlnID0gewogICAgImtleTAiOiB7InN1YktleSI6ICJ2YWx1ZTAifSwKICAgICJrZXkxIjogInZhbHVlMSIKfTs=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"CONFIG_PROVIDER_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"cf3515f0-8278-4ee3-a530-1bad7424c416\",\"name\":\"Alpha OIDC Claims Script\",\"description\":\"Default alpha realm script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"d22f9a0c-426a-4466-b95e-d0f125b0d5fa\",\"name\":\"OAuth2 Access Token Modification Script\",\"description\":\"Default global script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"73cecbfc-dad0-4395-be6a-6858ee3a80e5\",\"name\":\"Microsoft Profile Normalization\",\"description\":\"Normalizes raw profile data from Microsoft\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlOYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbk5hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5zdXJuYW1lKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"a7a78773-445b-4eca-bb93-409e86bced81\",\"name\":\"GitHub Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUubG9naW4pKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"01e1a3c0-038b-4c16-956a-6c9d89328cff\",\"name\":\"Authentication Tree Decision Node Script\",\"description\":\"Default global script for a scripted decision node\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKb3V0Y29tZSA9ICJ0cnVlIjsK\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"dbe0bf9a-72aa-49d5-8483-9db147985a47\",\"name\":\"ADFS Profile Normalization (JS)\",\"description\":\"Normalizes raw profile data from ADFS\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIHRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIKICogaW4gYSBzdGFuZGFyZCBmb3JtIGV4cGVjdGVkIGJ5IHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogcmF3UHJvZmlsZSAtIFRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvdmlkZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIuCiAqICAgICAgICAgICAgICBKc29uVmFsdWUgKDEpLgogKiBsb2dnZXIgLSBUaGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiByZWFsbSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqIHJlcXVlc3RIZWFkZXJzIC0gVHJlZU1hcCAoMikuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFjY2Vzc2luZyBoZWFkZXJzIGluIHRoZSBsb2dpbiByZXF1ZXN0OgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1yZXF1ZXN0SGVhZGVycy4KICogcmVxdWVzdFBhcmFtZXRlcnMgLSBUcmVlTWFwICgyKS4KICogICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFyYW1ldGVycy4KICogc2VsZWN0ZWRJZHAgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgVGhlIHNvY2lhbCBpZGVudGl0eSBwcm92aWRlciBuYW1lLiBGb3IgZXhhbXBsZTogZ29vZ2xlLgogKiBzaGFyZWRTdGF0ZSAtIExpbmtlZEhhc2hNYXAgKDMpLgogKiAgICAgICAgICAgICAgIFRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgc3RhdGUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRyZWUgYW5kIGFsbG93cyBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gdGhlIHN0YXRlbGVzcyBub2RlczoKICogICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoLW5vZGVzL2NvcmUtYWN0aW9uLmh0bWwjYWNjZXNzaW5nLXRyZWUtc3RhdGUuCiAqIHRyYW5zaWVudFN0YXRlIC0gTGlua2VkSGFzaE1hcCAoMykuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCBmb3Igc3RvcmluZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdGhhdCBtdXN0IG5vdCBsZWF2ZSB0aGUgc2VydmVyIHVuZW5jcnlwdGVkLAogKiAgICAgICAgICAgICAgICAgIGFuZCB0aGF0IG1heSBub3QgbmVlZCB0byBwZXJzaXN0IGJldHdlZW4gYXV0aGVudGljYXRpb24gcmVxdWVzdHMgZHVyaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBzZXNzaW9uOgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGgtbm9kZXMvY29yZS1hY3Rpb24uaHRtbCNhY2Nlc3NpbmctdHJlZS1zdGF0ZS4KICoKICogUmV0dXJuIC0gYSBKc29uVmFsdWUgKDEpLgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqCiAqICAgICAgICAgIFRoaXMgc2NyaXB0J3MgbGFzdCBzdGF0ZW1lbnQgc2hvdWxkIHJlc3VsdCBpbiBhIEpzb25WYWx1ZSAoMSkgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAqICAgICAgICAgIHsKICogICAgICAgICAgICAgIHsiZGlzcGxheU5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZW1haWwiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZmFtaWx5TmFtZSI6ICJjb3JyZXNwb25kaW5nLXNvY2lhbC1pZGVudGl0eS1wcm92aWRlci12YWx1ZSJ9LAogKiAgICAgICAgICAgICAgeyJnaXZlbk5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiaWQiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsibG9jYWxlIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InBob3RvVXJsIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InVzZXJuYW1lIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0KICogICAgICAgICAgfQogKgogKiAgICAgICAgICBUaGUgY29uc3VtZXIgb2YgdGhpcyBkYXRhIGRlZmluZXMgd2hpY2gga2V5cyBhcmUgcmVxdWlyZWQgYW5kIHdoaWNoIGFyZSBvcHRpb25hbC4KICogICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlIGFuZCwKICogICAgICAgICAgdWx0aW1hdGVseSwgdGhlIG1hbmFnZWQgb2JqZWN0IGNyZWF0ZWQvdXBkYXRlZCB3aXRoIHRoaXMgZGF0YQogKiAgICAgICAgICB3aWxsIGV4cGVjdCBjZXJ0YWluIGtleXMgdG8gYmUgcG9wdWxhdGVkLgogKiAgICAgICAgICBJbiBzb21lIGNvbW1vbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB0aGUgZm9sbG93aW5nIGtleXMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vdCBlbXB0eToKICogICAgICAgICAgdXNlcm5hbWUsIGdpdmVuTmFtZSwgZmFtaWx5TmFtZSwgZW1haWwuCiAqCiAqICAgICAgICAgIEZyb20gUkZDNDUxNzogQSB2YWx1ZSBvZiB0aGUgRGlyZWN0b3J5IFN0cmluZyBzeW50YXggaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKICogICAgICAgICAgYXJiaXRyYXJ5IGNoYXJhY3RlcnMgZnJvbSB0aGUgVW5pdmVyc2FsIENoYXJhY3RlciBTZXQgKFVDUykuCiAqICAgICAgICAgIEEgemVyby1sZW5ndGggY2hhcmFjdGVyIHN0cmluZyBpcyBub3QgcGVybWl0dGVkLgogKgogKiAoMSkgSnNvblZhbHVlIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2pzb24vSnNvblZhbHVlLmh0bWwuCiAqICgyKSBUcmVlTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9UcmVlTWFwLmh0bWwuCiAqICgzKSBMaW5rZWRIYXNoTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqLwoKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQogICAgKTsKCiAgICB2YXIgbm9ybWFsaXplZFByb2ZpbGVEYXRhID0gZnJKYXZhLkpzb25WYWx1ZS5qc29uKGZySmF2YS5Kc29uVmFsdWUub2JqZWN0KCkpOwogIAogICAgICAvL2xvZ2dlci5tZXNzYWdlKCdTZWd1aW4gcmF3UHJvZmlsZTogJytyYXdQcm9maWxlKTsKCiAgICBub3JtYWxpemVkUHJvZmlsZURhdGEucHV0KCdpZCcsIHJhd1Byb2ZpbGUuZ2V0KCdzdWInKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2Rpc3BsYXlOYW1lJywgcmF3UHJvZmlsZS5nZXQoJ2dpdmVuTmFtZScpLmFzU3RyaW5nKCkgKyAnICcgKyByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2VtYWlsJywgcmF3UHJvZmlsZS5nZXQoJ21haWwnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2dpdmVuTmFtZScsIHJhd1Byb2ZpbGUuZ2V0KCdnaXZlbk5hbWUnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2ZhbWlseU5hbWUnLCByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ3VzZXJuYW1lJywgcmF3UHJvZmlsZS5nZXQoJ3VwbicpLmFzU3RyaW5nKCkpOwogICAgbm9ybWFsaXplZFByb2ZpbGVEYXRhLnB1dCgncm9sZXMnLCByYXdQcm9maWxlLmdldCgncm9sZXMnKS5hc1N0cmluZygpKTsKICAKICAgICAgLy9sb2dnZXIubWVzc2FnZSgnU2VndWluIG5vcm1hbGl6ZWRQcm9maWxlRGF0YTogJytub3JtYWxpemVkUHJvZmlsZURhdGEpOwoKICAgIHJldHVybiBub3JtYWxpemVkUHJvZmlsZURhdGE7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"400e48ba-3f13-4144-ac7b-f824ea8e98c5\",\"name\":\"OAuth2 JWT Issuer Script\",\"description\":\"Default global script for scripted JWT Issuers\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgdG8gZGVyaXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIGR5bmFtaWMgSldUIGlzc3VlciBmcm9tIHRoZSBpc3N1ZXIgc3RyaW5nLgogKiBBIEpXVCBpc3N1ZXIgaXMgbWFkZSB1cCBvZiB0aGUgZm9sbG93aW5nOgogKiAgIC0gaXNzdWVyIC0gdGhlIGlkZW50aWZpZXIgb2YgdGhlIGVudGl0eSB0aGF0IGlzc3VlcyBKV1RzCiAqICAgLSByZXNvdXJjZSBvd25lciBzdWJqZWN0IGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCBpZGVudGlmaWVzIHRoZSByZXNvdXJjZSBvd25lcgogKiAgIC0gY29uc2VudGVkIHNjb3BlIGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCByZXByZXNlbnRzIHNjb3BlIHRoYXQgdGhlIHJlc291cmNlIG93bmVyCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYWxyZWFkeSBjb25zZW50ZWQgdG8gZXh0ZXJuYWxseQogKiAgIC0gYXV0aG9yaXplZCBzdWJqZWN0cyAtIHRoZSBzZXQgb2YgcHJpbmNpcGFsIGlkZW50aWZpZXJzIHRoYXQgYXJlIGF1dGhvcml6ZWQgdG8gYmUgdXNlZCBhcyByZXNvdXJjZSBvd25lcnMKICogICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgaXNzdWVyCiAqICAgLSBKV0tzIC0gZWl0aGVyIGEgc2V0IG9mIEpXS3Mgb3IgY29ubmVjdGlvbiBkZXRhaWxzIGZvciBvYnRhaW5pbmcgdGhhdCBzZXQsIHRoYXQgYXJlIHRoZSBwdWJsaWMga2V5cyB0aGF0CiAqICAgICAgICAgICAgY2FuIHZlcmlmeSB0aGUgc2lnbmF0dXJlIG9uIHRoZSBpc3N1ZWQgSldUcy4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIGlzc3VlciAtIFN0cmluZwogKiAgICAgICAgICBUaGUgaXNzdWVyIGZyb20gdGhlIGJlYXJlciBKV1QuCiAqIHJlYWxtIC0gU3RyaW5nCiAqICAgICAgICAgVGhlIHBhdGggb2YgdGhlIHJlYWxtIHRoYXQgaXMgaGFuZGxpbmcgdGhlIHJlcXVlc3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIHNjcmlwdCBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5PQVVUSDJfU0NSSVBURURfSldUX0lTU1VFUi4KICogaHR0cENsaWVudCAtIEhUVFAgQ2xpZW50ICgxKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgSFRUUCBDbGllbnQgaW5zdGFuY2U6CiAqICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC4KICogaWRSZXBvc2l0b3J5IC0gSWRlbnRpdHkgUmVwb3NpdG9yeSAoMikuIEFsd2F5cyBwcmVzZW50LgogKiBzZWNyZXRzIC0gU2VjcmV0cyBhY2Nlc3NvciAoMykuIEFsd2F5cyBwcmVzZW50LgogKgogKiBSZXR1cm4gLSBvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLlRydXN0ZWRKd3RJc3N1ZXJDb25maWcgKDQpIC0gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRydXN0ZWQgSldUIGlzc3Vlci4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgyKSBTY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuYW0vc2NyaXB0aW5nL2FwaS9pZGVudGl0eS9TY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeS5odG1sLgogKiAoMykgU2NyaXB0ZWRTZWNyZXRzIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5hbS9zY3JpcHRpbmcvYXBpL3NlY3JldHMvU2NyaXB0ZWRTZWNyZXRzLmh0bWwuCiAqICg0KSBUcnVzdGVkSnd0SXNzdWVyQ29uZmlnIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1RydXN0ZWRKd3RJc3N1ZXJDb25maWcuaHRtbC4KICovCgovKiBFWEFNUExFCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVHJ1c3RlZEp3dElzc3VlckNvbmZpZywKICAgICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbnMKICAgICk7CgogICAgdmFyIGlzcyA9IGlkUmVwb3NpdG9yeS5nZXRJZGVudGl0eShpc3N1ZXIpOwogICAgaWYgKGlzcyA9PSBudWxsKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoJ05vIGlzc3VlciBmb3VuZCBmb3I6ICcraXNzdWVyKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGxvZ2dlci5tZXNzYWdlKCdGb3VuZCBpc3N1ZXI6ICcraXNzKTsKICAgIC8vIGluIHRoaXMgZXhhbXBsZSBlaXRoZXIgYSBKV0sgc2V0IG9yIGEgVVJJIHRvIGEgSldLIHNldCBhcmUgaW4gdGhlIHBvc3RhbEFkZHJlc3MgYXR0cmlidXRlCiAgICB2YXIgandrc0F0dHJzID0gaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygncG9zdGFsQWRkcmVzcycpOwogICAgdmFyIGp3a1NldCA9IGp3a3NBdHRycy5sZW5ndGggPT09IDAgPyBudWxsIDogandrc0F0dHJzWzBdOwogICAgdmFyIGNvbmZpZyA9IG5ldyBmckphdmEuVHJ1c3RlZEp3dElzc3VlckNvbmZpZygKICAgICAgICBpc3N1ZXIsCiAgICAgICAgJ3N1YicsCiAgICAgICAgJ3Njb3BlJywKICAgICAgICAvLyBpbiB0aGlzIGV4YW1wbGUsIHZhbGlkIHN1YmplY3RzIGFyZSBzdG9yZWQgaW4gdGhlIG1haWwgYXR0cmlidXRlCiAgICAgICAgaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygnbWFpbCcpLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCd7JykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCdodHRwJykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgICc1IG1pbnV0ZXMnLAogICAgICAgICcxIG1pbnV0ZScKICAgICk7CiAgICByZXR1cm4gY29uZmlnOwp9KCkpOwoqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_SCRIPTED_JWT_ISSUER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"59f84396-71e4-4c1d-a6ae-c4fc624d9752\",\"name\":\"Test-Script-1\",\"description\":\"A test script that uses an environment variable and a secret variable\",\"script\":\"Ly8gQ2FsY3VsYXRlIEU9bWNeMiB1c2luZyBtID0gNDIKY29uc3QgYzIgPSBzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi50ZXN0LnZhcmlhYmxlLmxpZ2h0Iik7CmNvbnNvbGUubG9nKGBFID0gJHs0MiAqIGMyICogYzJ9YCk7Ci8vIENhbGN1bGF0ZSB0aGUgYXJlYSBvZiBhIGNpcmNsZSB3aXRoIHJhZGl1cyByID0gNDIKY29uc3QgcGkgPSBwYXJzZUZsb2F0KHN5c3RlbUVudi5nZXRQcm9wZXJ0eSgiZXN2LnRlc3Quc2VjcmV0LnBpIikpOwpjb25zb2xlLmxvZyhgQSA9ICR7cGkgKiA0MiAqIDQyfWApOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"248b8a56-df81-4b1b-b4ba-45d994f6504c\",\"name\":\"SAML2 IDP Adapter Script\",\"description\":\"Default global script for SAML2 IDP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9TQU1MMklkZW50aXR5UHJvdmlkZXJBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBJZHBBZGFwdGVyU2NyaXB0SGVscGVyICgxKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgSWRwQWRhcHRlclNjcmlwdEhlbHBlciBjb250YWluaW5nIGhlbHBlciBtZXRob2RzLiBTZWUgSmF2YWRvYyBmb3IgbW9yZSBkZXRhaWxzLgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgyKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDMpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDQpCiAqICAgICBUaGUgb3JpZ2luYWwgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IGZyb20gU1AKICogcmVxSWQgLSBTdHJpbmcKICogICAgIFRoZSBpZCB0byB1c2UgZm9yIGNvbnRpbnVhdGlvbiBvZiBwcm9jZXNzaW5nIGlmIHRoZSBhZGFwdGVyIHJlZGlyZWN0cwogKiByZXMgLSBSZXNwb25zZSAoNSkKICogICAgIFRoZSBTQU1MIFJlc3BvbnNlCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNikKICogICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLiBUaGUgcmVmZXJlbmNlIHR5cGUgb2YgdGhpcyBpcyBPYmplY3QgYW5kIHdvdWxkIG5lZWQgdG8gYmUgY2FzdGVkIHRvIFNTT1Rva2VuLgogKiByZWxheVN0YXRlIC0gU3RyaW5nCiAqICAgICBUaGUgcmVsYXlTdGF0ZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgcmVkaXJlY3QKICogZmF1bHRDb2RlIC0gU3RyaW5nCiAqICAgICB0aGUgZmF1bHQgY29kZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogZmF1bHREZXRhaWwgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBkZXRhaWwgdGhhdCB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBTQU1MIHJlc3BvbnNlCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwuCiAqICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuPHNjcmlwdCBuYW1lPgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb24gKDcpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL0F1dGhuUmVxdWVzdC5odG1sLgogKiAoNSkgUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvUmVzcG9uc2UuaHRtbC4KICogKDYpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBJRFAgQWRhcHRlciBzY3JpcHRlZCBwbHVnaW4uCiAqLwoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2luZ2xlU2lnbk9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlU2lnbk9uICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlQXV0aGVudGljYXRpb246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVBdXRoZW50aWNhdGlvbiAoKSB7CiAgICByZXR1cm4gZmFsc2U7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNlbmRSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgcmVxSWQKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIGJyb3dzZXIgcmVkaXJlY3Rpb24gaGFwcGVuZWQgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2VuZFJlc3BvbnNlICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2lnblJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIHJlcwogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTaWduUmVzcG9uc2UgKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgZmF1bHRDb2RlCiAqICAgICBmYXVsdERldGFpbAogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlICgpIHsKfQ==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e232cff3-2460-47cd-80b2-36c86c0d0f06\",\"name\":\"Alpha endUserUIClient OAuth2 Access Token Modification Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBpZiAoc2NvcGVzLmNvbnRhaW5zKCdmcjphdXRvYWNjZXNzOionKSB8fCBzY29wZXMuY29udGFpbnMoJ2ZyOmlnYToqJykgfHwgc2NvcGVzLmNvbnRhaW5zKCdmcjppZGM6YW5hbHl0aWNzOionKSkgewogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBjb20uc3VuLmlkZW50aXR5LmlkbS5JZFR5cGUKICAgICk7CiAgICB2YXIgZ3JvdXBzID0gW107CiAgICBpZGVudGl0eS5nZXRNZW1iZXJzaGlwcyhmci5JZFR5cGUuR1JPVVApLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkgewogICAgICBncm91cHMucHVzaChncm91cC5nZXRBdHRyaWJ1dGUoJ2NuJykudG9BcnJheSgpWzBdKTsKICAgIH0pOwogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ2dyb3VwcycsIGdyb3Vwcyk7CiAgfQp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"743351b3-001a-4ec8-b3ac-a674ddb8de22\",\"name\":\"UOP Enrich Session\",\"description\":\"Enrich user session with UOP class ID.\",\"script\":\"LyogVU9QIEVucmljaCBTZXNzaW9uCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIEFkZCBjdXJyZW50IGNsYXNzIElEIHRvIHVzZXIgc2Vzc2lvbi4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuIAogKiBJdCByZXF1aXJlcyB0aGUgSWRlbnRpZnkgRXhpc3RpbmcgVXNlciBub2RlIGJlZm9yZSBpdCBpcyBiZWluZyBjYWxsZWQuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAtIGZhbHNlCiAqLwpsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBzdGFydCIpOwpvdXRjb21lID0gImZhbHNlIjsKCmlmIChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBnb2luZyB0byBlbnJpY2ggc2Vzc2lvbiB3aXRoIGNsYXNzIGlkOiAiLmNvbmNhdChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpKTsKICAKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaQogICAgKTsKCiAgICB3aXRoIChmcikgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJVT1AgRW5yaWNoIFNlc3Npb246IEVuZCAob3V0Y29tZT0iLmNvbmNhdChvdXRjb21lKS5jb25jYXQoIikiKSk7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8ob3V0Y29tZSkucHV0U2Vzc2lvblByb3BlcnR5KCJVT1BDbGFzc0lEIiwgc2hhcmVkU3RhdGUuZ2V0KCJ1b3BDdXJyZW50Q2xhc3NJRCIpKS5idWlsZCgpOwogICAgfQogIAp9IGVsc2UgewogICAgbG9nZ2VyLmVycm9yKCJVT1AgRW5yaWNoIFNlc3Npb246IG5vIGNsYXNzZXMhIik7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBFbmQgKG91dGNvbWU9Ii5jb25jYXQob3V0Y29tZSkuY29uY2F0KCIpIikpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"484e6246-dbc6-4288-97e6-54e55431402e\",\"name\":\"Apple Profile Normalization\",\"description\":\"Normalizes raw profile data from Apple\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICoKICogSW4gc29tZSBjb21tb24gZGVmYXVsdCBjb25maWd1cmF0aW9ucywgdGhlIGZvbGxvd2luZyBrZXlzIGFyZSByZXF1aXJlZCB0byBiZSBub3QgZW1wdHk6CiAqIHVzZXJuYW1lLCBnaXZlbk5hbWUsIGZhbWlseU5hbWUsIGVtYWlsLgogKgogKiBGcm9tIFJGQzQ1MTc6IEEgdmFsdWUgb2YgdGhlIERpcmVjdG9yeSBTdHJpbmcgc3ludGF4IGlzIGEgc3RyaW5nIG9mIG9uZSBvciBtb3JlCiAqIGFyYml0cmFyeSBjaGFyYWN0ZXJzIGZyb20gdGhlIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0IChVQ1MpLgogKiBBIHplcm8tbGVuZ3RoIGNoYXJhY3RlciBzdHJpbmcgaXMgbm90IHBlcm1pdHRlZC4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKU3RyaW5nIGVtYWlsID0gImNoYW5nZUBtZS5jb20iClN0cmluZyBzdWJqZWN0SWQgPSByYXdQcm9maWxlLnN1YgpTdHJpbmcgZmlyc3ROYW1lID0gIiAiClN0cmluZyBsYXN0TmFtZSA9ICIgIgpTdHJpbmcgdXNlcm5hbWUgPSBzdWJqZWN0SWQKU3RyaW5nIG5hbWUKCmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgiZW1haWwiKSAmJiByYXdQcm9maWxlLmVtYWlsLmlzTm90TnVsbCgpKXsgLy8gVXNlciBjYW4gZWxlY3QgdG8gbm90IHNoYXJlIHRoZWlyIGVtYWlsCiAgICBlbWFpbCA9IHJhd1Byb2ZpbGUuZW1haWwuYXNTdHJpbmcoKQogICAgdXNlcm5hbWUgPSBlbWFpbAp9CmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgibmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5pc05vdE51bGwoKSkgewogICAgaWYgKHJhd1Byb2ZpbGUubmFtZS5pc0RlZmluZWQoImZpcnN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5maXJzdE5hbWUuaXNOb3ROdWxsKCkpIHsKICAgICAgICBmaXJzdE5hbWUgPSByYXdQcm9maWxlLm5hbWUuZmlyc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KICAgIGlmIChyYXdQcm9maWxlLm5hbWUuaXNEZWZpbmVkKCJsYXN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5sYXN0TmFtZS5pc05vdE51bGwoKSkgewogICAgICAgIGxhc3ROYW1lID0gcmF3UHJvZmlsZS5uYW1lLmxhc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KfQoKbmFtZSA9IChmaXJzdE5hbWU/LnRyaW0oKSA/IGZpcnN0TmFtZSA6ICIiKSArIChsYXN0TmFtZT8udHJpbSgpID8gKChmaXJzdE5hbWU/LnRyaW0oKSA/ICIgIiA6ICIiKSArIGxhc3ROYW1lKSA6ICIiKQpuYW1lID0gICghbmFtZT8udHJpbSgpKSA/ICIgIiA6IG5hbWUKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCBzdWJqZWN0SWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIG5hbWUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIGVtYWlsKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgZmlyc3ROYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIGxhc3ROYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCB1c2VybmFtZSkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":59,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 464939, + "text": "{\"result\":[{\"_id\":\"703dab1a-1921-4981-98dd-b8e5349d8548\",\"name\":\"Device Id (Match) - Server Side\",\"description\":\"Default global script for server side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAyMyBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIFNjYWxhckNvbXBhcmF0b3IgPSB7fSwgU2NyZWVuQ29tcGFyYXRvciA9IHt9LCBNdWx0aVZhbHVlQ29tcGFyYXRvciA9IHt9LCBVc2VyQWdlbnRDb21wYXJhdG9yID0ge30sIEdlb2xvY2F0aW9uQ29tcGFyYXRvciA9IHt9OwoKdmFyIGNvbmZpZyA9IHsKICAgIHByb2ZpbGVFeHBpcmF0aW9uOiAzMCwgICAgICAgICAgICAgIC8vaW4gZGF5cwogICAgbWF4UHJvZmlsZXNBbGxvd2VkOiA1LAogICAgbWF4UGVuYWx0eVBvaW50czogMCwKICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBzY3JlZW46IHsKICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICAgIGNvbXBhcmF0b3I6IFNjcmVlbkNvbXBhcmF0b3IsCiAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDUwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHBsdWdpbnM6IHsKICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2luczogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmb250czogewogICAgICAgICAgICBpbnN0YWxsZWRGb250czogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogU2NhbGFyQ29tcGFyYXRvciwKICAgICAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdXNlckFnZW50OiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgICBjb21wYXJhdG9yOiBVc2VyQWdlbnRDb21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBpZ25vcmVWZXJzaW9uOiB0cnVlLAogICAgICAgICAgICAgICAgcGVuYWx0eVBvaW50czogMTAwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdlb2xvY2F0aW9uOiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSwKICAgICAgICAgICAgY29tcGFyYXRvcjogR2VvbG9jYXRpb25Db21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBhbGxvd2VkUmFuZ2U6IDEwMCwgICAgICAgICAgICAvL2luIG1pbGVzCiAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJhdG9yIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCgp2YXIgYWxsLCBhbnksIGNhbGN1bGF0ZURpc3RhbmNlLCBjYWxjdWxhdGVJbnRlcnNlY3Rpb24sIGNhbGN1bGF0ZVBlcmNlbnRhZ2UsIG51bGxPclVuZGVmaW5lZCwgc3BsaXRBbmRUcmltLAogICAgdW5kZWZpbmVkTG9jYXRpb247CgovLyBDb21wYXJpc29uUmVzdWx0CgovKioKICogQ29uc3RydWN0cyBhbiBpbnN0YW5jZSBvZiBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gcGVuYWx0eSBwb2ludHMuCiAqCiAqIEBwYXJhbSBwZW5hbHR5UG9pbnRzIChOdW1iZXIpIFRoZSBwZW5hbHR5IHBvaW50cyBmb3IgdGhlIGNvbXBhcmlzb24gKGRlZmF1bHRzIHRvIDApLgogKiBAcGFyYW0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSAoYm9vbGVhbikgV2hldGhlciB0aGUgY3VycmVudCB2YWx1ZSBjb250YWlucyBtb3JlIGluZm9ybWF0aW9uCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIHRoZSBzdG9yZWQgdmFsdWUgKGRlZmF1bHRzIHRvIGZhbHNlKS4KICovCmZ1bmN0aW9uIENvbXBhcmlzb25SZXN1bHQoKSB7CgogICAgdmFyIHBlbmFsdHlQb2ludHMgPSAwLAogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBmYWxzZTsKCiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQpIHsKICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBhcmd1bWVudHNbMV07CiAgICB9CgogICAgaWYgKGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkICYmIGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgaWYgKHR5cGVvZihhcmd1bWVudHNbMF0pID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSA9IGFyZ3VtZW50c1swXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIH0KICAgIH0KCiAgICB0aGlzLnBlbmFsdHlQb2ludHMgPSBwZW5hbHR5UG9pbnRzOwogICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZTsKCn0KCkNvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUyA9IG5ldyBDb21wYXJpc29uUmVzdWx0KDApOwoKLyoqCiAqIFN0YXRpYyBtZXRob2QgZm9yIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcuCiAqCiAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkuCiAqLwpDb21wYXJpc29uUmVzdWx0LmlzU3VjY2Vzc2Z1bCA9ICBmdW5jdGlvbihjb21wYXJpc29uUmVzdWx0KSB7CiAgICByZXR1cm4gY29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKTsKfTsKCgovKioKICogU3RhdGljIG1ldGhvZCBmb3IgZnVuY3Rpb25hbCBwcm9ncmFtbWluZy4KICoKICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gIGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHJldHVybiBjb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU7Cn07CgovKioKICogQ29tcGFyaXNvbiBmdW5jdGlvbiB0aGF0IGNhbiBiZSBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCB0byBhcnJheS5zb3J0CiAqLwpDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUgPSBmdW5jdGlvbihmaXJzdCwgc2Vjb25kKSB7CiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGZpcnN0KSAmJiBudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAwOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoZmlyc3QpKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAxOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoZmlyc3QucGVuYWx0eVBvaW50cyAhPT0gc2Vjb25kLnBlbmFsdHlQb2ludHMpIHsKICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnBlbmFsdHlQb2ludHMgLSBzZWNvbmQucGVuYWx0eVBvaW50czsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gKGZpcnN0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCkgLSAoc2Vjb25kLmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCk7CiAgICAgICAgfQogICAgfQp9OwoKLyoqCiAqIEFtYWxnYW1hdGVzIHRoZSBnaXZlbiBDb21wYXJpc29uUmVzdWx0IGludG8gdGhpcyBDb21wYXJpc29uUmVzdWx0LgogKgogKiBAcGFyYW0gY29tcGFyaXNvblJlc3VsdCBUaGUgQ29tcGFyaXNvblJlc3VsdCB0byBpbmNsdWRlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5wcm90b3R5cGUuYWRkQ29tcGFyaXNvblJlc3VsdCA9IGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHRoaXMucGVuYWx0eVBvaW50cyArPSBjb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHM7CiAgICBpZiAoY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKSB7CiAgICAgICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlOwogICAgfQp9OwoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBubyBwZW5hbHR5IHBvaW50cyBoYXZlIGJlZW4gYXNzaWduZWQgZm9yIHRoZSBjb21wYXJpc29uLgogKgogKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgY29tcGFyaXNvbiB3YXMgc3VjY2Vzc2Z1bC4KICovCkNvbXBhcmlzb25SZXN1bHQucHJvdG90eXBlLmlzU3VjY2Vzc2Z1bCA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZCh0aGlzLnBlbmFsdHlQb2ludHMpIHx8IHRoaXMucGVuYWx0eVBvaW50cyA9PT0gMDsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gc2ltcGxlIG9iamVjdHMgKFN0cmluZ3xOdW1iZXIpIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybwogKiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIGN1cnJlbnQgdmFsdWUuCiAqIEBwYXJhbSBzdG9yZWRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIHN0b3JlZCB2YWx1ZS4KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0LgogKi8KU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlID0gZnVuY3Rpb24gKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUsIGNvbmZpZykgewogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlN0cmluZ0NvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOnN0b3JlZFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoc3RvcmVkVmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOmNvbmZpZzogIiArIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpOwogICAgfQogICAgaWYgKGNvbmZpZy5wZW5hbHR5UG9pbnRzID09PSAwKSB7CiAgICAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUzsKICAgIH0KCiAgICBpZiAoIW51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgfHwgY3VycmVudFZhbHVlICE9PSBzdG9yZWRWYWx1ZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoIW51bGxPclVuZGVmaW5lZChjdXJyZW50VmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KHRydWUpOwogICAgfQoKICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7Cn07CgovKioKICogQ29tcGFyZXMgdHdvIHNjcmVlbnMgYW5kIGlmIHRoZXkgYXJlIGVxdWFsIHRoZW4gcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB6ZXJvIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLAogKiBvdGhlcndpc2UgcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiB7CiAqICAgICAgICAgICAgInNjcmVlbldpZHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBoZWlnaHQuCiAqICAgICAgICAgICAgInNjcmVlbkNvbG91ckRlcHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBjb2xvdXIgZGVwdGguCiAqICAgICAgICB9CiAqIEBwYXJhbSBzdG9yZWRWYWx1ZTogewogKiAgICAgICAgICAgICJzY3JlZW5XaWR0aCI6IChOdW1iZXIpIFRoZSBzdG9yZWQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIHN0b3JlZCBjbGllbnQgc2NyZWVuIGhlaWdodC4KICogICAgICAgICAgICAic2NyZWVuQ29sb3VyRGVwdGgiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGNsaWVudCBzY3JlZW4gY29sb3VyIGRlcHRoLgogKiAgICAgICAgfQogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgInBlbmFsdHlQb2ludHMiOiAoTnVtYmVyKSBUaGUgbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzLgogKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovClNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTY3JlZW5Db21wYXJhdG9yLmNvbXBhcmU6Y3VycmVudFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICBjdXJyZW50VmFsdWUgPSB7c2NyZWVuV2lkdGg6IG51bGwsIHNjcmVlbkhlaWdodDogbnVsbCwgc2NyZWVuQ29sb3VyRGVwdGg6IG51bGx9OwogICAgfQogICAgaWYgKG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBzdG9yZWRWYWx1ZSA9IHtzY3JlZW5XaWR0aDogbnVsbCwgc2NyZWVuSGVpZ2h0OiBudWxsLCBzY3JlZW5Db2xvdXJEZXB0aDogbnVsbH07CiAgICB9CgogICAgdmFyIGNvbXBhcmlzb25SZXN1bHRzID0gWwogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuV2lkdGgsIHN0b3JlZFZhbHVlLnNjcmVlbldpZHRoLCBjb25maWcpLAogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuSGVpZ2h0LCBzdG9yZWRWYWx1ZS5zY3JlZW5IZWlnaHQsIGNvbmZpZyksCiAgICAgICAgU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlKGN1cnJlbnRWYWx1ZS5zY3JlZW5Db2xvdXJEZXB0aCwgc3RvcmVkVmFsdWUuc2NyZWVuQ29sb3VyRGVwdGgsIGNvbmZpZyldOwoKICAgIGlmIChhbGwoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKSkgewogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChhbnkoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSkpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgfQp9OwoKLyoqCiAqIFNwbGl0cyBib3RoIHZhbHVlcyB1c2luZyBkZWxpbWl0ZXIsIHRyaW1zIGV2ZXJ5IHZhbHVlIGFuZCBjb21wYXJlcyBjb2xsZWN0aW9ucyBvZiB2YWx1ZXMuCiAqIFJldHVybnMgemVyby1yZXN1bHQgZm9yIHNhbWUgbXVsdGktdmFsdWUgYXR0cmlidXRlcy4KICoKICogSWYgY29sbGVjdGlvbnMgYXJlIG5vdCBzYW1lIGNoZWNrcyBpZiBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaXMgbGVzcyBvciBlcXVhbCBtYXhEaWZmZXJlbmNlcyBvcgogKiBwZXJjZW50YWdlIG9mIGRpZmZlcmVuY2UgaXMgbGVzcyBvciBlcXVhbCBtYXhQZXJjZW50YWdlRGlmZmVyZW5jZS4KICoKICogSWYgeWVzIHRoZW4gcmV0dXJucyB6ZXJvLXJlc3VsdCB3aXRoIGFkZGl0aW9uYWwgaW5mbywgZWxzZSByZXR1cm5zIHBlbmFsdHlQb2ludHMtcmVzdWx0LgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlOiAoU3RyaW5nKSBUaGUgc3RvcmVkIHZhbHVlLgogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgIm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlIjogKE51bWJlcikgVGhlIG1heCBkaWZmZXJlbmNlIHBlcmNlbnRhZ2UgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgaXMgYXNzaWduZWQuCiAqICAgICAgICAgICAgIm1heERpZmZlcmVuY2VzIjogKE51bWJlcikgVGhlIG1heCBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgcG9pbnRzIGFyZSBhc3NpZ25lZC4KICogICAgICAgICAgICAicGVuYWx0eVBvaW50cyI6IChOdW1iZXIpIFRoZSBudW1iZXIgb2YgcGVuYWx0eSBwb2ludHMuCiAgKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovCk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgdmFyIGRlbGltaXRlciA9ICI7IiwKICAgICAgICBjdXJyZW50VmFsdWVzID0gc3BsaXRBbmRUcmltKGN1cnJlbnRWYWx1ZSwgZGVsaW1pdGVyKSwKICAgICAgICBzdG9yZWRWYWx1ZXMgPSBzcGxpdEFuZFRyaW0oc3RvcmVkVmFsdWUsIGRlbGltaXRlciksCiAgICAgICAgbWF4TnVtYmVyT2ZFbGVtZW50cyA9IE1hdGgubWF4KGN1cnJlbnRWYWx1ZXMubGVuZ3RoLCBzdG9yZWRWYWx1ZXMubGVuZ3RoKSwKICAgICAgICBudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9IGNhbGN1bGF0ZUludGVyc2VjdGlvbihjdXJyZW50VmFsdWVzLCBzdG9yZWRWYWx1ZXMpLmxlbmd0aCwKICAgICAgICBudW1iZXJPZkRpZmZlcmVuY2VzID0gbWF4TnVtYmVyT2ZFbGVtZW50cyAtIG51bWJlck9mVGhlU2FtZUVsZW1lbnRzLAogICAgICAgIHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzID0gY2FsY3VsYXRlUGVyY2VudGFnZShudW1iZXJPZkRpZmZlcmVuY2VzLCBtYXhOdW1iZXJPZkVsZW1lbnRzKTsKCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKHN0b3JlZFZhbHVlKSAmJiAhbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UobnVtYmVyT2ZUaGVTYW1lRWxlbWVudHMgKyAiIG9mICIgKyBtYXhOdW1iZXJPZkVsZW1lbnRzICsgIiBhcmUgc2FtZSIpOwogICAgfQoKICAgIGlmIChtYXhOdW1iZXJPZkVsZW1lbnRzID09PSAwKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBubyBhdHRyaWJ1dGVzIGZvdW5kIGluIGJvdGggcHJvZmlsZXMiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9PT0gbWF4TnVtYmVyT2ZFbGVtZW50cykgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJJZ25vcmVkIGJlY2F1c2UgYWxsIGF0dHJpYnV0ZXMgYXJlIHNhbWUiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZkRpZmZlcmVuY2VzID4gY29uZmlnLm1heERpZmZlcmVuY2VzKSB7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJXb3VsZCBiZSBpZ25vcmVkIGlmIG5vdCBtb3JlIHRoYW4gIiArIGNvbmZpZy5tYXhEaWZmZXJlbmNlcyArICIgZGlmZmVyZW5jZXMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KCiAgICBpZiAocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgPiBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgKyAiIHBlcmNlbnRzIGFyZSBkaWZmZXJlbnQiKTsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIldvdWxkIGJlIGlnbm9yZWQgaWYgbm90IG1vcmUgdGhhbiAiICsgY29uZmlnLm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlICsgIiBwZXJjZW50Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChjb25maWcucGVuYWx0eVBvaW50cyk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBudW1iZXIgb2YgZGlmZmVyZW5jZXMoIiArIG51bWJlck9mRGlmZmVyZW5jZXMgKyAiKSBub3QgbW9yZSB0aGFuICIKICAgICAgICAgICAgKyBjb25maWcubWF4RGlmZmVyZW5jZXMpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzICsgIiBwZXJjZW50cyBhcmUgZGlmZmVyZW50Iik7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBub3QgbW9yZSB0aGFuICIgKyBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UgKyAiIHBlcmNlbnQiKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdCh0cnVlKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gVXNlciBBZ2VudCBTdHJpbmdzIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybyBwZW5hbHR5CiAqIHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlIChTdHJpbmcpIFRoZSBzdG9yZWQgdmFsdWUuCiAqIEBwYXJhbSBjb25maWc6IHsKICogICAgICAgICAgICAiaWdub3JlVmVyc2lvbiI6IChib29sZWFuKSBJZiB0aGUgdmVyc2lvbiBudW1iZXJzIGluIHRoZSBVc2VyIEFnZW50IFN0cmluZ3Mgc2hvdWxkIGJlIGlnbm9yZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb21wYXJpc29uLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBBIENvbXBhcmlzb25SZXN1bHQuCiAqLwpVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiVXNlckFnZW50Q29tcGFyYXRvci5jb21wYXJlOmN1cnJlbnRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgaWYgKGNvbmZpZy5pZ25vcmVWZXJzaW9uKSB7CiAgICAgICAgLy8gcmVtb3ZlIHZlcnNpb24gbnVtYmVyCiAgICAgICAgY3VycmVudFZhbHVlID0gbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgPyBudWxsIDogY3VycmVudFZhbHVlLnJlcGxhY2UoL1tcZFwuXSsvZywgIiIpLnRyaW0oKTsKICAgICAgICBzdG9yZWRWYWx1ZSA9IG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkgPyBudWxsIDogc3RvcmVkVmFsdWUucmVwbGFjZSgvW1xkXC5dKy9nLCAiIikudHJpbSgpOwogICAgfQoKICAgIHJldHVybiBTY2FsYXJDb21wYXJhdG9yLmNvbXBhcmUoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gbG9jYXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50IGEgZGVncmVlIG9mIGRpZmZlcmVuY2UuCiAqCiAqIEBwYXJhbSBjdXJyZW50VmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgY3VycmVudCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGN1cnJlbnQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcGFyYW0gc3RvcmVkVmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxhdGl0dWRlLgogKiAgICAgICAgICAgICJsb25naXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJhbGxvd2VkUmFuZ2UiOiAoTnVtYmVyKSBUaGUgbWF4IGRpZmZlcmVuY2UgYWxsb3dlZCBpbiB0aGUgdHdvIGxvY2F0aW9ucywgYmVmb3JlIHRoZSBwZW5hbHR5IGlzIGFzc2lnbmVkLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KKiAgICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0CiAqLwpHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiR2VvbG9jYXRpb25Db21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICAvLyBDaGVjayBmb3IgdW5kZWZpbmVkIHN0b3JlZCBvciBjdXJyZW50IGxvY2F0aW9ucwoKICAgIGlmICh1bmRlZmluZWRMb2NhdGlvbihjdXJyZW50VmFsdWUpICYmIHVuZGVmaW5lZExvY2F0aW9uKHN0b3JlZFZhbHVlKSkgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CiAgICBpZiAodW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiAhdW5kZWZpbmVkTG9jYXRpb24oc3RvcmVkVmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KICAgIGlmICghdW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiB1bmRlZmluZWRMb2NhdGlvbihzdG9yZWRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgLy8gQm90aCBsb2NhdGlvbnMgZGVmaW5lZCwgdGhlcmVmb3JlIHBlcmZvcm0gY29tcGFyaXNvbgoKICAgIHZhciBkaXN0YW5jZSA9IGNhbGN1bGF0ZURpc3RhbmNlKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUpOwoKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJEaXN0YW5jZSBiZXR3ZWVuICgiICsgY3VycmVudFZhbHVlLmxhdGl0dWRlICsgIiwiICsgY3VycmVudFZhbHVlLmxvbmdpdHVkZSArICIpIGFuZCAoIiArCiAgICAgICAgICAgIHN0b3JlZFZhbHVlLmxhdGl0dWRlICsgIiwiICsgc3RvcmVkVmFsdWUubG9uZ2l0dWRlICsgIikgaXMgIiArIGRpc3RhbmNlICsgIiBtaWxlcyIpOwogICAgfQoKICAgIGlmIChwYXJzZUZsb2F0KGRpc3RhbmNlLnRvUHJlY2lzaW9uKDUpKSA9PT0gMCkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJMb2NhdGlvbiBpcyB0aGUgc2FtZSIpOwogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CgogICAgaWYgKGRpc3RhbmNlIDw9IGNvbmZpZy5hbGxvd2VkUmFuZ2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlRvbGVyYXRlZCBiZWNhdXNlIGRpc3RhbmNlIG5vdCBtb3JlIHRoZW4gIiArIGNvbmZpZy5hbGxvd2VkUmFuZ2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiV291bGQgYmUgaWdub3JlZCBpZiBkaXN0YW5jZSBub3QgbW9yZSB0aGVuICIgKyBjb25maWcuYWxsb3dlZFJhbmdlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KfTsKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi8vICAgICAgICAgICAgICAgICAgICBEZXZpY2UgUHJpbnQgTG9naWMgLSBETyBOT1QgTU9ESUZZICAgICAgICAgICAgICAgICAgICAgLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwoKLy8gVXRpbGl0eSBmdW5jdGlvbnMKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgZXZhbHVhdGluZyBmdW5jdGlvbiBmIG9uIGVhY2ggZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYWxsID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn07CgovKioKICogUmV0dXJucyB0cnVlIGlmIGV2YWx1YXRpbmcgZnVuY3Rpb24gZiBvbiBhbnkgZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYW55ID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGxvY2F0aW9uIGlzIG51bGwgb3IgaGFzIHVuZGVmaW5lZCBsb25naXR1ZGUgb3IgbGF0aXR1ZGUgdmFsdWVzLgogKgogKiBAcGFyYW0gbG9jYXRpb246IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBsb25naXR1ZGUuCiAqICAgICAgICB9CiAqIEByZXR1cm4gYm9vbGVhbgogKi8KdW5kZWZpbmVkTG9jYXRpb24gPSBmdW5jdGlvbihsb2NhdGlvbikgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZChsb2NhdGlvbikgfHwgbnVsbE9yVW5kZWZpbmVkKGxvY2F0aW9uLmxhdGl0dWRlKSB8fCBudWxsT3JVbmRlZmluZWQobG9jYXRpb24ubG9uZ2l0dWRlKTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLgogKgogKiBAcGFyYW0gdmFsdWU6IGEgdmFsdWUgb2YgYW55IHR5cGUKICogQHJldHVybiBib29sZWFuCiAqLwpudWxsT3JVbmRlZmluZWQgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7Cn07CgovKioKICogQ2FsY3VsYXRlcyB0aGUgZGlzdGFuY2VzIGJldHdlZW4gdGhlIHR3byBsb2NhdGlvbnMuCiAqCiAqIEBwYXJhbSBmaXJzdDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBmaXJzdCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGZpcnN0IGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIHNlY29uZDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcmV0dXJuIE51bWJlciBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdHdvIGxvY2F0aW9ucy4KICovCmNhbGN1bGF0ZURpc3RhbmNlID0gZnVuY3Rpb24oZmlyc3QsIHNlY29uZCkgewogICAgdmFyIGZhY3RvciA9IChNYXRoLlBJIC8gMTgwKSwKICAgICAgICB0aGV0YSwKICAgICAgICBkaXN0OwogICAgZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkZWdyZWVzKSB7CiAgICAgICAgcmV0dXJuIGRlZ3JlZXMgKiBmYWN0b3I7CiAgICB9CiAgICBmdW5jdGlvbiByYWRpYW5zVG9EZWdyZWVzKHJhZGlhbnMpIHsKICAgICAgICByZXR1cm4gcmFkaWFucyAvIGZhY3RvcjsKICAgIH0KICAgIHRoZXRhID0gZmlyc3QubG9uZ2l0dWRlIC0gc2Vjb25kLmxvbmdpdHVkZTsKICAgIGRpc3QgPSBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKyBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHRoZXRhKSk7CiAgICBkaXN0ID0gTWF0aC5hY29zKGRpc3QpOwogICAgZGlzdCA9IHJhZGlhbnNUb0RlZ3JlZXMoZGlzdCk7CiAgICBkaXN0ID0gZGlzdCAqIDYwICogMS4xNTE1OwogICAgcmV0dXJuIGRpc3Q7Cn07CgovKioKICogQ29udmVydHMgYSBTdHJpbmcgaG9sZGluZyBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMgaW50byBhbiBhcnJheS4KICoKICogQHBhcmFtIHRleHQgKFN0cmluZykgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMuCiAqIEBwYXJhbSBkZWxpbWl0ZXIgKFN0cmluZykgVGhlIGNoYXJhY3RlciBkZWxpbWl0aW5nIHZhbHVlcyB3aXRoaW4gdGhlIHRleHQgU3RyaW5nLgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMuCiAqLwpzcGxpdEFuZFRyaW0gPSBmdW5jdGlvbih0ZXh0LCBkZWxpbWl0ZXIpIHsKCiAgICB2YXIgcmVzdWx0cyA9IFtdLAogICAgICAgIGksCiAgICAgICAgdmFsdWVzLAogICAgICAgIHZhbHVlOwogICAgaWYgKHRleHQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KCiAgICB2YWx1ZXMgPSB0ZXh0LnNwbGl0KGRlbGltaXRlcik7CiAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFsdWUgPSB2YWx1ZXNbaV0udHJpbSgpOwogICAgICAgIGlmICh2YWx1ZSAhPT0gIiIpIHsKICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdHM7Cn07CgovKioKICogQ29udmVydHMgdmFsdWUgdG8gYSBwZXJjZW50YWdlIG9mIHJhbmdlLgogKgogKiBAcGFyYW0gdmFsdWUgKE51bWJlcikgVGhlIGFjdHVhbCBudW1iZXIgdG8gYmUgY29udmVydGVkIHRvIGEgcGVyY2VudGFnZS4KICogQHBhcmFtIHJhbmdlIChOdW1iZXIpIFRoZSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzIChpLmUuIHJlcHJlc2VudHMgMTAwJSkuCiAqIEByZXR1cm4gKE51bWJlcikgVGhlIHBlcmNlbnRhZ2UuCiAqLwpjYWxjdWxhdGVQZXJjZW50YWdlID0gZnVuY3Rpb24odmFsdWUsIHJhbmdlKSB7CiAgICBpZiAocmFuZ2UgPT09IDApIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBwYXJzZUZsb2F0KCh2YWx1ZSAvIHJhbmdlKS50b1ByZWNpc2lvbigyKSkgKiAxMDA7Cn07CgovKioKICogQ3JlYXRlcyBhIG5ldyBhcnJheSBjb250YWluaW5nIG9ubHkgdGhvc2UgZWxlbWVudHMgZm91bmQgaW4gYm90aCBhcnJheXMgcmVjZWl2ZWQgYXMgYXJndW1lbnRzLgogKgogKiBAcGFyYW0gZmlyc3QgKEFycmF5KSBUaGUgZmlyc3QgYXJyYXkuCiAqIEBwYXJhbSBzZWNvbmQgKEFycmF5KSBUaGUgc2Vjb25kIGFycmF5LgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGVsZW1lbnRzIHRoYXQgZm91bmQgaW4gZmlyc3QgYW5kIHNlY29uZC4KICovCmNhbGN1bGF0ZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGZpcnN0LCBzZWNvbmQpIHsKICAgIHJldHVybiBmaXJzdC5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgIHJldHVybiBzZWNvbmQuaW5kZXhPZihlbGVtZW50KSAhPT0gLTE7CiAgICB9KTsKfTsKCmZ1bmN0aW9uIGdldFZhbHVlKG9iaiwgYXR0cmlidXRlUGF0aCkgewogICAgdmFyIHZhbHVlID0gb2JqLAogICAgICAgIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cmlidXRlUGF0aC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICB2YWx1ZSA9IHZhbHVlW2F0dHJpYnV0ZVBhdGhbaV1dOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwp9CgoKZnVuY3Rpb24gaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWcpIHsKICAgIHJldHVybiBhdHRyaWJ1dGVDb25maWcuY29tcGFyYXRvciAhPT0gdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcsIGF0dHJpYnV0ZVBhdGgpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBbXSwKICAgICAgICBhdHRyaWJ1dGVOYW1lLAogICAgICAgIGF0dHJQYXRocywKICAgICAgICBhdHRyUGF0aCwKICAgICAgICBpOwoKICAgIGZvciAoYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVDb25maWcpIHsKICAgICAgICBpZiAoYXR0cmlidXRlQ29uZmlnLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZU5hbWUpKSB7CgogICAgICAgICAgICBpZiAoaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWdbYXR0cmlidXRlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBhdHRyUGF0aCA9IGF0dHJpYnV0ZVBhdGguc2xpY2UoKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRoLnB1c2goYXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVQYXRocy5wdXNoKGF0dHJQYXRoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJQYXRoID0gYXR0cmlidXRlUGF0aC5zbGljZSgpOwogICAgICAgICAgICAgICAgYXR0clBhdGgucHVzaChhdHRyaWJ1dGVOYW1lKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRocyA9IGdldEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZ1thdHRyaWJ1dGVOYW1lXSwgYXR0clBhdGgpOwogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGF0dHJQYXRocy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVBhdGhzLnB1c2goYXR0clBhdGhzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYXR0cmlidXRlUGF0aHM7Cn0KCmZ1bmN0aW9uIGdldERldmljZVByaW50QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnKSB7CiAgICByZXR1cm4gZ2V0QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnLCBbXSk7Cn0KCmZ1bmN0aW9uIGhhc1JlcXVpcmVkQXR0cmlidXRlcyhkZXZpY2VQcmludCwgYXR0cmlidXRlQ29uZmlnKSB7CgogICAgdmFyIGF0dHJpYnV0ZVBhdGhzID0gZ2V0RGV2aWNlUHJpbnRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcpLAogICAgICAgIGksCiAgICAgICAgYXR0clZhbHVlLAogICAgICAgIGF0dHJDb25maWc7CgogICAgZm9yIChpID0gMDsgaSA8IGF0dHJpYnV0ZVBhdGhzLmxlbmd0aDsgaSsrKSB7CgogICAgICAgIGF0dHJWYWx1ZSA9IGdldFZhbHVlKGRldmljZVByaW50LCBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICBpZiAoYXR0ckNvbmZpZy5yZXF1aXJlZCAmJiBhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBsb2dnZXIud2FybmluZygiRGV2aWNlIFByaW50IHByb2ZpbGUgbWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUsICIgKyBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZSBwcmludCBoYXMgcmVxdWlyZWQgYXR0cmlidXRlcyIpOwogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGF0dHJpYnV0ZUNvbmZpZywgZGV2aWNlUHJpbnQsIGRldmljZVByaW50UHJvZmlsZXMsIG1heFBlbmFsdHlQb2ludHMpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBnZXREZXZpY2VQcmludEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZyksCiAgICAgICAgZGFvID0gc2hhcmVkU3RhdGUuZ2V0KCdfRGV2aWNlSWREYW8nKSwKICAgICAgICByZXN1bHRzLAogICAgICAgIGosCiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQsCiAgICAgICAgaSwKICAgICAgICBjdXJyZW50VmFsdWUsCiAgICAgICAgc3RvcmVkVmFsdWUsCiAgICAgICAgYXR0ckNvbmZpZywKICAgICAgICBjb21wYXJpc29uUmVzdWx0LAogICAgICAgIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICBzZWxlY3RlZFByb2ZpbGUsCiAgICAgICAgY3VyRGV2aWNlUHJpbnRQcm9maWxlLAogICAgICAgIHZhbHM7CgogICAgcmVzdWx0cyA9IFtdOwogICAgZm9yIChqID0gMDsgaiA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBjdXJEZXZpY2VQcmludFByb2ZpbGUgPSBKU09OLnBhcnNlKG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvbihkZXZpY2VQcmludFByb2ZpbGVzW2pdKSk7CiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQgPSBuZXcgQ29tcGFyaXNvblJlc3VsdCgpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdHRyaWJ1dGVQYXRocy5sZW5ndGg7IGkrKykgewoKICAgICAgICAgICAgY3VycmVudFZhbHVlID0gZ2V0VmFsdWUoZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgc3RvcmVkVmFsdWUgPSBnZXRWYWx1ZShjdXJEZXZpY2VQcmludFByb2ZpbGUuZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICAgICAgaWYgKHN0b3JlZFZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb21wYXJpc29uUmVzdWx0ID0gbmV3IENvbXBhcmlzb25SZXN1bHQoYXR0ckNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbXBhcmlzb25SZXN1bHQgPSBhdHRyQ29uZmlnLmNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBhdHRyQ29uZmlnLmFyZ3MpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJDb21wYXJpbmcgYXR0cmlidXRlIHBhdGg6ICIgKyBhdHRyaWJ1dGVQYXRoc1tpXQogICAgICAgICAgICAgICAgICAgICsgIiwgQ29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkgKyAiLCBwZW5hbHR5UG9pbnRzPSIKICAgICAgICAgICAgICAgICAgICArIGNvbXBhcmlzb25SZXN1bHQucGVuYWx0eVBvaW50cyArICIsIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU9IgogICAgICAgICAgICAgICAgICAgICsgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5hZGRDb21wYXJpc29uUmVzdWx0KGNvbXBhcmlzb25SZXN1bHQpOwogICAgICAgIH0KICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIkFnZ3JlZ2F0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKSArICIsIHBlbmFsdHlQb2ludHM9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICAgICArIGFnZ3JlZ2F0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmVzdWx0cy5wdXNoKHsKICAgICAgICAgICAga2V5OiBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICAgICAgdmFsdWU6IGRldmljZVByaW50UHJvZmlsZXNbal0KICAgICAgICB9KTsKICAgIH0KCiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXN1bHRzLnNvcnQoZnVuY3Rpb24oYSwgYikgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUoYS5rZXksIGIua2V5KTsKICAgIH0pOwogICAgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0ID0gcmVzdWx0c1swXS5rZXk7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU2VsZWN0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKQogICAgICAgICAgICArICIsIHBlbmFsdHlQb2ludHM9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgfQoKICAgIHNlbGVjdGVkUHJvZmlsZSA9IG51bGw7CiAgICBpZiAoc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgPD0gbWF4UGVuYWx0eVBvaW50cykgewogICAgICAgIHNlbGVjdGVkUHJvZmlsZSA9IHJlc3VsdHNbMF0udmFsdWU7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTZWxlY3RlZCBwcm9maWxlOiAiICsgc2VsZWN0ZWRQcm9maWxlICsKICAgICAgICAgICAgICAgICIgd2l0aCAiICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgKyAiIHBlbmFsdHkgcG9pbnRzIik7CiAgICAgICAgfQogICAgfQoKICAgIGlmIChzZWxlY3RlZFByb2ZpbGUgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyogdXBkYXRlIHByb2ZpbGUgKi8KICAgIHNlbGVjdGVkUHJvZmlsZS5wdXQoInNlbGVjdGlvbkNvdW50ZXIiLAogICAgICAgIGphdmEubGFuZy5JbnRlZ2VyLnZhbHVlT2YocGFyc2VJbnQoc2VsZWN0ZWRQcm9maWxlLmdldCgic2VsZWN0aW9uQ291bnRlciIpLCAxMCkgKyAxKSk7CiAgICBzZWxlY3RlZFByb2ZpbGUucHV0KCJsYXN0U2VsZWN0ZWREYXRlIiwgamF2YS5sYW5nLkxvbmcudmFsdWVPZihuZXcgRGF0ZSgpLmdldFRpbWUoKSkpOwogICAgc2VsZWN0ZWRQcm9maWxlLnB1dCgiZGV2aWNlUHJpbnQiLCBkZXZpY2VQcmludCk7CgogICAgdmFscyA9IFtdOwogICAgZm9yIChpID0gMDsgaSA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YWxzLnB1c2gob3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uKGRldmljZVByaW50UHJvZmlsZXNbaV0pKTsKICAgIH0KCiAgICBkYW8uc2F2ZURldmljZVByb2ZpbGVzKHVzZXJuYW1lLCByZWFsbSwgdmFscyk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIG1hdGNoRGV2aWNlUHJpbnQoKSB7CgogICAgaWYgKCF1c2VybmFtZSkgewogICAgICAgIGxvZ2dlci5lcnJvcigiVXNlcm5hbWUgbm90IHNldC4gQ2Fubm90IGNvbXBhcmUgdXNlcidzIGRldmljZSBwcmludCBwcm9maWxlcy4iKTsKICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICB9IGVsc2UgewoKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImNsaWVudCBkZXZpY2VQcmludDogIiArIGNsaWVudFNjcmlwdE91dHB1dERhdGEpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGdldFByb2ZpbGVzID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRXhwaXJlZFByb2ZpbGUoZGV2aWNlUHJpbnRQcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cGlyYXRpb25EYXRlID0gbmV3IERhdGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNlbGVjdGVkRGF0ZTsKICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uRGF0ZS5zZXREYXRlKGV4cGlyYXRpb25EYXRlLmdldERhdGUoKSAtIGNvbmZpZy5wcm9maWxlRXhwaXJhdGlvbik7CgogICAgICAgICAgICAgICAgICAgIGxhc3RTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShkZXZpY2VQcmludFByb2ZpbGUubGFzdFNlbGVjdGVkRGF0ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0U2VsZWN0ZWREYXRlIDwgZXhwaXJhdGlvbkRhdGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICBkYW8gPSBzaGFyZWRTdGF0ZS5nZXQoJ19EZXZpY2VJZERhbycpLAogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVzLAogICAgICAgICAgICAgICAgICAgICAgICBpdGVyOwoKICAgICAgICAgICAgICAgICAgICBwcm9maWxlcyA9IGRhby5nZXREZXZpY2VQcm9maWxlcyh1c2VybmFtZSwgcmVhbG0pOwoKICAgICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaXRlciA9IHByb2ZpbGVzLml0ZXJhdG9yKCk7CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgPSBpdGVyLm5leHQoKS5nZXRPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFeHBpcmVkUHJvZmlsZShwcm9maWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChwcm9maWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoInN0b3JlZCBub24tZXhwaXJlZCBwcm9maWxlczogIiArIHJlc3VsdHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRldmljZVByaW50ID0gSlNPTi5wYXJzZShjbGllbnRTY3JpcHRPdXRwdXREYXRhKSwKICAgICAgICAgICAgZGV2aWNlUHJpbnRQcm9maWxlcyA9IGdldFByb2ZpbGVzKCk7CgogICAgICAgIGlmICghaGFzUmVxdWlyZWRBdHRyaWJ1dGVzKGRldmljZVByaW50LCBjb25maWcuYXR0cmlidXRlcykpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZVByaW50Lmhhc1JlcXVpcmVkQXR0cmlidXRlczogZmFsc2UiKTsKICAgICAgICAgICAgLy8gV2lsbCBmYWlsIHRoaXMgbW9kdWxlIGJ1dCBmYWxsLXRocm91Z2ggdG8gbmV4dCBtb2R1bGUuIFdoaWNoIHNob3VsZCBiZSBPVFAuCiAgICAgICAgICAgIGF1dGhTdGF0ZSA9IEZBSUxFRDsKICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGNvbmZpZy5hdHRyaWJ1dGVzLCBkZXZpY2VQcmludCwgZGV2aWNlUHJpbnRQcm9maWxlcywgY29uZmlnLm1heFBlbmFsdHlQb2ludHMpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJkZXZpY2VQcmludC5oYXNWYWxpZFByb2ZpbGU6IHRydWUiKTsKICAgICAgICAgICAgYXV0aFN0YXRlID0gU1VDQ0VTUzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiZGV2aWNlUHJpbnQuaGFzVmFsaWRQcm9maWxlOiBmYWxzZSIpOwogICAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoJ2RldmljZVByaW50UHJvZmlsZScsIEpTT04uc3RyaW5naWZ5KGRldmljZVByaW50KSk7CiAgICAgICAgICAgIC8vIFdpbGwgZmFpbCB0aGlzIG1vZHVsZSBidXQgZmFsbC10aHJvdWdoIHRvIG5leHQgbW9kdWxlLiBXaGljaCBzaG91bGQgYmUgT1RQLgogICAgICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICAgICAgfQogICAgfQp9CgptYXRjaERldmljZVByaW50KCk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"bae52680-c1ea-4a4b-be80-25db364d822a\",\"name\":\"wks-ReadUserName\",\"description\":\"Reading userName from Query Parameter \",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKb3V0Y29tZSA9ICJmYWxzZSI7CmlmIChyZXF1ZXN0UGFyYW1ldGVycy5nZXQoInVzZXJOYW1lIikpIHsKICAgIHZhciB1c2VyTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChyZXF1ZXN0UGFyYW1ldGVycy5nZXQoInVzZXJOYW1lIikuZ2V0KDApKTsKICAgIHZhciBvYmplY3RBdHRyaWJ1dGVzID0gewogICAgICB1c2VyTmFtZTogdXNlck5hbWUKICAgIH0KICBzaGFyZWRTdGF0ZS5wdXQoIm9iamVjdEF0dHJpYnV0ZXMiLCBvYmplY3RBdHRyaWJ1dGVzKTsKICBvdXRjb21lID0gInRydWUiOwp9Ci8qCmlmIChyZXF1ZXN0UGFyYW1ldGVycy5nZXQoImVtYWlsIikpIHsKICAgIHZhciBleHRlcm5hbGVtYWlsID0gcmVxdWVzdFBhcmFtZXRlcnMuZ2V0KCJlbWFpbCIpLmdldCgwKTsKICAgIHZhciBkZWNvZGVkRW1haWwgPSBkZWNvZGVVUklDb21wb25lbnQoZXh0ZXJuYWxlbWFpbCk7CiAgICB2YXIgb2JqZWN0QXR0cmlidXRlcyA9IHsKICAgICAgZnJJbmRleGVkU3RyaW5nNTogZGVjb2RlZEVtYWlsCiAgICB9CiAgc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgb2JqZWN0QXR0cmlidXRlcyk7CiAgb3V0Y29tZSA9ICJ0cnVlIjsKfQoqLwoKCgoK\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"8862ca8f-7770-4af5-a888-ac0df0947f36\",\"name\":\"LinkedIn Profile Normalization\",\"description\":\"Normalizes raw profile data from LinkedIn\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5maXJzdE5hbWUubG9jYWxpemVkLmdldCgwKSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3ROYW1lLmxvY2FsaXplZC5nZXQoMCkpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucHJvZmlsZVBpY3R1cmUuZGlzcGxheUltYWdlKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVsZW1lbnRzLmdldCgwKS5nZXQoImhhbmRsZX4iKS5lbWFpbEFkZHJlc3MpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZWxlbWVudHMuZ2V0KDApLmdldCgiaGFuZGxlfiIpLmVtYWlsQWRkcmVzcykpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"0cc09f53-7183-4829-a93a-1b3308318ba9\",\"name\":\"havePush.js\",\"description\":\"null\",\"script\":\"dmFyIHB1c2hEZXZpY2VQcm9maWxlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKSwgInB1c2hEZXZpY2VQcm9maWxlcyIpOwppZihwdXNoRGV2aWNlUHJvZmlsZXMubGVuPjApIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7Cn0KZWxzZSB7CiAgb3V0Y29tZSA9ICJmYWxzZSI7Cgp9Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3f93ef6e-e54a-4393-aba1-f322656db28a\",\"name\":\"OAuth2 Authorize Endpoint Data Provider Script\",\"description\":\"Default global script for OAuth2 Authorize Endpoint Data Provider\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcmV0dXJuIGFkZGl0aW9uYWwgZGF0YSB3aGVuIGF1dGhvcml6ZSByZXF1ZXN0IGlzIGNhbGxlZC4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LgogKgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cwogKgogKiBsb2dnZXIgLSBEZWJ1ZyAoMykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSAiU2NyaXB0ZWRBdXRob3JpemVFbmRwb2ludERhdGFQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FVVEhPUklaRV9FTkRQT0lOVF9EQVRBX1BST1ZJREVSLgogKgogKiBzY3JpcHROYW1lIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHNjcmlwdAogKgogKiBSZXR1cm4gLSBhIE1hcDxTdHJpbmcsIFN0cmluZz4gb2YgYWRkaXRpb25hbCBkYXRhICg0KS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgzKSBEZWJ1ZyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBhdXRob3JpemUgZW5kcG9pbnQgZGF0YSBwcm92aWRlciBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCi8qIEVYQU1QTEUKdmFyIG1hcCA9IG5ldyBqYXZhLnV0aWwuSGFzaE1hcCgpOwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGEoKSB7CgogICAgLy9JZiBjb25zdGFudCBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkCiAgICBtYXAucHV0KCJoZWxsbyIsICJ3b3JsZCIpOwoKICAgIC8vSWYgc29tZSBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkIGZyb20gdGhpcmQgcGFydHkgc2VydmljZQogICAgYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCk7CgogICAgLy9JZiB0aGVyZSBpcyBhIG5lZWQgdG8gcmV0dXJuIHNvbWUgdXNlciBzZXNzaW9uIGRhdGEKICAgIGFkZEFkZGl0aW9uYWxEYXRhRnJvbVNlc3Npb25Qcm9wZXJ0aWVzKCkKCiAgICByZXR1cm4gbWFwOwp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCkgewogIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLlNlcnZlckV4Y2VwdGlvbgogICAgKTsKICB0cnkgewogICAgICAgIC8vT2J0YWluIGFkZGl0aW9uYWwgZGF0YSBieSBwZXJmb3JtaW5nIGEgUkVTVCBjYWxsIHRvIGFuIGV4dGVybmFsIHNlcnZpY2UKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgICAgIHJlcXVlc3Quc2V0VXJpKCJodHRwczovL3RoaXJkLnBhcnR5LmFwcC9oZWxsby5qc3AiKTsKICAgICAgICByZXF1ZXN0LnNldE1ldGhvZCgiUE9TVCIpOwogICAgICAgIC8vcmVxdWVzdC5zZXRFbnRpdHkoImZvbz1iYXImaGVsbG89d29ybGQiKTsKICAgICAgICByZXF1ZXN0LnNldEVudGl0eShqc29uKG9iamVjdCgKICAgICAgICAgICAgICAgICAgICBmaWVsZCgiZm9vIiwgImJhciIpKSkpOwogICAgICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXRPclRocm93KCk7CiAgICAgICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwogICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICBtYXAucHV0KCJzb21lS2V5IixyZXN1bHQuZ2V0KCJzb21lS2V5IikpOwogIH0gY2F0Y2ggKGVycikgewogICAgIHRocm93IG5ldyBmckphdmEuU2VydmVyRXhjZXB0aW9uKGVycik7CiAgfQp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tU2Vzc2lvblByb3BlcnRpZXMoKSB7CiAgLy9BZGQgYWRkaXRpb25hbCBkYXRhIGZyb20gc2Vzc2lvbiBwcm9wZXJ0eSB2YWx1ZXMKICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeyAvLyBzZXNzaW9uIGlzIG5vdCBhdmFpbGFibGUgZm9yIHJlc291cmNlIG93bmVyIHBhc3N3b3JkIGNyZWRlbnRpYWxzIGdyYW50CiAgICAgbWFwLnB1dCgiaXBBZGRyZXNzIiwgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgiSG9zdCIpKQogICB9Cn07CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKSk7Cn07CgphZGRBZGRpdGlvbmFsRGF0YSgpOwoqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e232cff3-2460-47cd-80b2-36c86c0d0f06\",\"name\":\"Alpha endUserUIClient OAuth2 Access Token Modification Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBpZiAoc2NvcGVzLmNvbnRhaW5zKCdmcjphdXRvYWNjZXNzOionKSB8fCBzY29wZXMuY29udGFpbnMoJ2ZyOmlnYToqJykgfHwgc2NvcGVzLmNvbnRhaW5zKCdmcjppZGM6YW5hbHl0aWNzOionKSkgewogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBjb20uc3VuLmlkZW50aXR5LmlkbS5JZFR5cGUKICAgICk7CiAgICB2YXIgZ3JvdXBzID0gW107CiAgICBpZGVudGl0eS5nZXRNZW1iZXJzaGlwcyhmci5JZFR5cGUuR1JPVVApLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkgewogICAgICBncm91cHMucHVzaChncm91cC5nZXRBdHRyaWJ1dGUoJ2NuJykudG9BcnJheSgpWzBdKTsKICAgIH0pOwogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ2dyb3VwcycsIGdyb3Vwcyk7CiAgfQp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6aa47a41-af3d-4df3-a7a1-b1766cfeaf6b\",\"name\":\"wks-NEO-Twillio\",\"description\":\"null\",\"script\":\"LyoqCiAqIEBmaWxlIFRoaXMgc2NyaXB0IGRlbGl2ZXJzIGEgbWVzc2FnZSB3aXRoIHZhbHVlcyBmcm9tIHNoYXJlZCBzdGF0ZSB2aWEgVHdpbGlvIFNNUywgdXNpbmcgdGhlIGN1cnJlbnQgdXNlcidzIHRlbGVwaG9uZU51bWJlcgogKiBAdmVyc2lvbiAwLjEuMQogKiBAa2V5d29yZHMgc21zIG90cCBtZmEgdHdpbGlvIAogKi8KCi8qKgogKiBFbnZpcm9ubWVudCBzcGVjaWZpYyBUd2lsaW8gY29uZmlnIAogKi8KCnZhciB0d2lsaW9BY2NvdW50U2lkID0gIjxzZWNyZXQ+IjsgICAKdmFyIHR3aWxpb0FwaUtleVNpZCA9ICI8c2VjcmV0PiI7CnZhciB0d2lsaW9BcGlLZXlTZWNyZXQgPSAiPHNlY3JldD4iOwp2YXIgdHdpbGlvTWVzc2FnaW5nU2VydmljZVNpZCA9ICI8c2VjcmV0PiI7CnZhciB0d2lsaW9QaG9uZU51bWJlckZyb20gPSAiPHNlY3JldD4iOyAgICAKCi8qKgogKiBGdWxsIENvbmZpZ3VyYXRpb24gCiAqLwoKdmFyIGNvbmZpZyA9IHsKICAgIGFjY291bnRTaWQ6IHR3aWxpb0FjY291bnRTaWQsICAgIAogICAgYXBpS2V5U2lkOiB0d2lsaW9BcGlLZXlTaWQsCiAgICBhcGlLZXlTZWNyZXQ6IHR3aWxpb0FwaUtleVNlY3JldCwKICAgIHBob25lTnVtYmVyRnJvbTogdHdpbGlvUGhvbmVOdW1iZXJGcm9tLCAKICAgIG1lc3NhZ2luZ1NlcnZpY2VTaWQ6IHR3aWxpb01lc3NhZ2luZ1NlcnZpY2VTaWQsIAogICAgYmFzZVVyaTogImh0dHBzOi8vYXBpLnR3aWxpby5jb20vMjAxMC0wNC0wMSIsCiAgICBzaGFyZWRTdGF0ZUlkRmllbGQ6ICJfaWQiLAogICAgcGhvbmVOdW1iZXJGaWVsZDogInRlbGVwaG9uZU51bWJlciIsCiAgICBtZXNzYWdlVGVtcGxhdGU6ICJZb3VyIHNlY3VyaXR5IGNvZGUgaXMge3tvbmVUaW1lUGFzc3dvcmR9fSIsCiAgICBub2RlTmFtZTogInR3aWxpb1NtcyIKfTsKCi8qKgogKiBOb2RlIG91dGNvbWVzCiAqLwoKIHZhciBOb2RlT3V0Y29tZSA9IHsKICAgIERFTElWRVJFRDogICJkZWxpdmVyZWQiLAogICAgQVVUSEZBSUxFRDogImF1dGhGYWlsZWQiLAogICAgTk9QSE9ORTogICAgIm5vUGhvbmUiLAogICAgRVJST1I6ICAgICAgImVycm9yIgp9OwoKLyoqCiAqIEV4dGVybmFsIGRlcGVuZGVuY2llcwogKi8KCnZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sudXRpbC5lbmNvZGUuQmFzZTY0LAogICAgamF2YS5sYW5nLlN0cmluZwopOwoKLyoqCiAqIEFkZCB0aGUgbm9kZSBpbmZvIHByZWZpeCB0byBhIGxvZyBtZXNzYWdlCiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gdGhlIG1lc3NhZ2UgYm9keQogKiBAcmV0dXJucyBhIHRhZ2dlZCB2ZXJzaW9uIG9mIHRoZSBtZXNzYWdlCiAqLwpmdW5jdGlvbiB0YWcobWVzc2FnZSkgewogICAgcmV0dXJuICIqKioiLmNvbmNhdChjb25maWcubm9kZU5hbWUpLmNvbmNhdCgiICIpLmNvbmNhdChtZXNzYWdlKTsKfQoKLyoqCiAqIExvZyBhbiBIVFRQIHJlc3BvbnNlCiAqIAogKiBAcGFyYW0ge1Jlc3BvbnNlfSBIVFRQIHJlc3BvbnNlIG9iamVjdAogKi8KZnVuY3Rpb24gbG9nUmVzcG9uc2UocmVzcG9uc2UpIHsKICAgIGxvZ2dlci5tZXNzYWdlKHRhZygiU2NyaXB0ZWQgTm9kZSBIVFRQIFJlc3BvbnNlOiAiICsgcmVzcG9uc2UuZ2V0U3RhdHVzKCkgKyAiLCBCb2R5OiAiICsgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpKTsKfQoKLyoqCiAqIFJlc29sdmUgaGFuZGxlYmFyIHBsYWNlaG9sZGVycyBmcm9tIHNoYXJlZCBzdGF0ZQogKiAKICogQHBhcmFtIHt0ZW1wbGF0ZX0gaGFuZGxlYmFyIHRlbXBsYXRlCiAqLwpmdW5jdGlvbiByZXNvbHZlUGxhY2Vob2xkZXJzKHRlbXBsYXRlKSB7CiAgY29uc3QgcmVnZXggPSAve3suKj99fS9nOwogIGNvbnN0IHZhcmlhYmxlcyA9IHRlbXBsYXRlLm1hdGNoKHJlZ2V4KTsKCiAgaWYgKCF2YXJpYWJsZXMpIHsKICAgIHJldHVybiB0ZW1wbGF0ZTsKICB9CiAgCiAgdmFyIHJlc3VsdCA9IHRlbXBsYXRlOwogIAogIHZhcmlhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIHN1YihlbGVtZW50KSB7IAogICAgdmFyIHZhck5hbWUgPSBlbGVtZW50LnJlcGxhY2UoL1t7fV0vZywiIik7CiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShlbGVtZW50LHNoYXJlZFN0YXRlLmdldCh2YXJOYW1lKSk7CiAgfSk7CiAgCiAgcmV0dXJuIHJlc3VsdDsKfQoKLyoqCiAqIFNlbmQgYW4gU01TIHZpYSBUd2lsaW8KICogCiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIHRleHQgb2YgdGhlIG1lc3NhZ2UgdG8gc2VuZAogKiBAcGFyYW0ge3N0cmluZ30gbnVtYmVyRnJvbSAtIFRoZSBvcmlnaW5hdGluZyBwaG9uZSBudW1iZXIvc2hvcnRjb2RlCiAqIEBwYXJhbSB7c3RyaW5nfSBudW1iZXJUbyAtIFRoZSBwaG9uZSBudW1iZXIgdG8gc2VuZCB0bwogKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnaW5nU2VydmljZVNpZCAtIFR3aWxpbyBtZXNzYWdpbmcgc2VydmljZSBTSUQKICogQHBhcmFtIHtzdHJpZ30gdXJpIC0gVGhlIFVSSSBvZiB0aGUgVHdpbGlvIEFQSSBlbmRwb2ludCAKICogQHBhcmFtIHtzdHJpbmd9IHNpZCAtIFRoZSBUd2lsaW8gYWNjb3VudCBvciBBUEkga2V5IFNJRAogKiBAcGFyYW0geyp9IHNlY3JldCAtIFRoZSBUd2lsaW8gYWNjb3VudCBhdXRoa2V5IG9yIEFQSSBrZXkgc2VjcmV0CiAqIEByZXR1cm5zIC0gQSBub2RlIG91dGNvbWUgCiAqLwpmdW5jdGlvbiBzZW5kU01TKG1lc3NhZ2UsIG51bWJlckZyb20sIG51bWJlclRvLCBtZXNzYWdpbmdTZXJ2aWNlU2lkLCB1cmksIHNpZCwgc2VjcmV0KSB7CgogICAgbG9nZ2VyLm1lc3NhZ2UodGFnKCJDYWxsaW5nIFR3aWxpbyBlbmRwb2ludCAiICsgdXJpKSk7CiAgICBsb2dnZXIubWVzc2FnZSh0YWcoIlNlbmRpbmcgdG8gIiArIG51bWJlclRvKSk7CgogICAgLy8gVHdpbGlvIHNlZW1zIG5vdCB0byBleHBlY3QgdGhlIGZvcm0gdmFsdWVzIHRvIGJlIFVSTCBlbmNvZGVkCgogICAgY29uc3QgcmVxdWVzdEJvZHkgPSAiQm9keT0iLmNvbmNhdChlbmNvZGVVUklDb21wb25lbnQobWVzc2FnZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoIiZGcm9tPSIpLmNvbmNhdChudW1iZXJGcm9tKSAgCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoIiZUbz0iKS5jb25jYXQobnVtYmVyVG8pCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoIiZNZXNzYWdpbmdTZXJ2aWNlU2lkPSIpLmNvbmNhdChtZXNzYWdpbmdTZXJ2aWNlU2lkKTsKICAKICAgIGxvZ2dlci5tZXNzYWdlKHRhZygiTWVzc2FnZSBib2R5ICIgKyByZXF1ZXN0Qm9keSkpOwoKICAgIGNvbnN0IGJhc2ljQXV0aCA9IGZyLkJhc2U2NC5lbmNvZGUoZnIuU3RyaW5nKHNpZC5jb25jYXQoIjoiKS5jb25jYXQoc2VjcmV0KSkuZ2V0Qnl0ZXMoKSk7CiAgICAKICAgIHZhciByZXNwb25zZTsKCiAgICB0cnkgewogICAgICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIlBPU1QiKTsKICAgICAgICByZXF1ZXN0LnNldFVyaSh1cmkpOwogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIgKyBiYXNpY0F1dGgpOwogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgcmVxdWVzdC5nZXRFbnRpdHkoKS5zZXRTdHJpbmcocmVxdWVzdEJvZHkpOwoKICAgICAgICByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIH0KICAgIGNhdGNoIChlKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKHRhZygiRXhjZXB0aW9uIGNhbGxpbmcgdHdpbGlvIGVuZHBvaW50ICIgKyBlKSk7CiAgICAgICAgcmV0dXJuIE5vZGVPdXRjb21lLkVSUk9SOwogICAgfQoKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLmdldFN0YXR1cygpLmdldENvZGUoKTsKCiAgICBpZiAoc3RhdHVzID09PSA0MDEpIHsKICAgICAgICBsb2dnZXIuZXJyb3IodGFnKCJUd2lsaW8gYXV0aGVudGljYXRpb24gZmFpbGVkIikpOwogICAgICAgIHJldHVybiBOb2RlT3V0Y29tZS5BVVRIRkFJTEVEOyAgICAKICAgIH0KCiAgICBpZiAoc3RhdHVzICE9PSAyMDEpIHsKICAgICAgICBsb2dnZXIuZXJyb3IodGFnKCJCYWQgSFRUUCByZXNwb25zZSBmcm9tIFR3aWxpbzogIiArIHN0YXR1cykpOwogICAgICAgIHJldHVybiBOb2RlT3V0Y29tZS5FUlJPUjsgICAgCiAgICB9CgogICAgdmFyIHJlc3BvbnNlSnNvbiA9IHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpOwoKICAgIGlmICghcmVzcG9uc2VKc29uKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKHRhZygiTm8gcmVzcG9uc2UgYm9keSIpKTsKICAgICAgICByZXR1cm4gTm9kZU91dGNvbWUuRVJST1I7ICAgIAogICAgfQoKICAgIHZhciByZXNwb25zZU9iaiA9IEpTT04ucGFyc2UocmVzcG9uc2VKc29uKTsKCiAgICBpZiAoIXJlc3BvbnNlT2JqKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKHRhZygiQ291bGRuJ3QgcGFyc2UgcmVzcG9uc2UgYm9keSIpKTsKICAgICAgICByZXR1cm4gTm9kZU91dGNvbWUuRVJST1I7ICAgIAogICAgfQoKICAgIGlmICghKHJlc3BvbnNlT2JqLmhhc093blByb3BlcnR5KCJzaWQiKSkpIHsKICAgICAgICBsb2dnZXIuZXJyb3IodGFnKCJObyBzaWQgcHJvcGVydHkgaW4gVHdpbGlvIHJlc3BvbnNlIikpOwogICAgICAgIHJldHVybiBOb2RlT3V0Y29tZS5FUlJPUjsKICAgIH0gIAoKICAgIGxvZ2dlci5tZXNzYWdlKHRhZygibWVzc2FnZSBkZWxpdmVyZWQgc3VjY2Vzc2Z1bGx5IikpOwogICAgcmV0dXJuIE5vZGVPdXRjb21lLkRFTElWRVJFRDsKfQoKLyoqCiAqIE5vZGUgZW50cnkgcG9pbnQKICovCgpsb2dnZXIubWVzc2FnZSh0YWcoIm5vZGUgZXhlY3V0aW5nIikpOwoKdmFyIGlkOwp2YXIgdGVsZXBob25lTnVtYmVyczsKdmFyIG51bWJlclRvOwoKaWYgKCEoaWQgPSBzaGFyZWRTdGF0ZS5nZXQoY29uZmlnLnNoYXJlZFN0YXRlSWRGaWVsZCkpKSB7CiAgICBsb2dnZXIuZXJyb3IodGFnKCJObyBpZCBpbiBzaGFyZWQgc3RhdGUiKSk7CiAgICBvdXRjb21lID0gTm9kZU91dGNvbWUuRVJST1I7Cn0KZWxzZSBpZiAoISh0ZWxlcGhvbmVOdW1iZXJzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShpZCwgY29uZmlnLnBob25lTnVtYmVyRmllbGQpKSkgewogICAgbG9nZ2VyLmVycm9yKHRhZygiTm8gcGhvbmUgbnVtYmVycyBmb3IgdXNlciIpKTsKICAgIG91dGNvbWUgPSBOb2RlT3V0Y29tZS5OT1BIT05FOwp9CmVsc2UgaWYgKCEobnVtYmVyVG8gPSB0ZWxlcGhvbmVOdW1iZXJzLnRvQXJyYXkoKVswXSkpIHsKICAgIGxvZ2dlci5lcnJvcih0YWcoIm5vIHRlbGVwaG9uZU51bWJlciIpKTsKICAgIG91dGNvbWUgPSBOb2RlT3V0Y29tZS5OT1BIT05FOwp9CmVsc2UgaWYgKG51bWJlclRvID09PSAiIikgewogICAgbG9nZ2VyLmVycm9yKHRhZygiYmxhbmsgdGVsZXBob25lTnVtYmVyIikpOwogICAgb3V0Y29tZSA9IE5vZGVPdXRjb21lLk5PUEhPTkU7Cn0KZWxzZSB7CiAgICB2YXIgbWVzc2FnZSA9IHJlc29sdmVQbGFjZWhvbGRlcnMoY29uZmlnLm1lc3NhZ2VUZW1wbGF0ZSk7CiAgICB2YXIgdHdpbGlvVXJpID0gY29uZmlnLmJhc2VVcmkuY29uY2F0KCIvQWNjb3VudHMvIikuY29uY2F0KGNvbmZpZy5hY2NvdW50U2lkKS5jb25jYXQoIi9NZXNzYWdlcy5qc29uIik7CiAgICBvdXRjb21lID0gc2VuZFNNUyhtZXNzYWdlLCBjb25maWcucGhvbmVOdW1iZXJGcm9tLCBudW1iZXJUbywgY29uZmlnLm1lc3NhZ2luZ1NlcnZpY2VTaWQsIHR3aWxpb1VyaSwgY29uZmlnLmFwaUtleVNpZCwgY29uZmlnLmFwaUtleVNlY3JldCk7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"400e48ba-3f13-4144-ac7b-f824ea8e98c5\",\"name\":\"OAuth2 JWT Issuer Script\",\"description\":\"Default global script for scripted JWT Issuers\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgdG8gZGVyaXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIGR5bmFtaWMgSldUIGlzc3VlciBmcm9tIHRoZSBpc3N1ZXIgc3RyaW5nLgogKiBBIEpXVCBpc3N1ZXIgaXMgbWFkZSB1cCBvZiB0aGUgZm9sbG93aW5nOgogKiAgIC0gaXNzdWVyIC0gdGhlIGlkZW50aWZpZXIgb2YgdGhlIGVudGl0eSB0aGF0IGlzc3VlcyBKV1RzCiAqICAgLSByZXNvdXJjZSBvd25lciBzdWJqZWN0IGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCBpZGVudGlmaWVzIHRoZSByZXNvdXJjZSBvd25lcgogKiAgIC0gY29uc2VudGVkIHNjb3BlIGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCByZXByZXNlbnRzIHNjb3BlIHRoYXQgdGhlIHJlc291cmNlIG93bmVyCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYWxyZWFkeSBjb25zZW50ZWQgdG8gZXh0ZXJuYWxseQogKiAgIC0gYXV0aG9yaXplZCBzdWJqZWN0cyAtIHRoZSBzZXQgb2YgcHJpbmNpcGFsIGlkZW50aWZpZXJzIHRoYXQgYXJlIGF1dGhvcml6ZWQgdG8gYmUgdXNlZCBhcyByZXNvdXJjZSBvd25lcnMKICogICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgaXNzdWVyCiAqICAgLSBKV0tzIC0gZWl0aGVyIGEgc2V0IG9mIEpXS3Mgb3IgY29ubmVjdGlvbiBkZXRhaWxzIGZvciBvYnRhaW5pbmcgdGhhdCBzZXQsIHRoYXQgYXJlIHRoZSBwdWJsaWMga2V5cyB0aGF0CiAqICAgICAgICAgICAgY2FuIHZlcmlmeSB0aGUgc2lnbmF0dXJlIG9uIHRoZSBpc3N1ZWQgSldUcy4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIGlzc3VlciAtIFN0cmluZwogKiAgICAgICAgICBUaGUgaXNzdWVyIGZyb20gdGhlIGJlYXJlciBKV1QuCiAqIHJlYWxtIC0gU3RyaW5nCiAqICAgICAgICAgVGhlIHBhdGggb2YgdGhlIHJlYWxtIHRoYXQgaXMgaGFuZGxpbmcgdGhlIHJlcXVlc3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIHNjcmlwdCBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5PQVVUSDJfU0NSSVBURURfSldUX0lTU1VFUi4KICogaHR0cENsaWVudCAtIEhUVFAgQ2xpZW50ICgxKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgSFRUUCBDbGllbnQgaW5zdGFuY2U6CiAqICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC4KICogaWRSZXBvc2l0b3J5IC0gSWRlbnRpdHkgUmVwb3NpdG9yeSAoMikuIEFsd2F5cyBwcmVzZW50LgogKiBzZWNyZXRzIC0gU2VjcmV0cyBhY2Nlc3NvciAoMykuIEFsd2F5cyBwcmVzZW50LgogKgogKiBSZXR1cm4gLSBvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLlRydXN0ZWRKd3RJc3N1ZXJDb25maWcgKDQpIC0gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRydXN0ZWQgSldUIGlzc3Vlci4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgyKSBTY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuYW0vc2NyaXB0aW5nL2FwaS9pZGVudGl0eS9TY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeS5odG1sLgogKiAoMykgU2NyaXB0ZWRTZWNyZXRzIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5hbS9zY3JpcHRpbmcvYXBpL3NlY3JldHMvU2NyaXB0ZWRTZWNyZXRzLmh0bWwuCiAqICg0KSBUcnVzdGVkSnd0SXNzdWVyQ29uZmlnIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1RydXN0ZWRKd3RJc3N1ZXJDb25maWcuaHRtbC4KICovCgovKiBFWEFNUExFCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVHJ1c3RlZEp3dElzc3VlckNvbmZpZywKICAgICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbnMKICAgICk7CgogICAgdmFyIGlzcyA9IGlkUmVwb3NpdG9yeS5nZXRJZGVudGl0eShpc3N1ZXIpOwogICAgaWYgKGlzcyA9PSBudWxsKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoJ05vIGlzc3VlciBmb3VuZCBmb3I6ICcraXNzdWVyKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGxvZ2dlci5tZXNzYWdlKCdGb3VuZCBpc3N1ZXI6ICcraXNzKTsKICAgIC8vIGluIHRoaXMgZXhhbXBsZSBlaXRoZXIgYSBKV0sgc2V0IG9yIGEgVVJJIHRvIGEgSldLIHNldCBhcmUgaW4gdGhlIHBvc3RhbEFkZHJlc3MgYXR0cmlidXRlCiAgICB2YXIgandrc0F0dHJzID0gaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygncG9zdGFsQWRkcmVzcycpOwogICAgdmFyIGp3a1NldCA9IGp3a3NBdHRycy5sZW5ndGggPT09IDAgPyBudWxsIDogandrc0F0dHJzWzBdOwogICAgdmFyIGNvbmZpZyA9IG5ldyBmckphdmEuVHJ1c3RlZEp3dElzc3VlckNvbmZpZygKICAgICAgICBpc3N1ZXIsCiAgICAgICAgJ3N1YicsCiAgICAgICAgJ3Njb3BlJywKICAgICAgICAvLyBpbiB0aGlzIGV4YW1wbGUsIHZhbGlkIHN1YmplY3RzIGFyZSBzdG9yZWQgaW4gdGhlIG1haWwgYXR0cmlidXRlCiAgICAgICAgaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygnbWFpbCcpLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCd7JykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCdodHRwJykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgICc1IG1pbnV0ZXMnLAogICAgICAgICcxIG1pbnV0ZScKICAgICk7CiAgICByZXR1cm4gY29uZmlnOwp9KCkpOwoqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_SCRIPTED_JWT_ISSUER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"73cecbfc-dad0-4395-be6a-6858ee3a80e5\",\"name\":\"Microsoft Profile Normalization\",\"description\":\"Normalizes raw profile data from Microsoft\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlOYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbk5hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5zdXJuYW1lKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"b7259916-71ed-4675-8c5a-de86a80e4aed\",\"name\":\"FrodoTestScript2\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"39e615b2-898e-4178-ba30-f58bcc095797\",\"name\":\"Save MFA Preference\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkKKTsKd2l0aCAoZnIpIHsKICAKICB2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCiAgdmFyIG1mYVByZWZBdHRyaWJ1dGUgPSAiZnItYXR0ci1pbXVsdGkyIgogIHZhciBtZmFUeXBlID0gIiI7CiAgCiAgaWYgKHNoYXJlZFN0YXRlLmdldCgid2ViLWF1dGhuLWNoYWxsZW5nZSIpICE9IG51bGwpIHsKICAgIG1mYVR5cGUgPSAid2ViYXV0aG4iOwogIH0gZWxzZSBpZiAoc2hhcmVkU3RhdGUuZ2V0KCJwdXNoUmVnaXN0cmF0aW9uVGltZW91dCIpICE9IG51bGwpIHsKICAgICAgIG1mYVR5cGUgPSAicHVzaCIKICB9CiAgCiAgaWRSZXBvc2l0b3J5LmFkZEF0dHJpYnV0ZSh1c2VybmFtZSwgbWZhUHJlZkF0dHJpYnV0ZSwgW21mYVR5cGVdKTsKICAKICBvdXRjb21lID0gInRydWUiCn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"dbe0bf9a-72aa-49d5-8483-9db147985a47\",\"name\":\"ADFS Profile Normalization (JS)\",\"description\":\"Normalizes raw profile data from ADFS\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIHRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIKICogaW4gYSBzdGFuZGFyZCBmb3JtIGV4cGVjdGVkIGJ5IHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogcmF3UHJvZmlsZSAtIFRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvdmlkZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIuCiAqICAgICAgICAgICAgICBKc29uVmFsdWUgKDEpLgogKiBsb2dnZXIgLSBUaGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiByZWFsbSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqIHJlcXVlc3RIZWFkZXJzIC0gVHJlZU1hcCAoMikuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFjY2Vzc2luZyBoZWFkZXJzIGluIHRoZSBsb2dpbiByZXF1ZXN0OgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1yZXF1ZXN0SGVhZGVycy4KICogcmVxdWVzdFBhcmFtZXRlcnMgLSBUcmVlTWFwICgyKS4KICogICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFyYW1ldGVycy4KICogc2VsZWN0ZWRJZHAgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgVGhlIHNvY2lhbCBpZGVudGl0eSBwcm92aWRlciBuYW1lLiBGb3IgZXhhbXBsZTogZ29vZ2xlLgogKiBzaGFyZWRTdGF0ZSAtIExpbmtlZEhhc2hNYXAgKDMpLgogKiAgICAgICAgICAgICAgIFRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgc3RhdGUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRyZWUgYW5kIGFsbG93cyBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gdGhlIHN0YXRlbGVzcyBub2RlczoKICogICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoLW5vZGVzL2NvcmUtYWN0aW9uLmh0bWwjYWNjZXNzaW5nLXRyZWUtc3RhdGUuCiAqIHRyYW5zaWVudFN0YXRlIC0gTGlua2VkSGFzaE1hcCAoMykuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCBmb3Igc3RvcmluZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdGhhdCBtdXN0IG5vdCBsZWF2ZSB0aGUgc2VydmVyIHVuZW5jcnlwdGVkLAogKiAgICAgICAgICAgICAgICAgIGFuZCB0aGF0IG1heSBub3QgbmVlZCB0byBwZXJzaXN0IGJldHdlZW4gYXV0aGVudGljYXRpb24gcmVxdWVzdHMgZHVyaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBzZXNzaW9uOgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGgtbm9kZXMvY29yZS1hY3Rpb24uaHRtbCNhY2Nlc3NpbmctdHJlZS1zdGF0ZS4KICoKICogUmV0dXJuIC0gYSBKc29uVmFsdWUgKDEpLgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqCiAqICAgICAgICAgIFRoaXMgc2NyaXB0J3MgbGFzdCBzdGF0ZW1lbnQgc2hvdWxkIHJlc3VsdCBpbiBhIEpzb25WYWx1ZSAoMSkgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAqICAgICAgICAgIHsKICogICAgICAgICAgICAgIHsiZGlzcGxheU5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZW1haWwiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZmFtaWx5TmFtZSI6ICJjb3JyZXNwb25kaW5nLXNvY2lhbC1pZGVudGl0eS1wcm92aWRlci12YWx1ZSJ9LAogKiAgICAgICAgICAgICAgeyJnaXZlbk5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiaWQiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsibG9jYWxlIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InBob3RvVXJsIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InVzZXJuYW1lIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0KICogICAgICAgICAgfQogKgogKiAgICAgICAgICBUaGUgY29uc3VtZXIgb2YgdGhpcyBkYXRhIGRlZmluZXMgd2hpY2gga2V5cyBhcmUgcmVxdWlyZWQgYW5kIHdoaWNoIGFyZSBvcHRpb25hbC4KICogICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlIGFuZCwKICogICAgICAgICAgdWx0aW1hdGVseSwgdGhlIG1hbmFnZWQgb2JqZWN0IGNyZWF0ZWQvdXBkYXRlZCB3aXRoIHRoaXMgZGF0YQogKiAgICAgICAgICB3aWxsIGV4cGVjdCBjZXJ0YWluIGtleXMgdG8gYmUgcG9wdWxhdGVkLgogKiAgICAgICAgICBJbiBzb21lIGNvbW1vbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB0aGUgZm9sbG93aW5nIGtleXMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vdCBlbXB0eToKICogICAgICAgICAgdXNlcm5hbWUsIGdpdmVuTmFtZSwgZmFtaWx5TmFtZSwgZW1haWwuCiAqCiAqICAgICAgICAgIEZyb20gUkZDNDUxNzogQSB2YWx1ZSBvZiB0aGUgRGlyZWN0b3J5IFN0cmluZyBzeW50YXggaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKICogICAgICAgICAgYXJiaXRyYXJ5IGNoYXJhY3RlcnMgZnJvbSB0aGUgVW5pdmVyc2FsIENoYXJhY3RlciBTZXQgKFVDUykuCiAqICAgICAgICAgIEEgemVyby1sZW5ndGggY2hhcmFjdGVyIHN0cmluZyBpcyBub3QgcGVybWl0dGVkLgogKgogKiAoMSkgSnNvblZhbHVlIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2pzb24vSnNvblZhbHVlLmh0bWwuCiAqICgyKSBUcmVlTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9UcmVlTWFwLmh0bWwuCiAqICgzKSBMaW5rZWRIYXNoTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqLwoKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQogICAgKTsKCiAgICB2YXIgbm9ybWFsaXplZFByb2ZpbGVEYXRhID0gZnJKYXZhLkpzb25WYWx1ZS5qc29uKGZySmF2YS5Kc29uVmFsdWUub2JqZWN0KCkpOwogIAogICAgICAvL2xvZ2dlci5tZXNzYWdlKCdTZWd1aW4gcmF3UHJvZmlsZTogJytyYXdQcm9maWxlKTsKCiAgICBub3JtYWxpemVkUHJvZmlsZURhdGEucHV0KCdpZCcsIHJhd1Byb2ZpbGUuZ2V0KCdzdWInKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2Rpc3BsYXlOYW1lJywgcmF3UHJvZmlsZS5nZXQoJ2dpdmVuTmFtZScpLmFzU3RyaW5nKCkgKyAnICcgKyByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2VtYWlsJywgcmF3UHJvZmlsZS5nZXQoJ21haWwnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2dpdmVuTmFtZScsIHJhd1Byb2ZpbGUuZ2V0KCdnaXZlbk5hbWUnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2ZhbWlseU5hbWUnLCByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ3VzZXJuYW1lJywgcmF3UHJvZmlsZS5nZXQoJ3VwbicpLmFzU3RyaW5nKCkpOwogICAgbm9ybWFsaXplZFByb2ZpbGVEYXRhLnB1dCgncm9sZXMnLCByYXdQcm9maWxlLmdldCgncm9sZXMnKS5hc1N0cmluZygpKTsKICAKICAgICAgLy9sb2dnZXIubWVzc2FnZSgnU2VndWluIG5vcm1hbGl6ZWRQcm9maWxlRGF0YTogJytub3JtYWxpemVkUHJvZmlsZURhdGEpOwoKICAgIHJldHVybiBub3JtYWxpemVkUHJvZmlsZURhdGE7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"cf63df8d-30e4-4839-b671-5b24006a3204\",\"name\":\"MutilevelSelect\",\"description\":\"null\",\"script\":\"Ly8gbGVnYWN5IC0gbXVsdGlwbGUgY2hvaWNlIGNhbGxiYWNrcwoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0LAogIG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXNwb25zZSwKICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLkNob2ljZUNhbGxiYWNrLAogIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ29uZmlybWF0aW9uQ2FsbGJhY2ssCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuSGlkZGVuVmFsdWVDYWxsYmFjaywKICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2ssCiAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0SW5wdXRDYWxsYmFjaywKICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuQm9vbGVhbkF0dHJpYnV0ZUlucHV0Q2FsbGJhY2sKKTsKCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogIHJldHVybiBmb3JtYXQucmVwbGFjZSgvW3hdL2csIGZ1bmN0aW9uKGMpIHsKICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpKjEwfDA7CiAgICAgIHZhciB2ID0gcjsKICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTApOwogIH0pOwp9CgpmdW5jdGlvbiBnZXRDb3VudHJpZXMoZGF0YSkgewogIHZhciBjID0gW107CiAgZGF0YS5mb3JFYWNoKGU9PmMucHVzaChlLm5hbWUpKTsKICByZXR1cm4gYzsKfQoKZnVuY3Rpb24gZ2V0U3RhdGVzKGRhdGEsIGMpIHsKICB2YXIgcyA9IFtdOwogIGRhdGFbY10uc3RhdGVzLmZvckVhY2goZT0+cy5wdXNoKGUubmFtZSkpOwogIHJldHVybiBzOwp9CgpmdW5jdGlvbiBnZXRDaXRpZXMoZGF0YSwgYywgcykgewogIHZhciBjaSA9IFtdOwogIGRhdGFbY10uc3RhdGVzW3NdLmNpdGllcy5mb3JFYWNoKGU9PmNpLnB1c2goZS5uYW1lKSk7CiAgcmV0dXJuIGNpOwp9CgpmdW5jdGlvbiBnZXREYXRhKCkgewogIHZhciByZXF1ZXN0VVJMID0gJ2h0dHBzOi8vZ2lzdC5naXRodWJ1c2VyY29udGVudC5jb20vYXRvbWljc2FtdXJhaS80OGM4OTFlOGE3OGU4YWEzNDBjMGZmZjk2ZDQ4MDZmNC9yYXcvOTk0NjFmZjdjZDNjYTFiMGI3YTU1MTk0MjkxNTM1N2UzYTQzOGFiNS9jb3VudHJ5LXN0YXRlLWNpdHkuanNvbic7CiAgdmFyIHJlcXVlc3QgPSBuZXcgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QoKTsKICByZXF1ZXN0LnNldFVyaShyZXF1ZXN0VVJMKTsKICByZXF1ZXN0LnNldE1ldGhvZCgnR0VUJyk7CiAgcmVxdWVzdC5nZXRIZWFkZXJzKCkuYWRkKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsnKTsKICAKICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7ICAKICB2YXIgcmVzcG9uc2VDb2RlID0gcmVzcG9uc2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpOwogIGlmIChyZXNwb25zZUNvZGUgPT09IDIwMCkgewogICAgcmV0dXJuIEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCihmdW5jdGlvbiAoKSB7CiAgdHJ5IHsKICAgIHZhciBhbmNob3IgPSBnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4Jyk7CiAgICB2YXIgZGF0YSA9IGdldERhdGEoKTsKICAgIHZhciBzdGF0ZXMgPSBbXTsKICAgIHZhciBjaXRpZXMgPSBbXTsKICAgIHZhciBzZWxlY3RlZENvdW50cnkgPSAwOwogICAgdmFyIHNlbGVjdGVkU3RhdGUgPSAwOwogICAgc2VsZWN0ZWRDb3VudHJ5ID0gc2hhcmVkU3RhdGUuZ2V0KCdzZWxlY3RlZENvdW50cnknKT9wYXJzZUludChub2RlU3RhdGUuZ2V0KCdzZWxlY3RlZENvdW50cnknKSk6MDsKICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogc2VsZWN0ZWQgY291bnRyeSB7fScsIHNlbGVjdGVkQ291bnRyeSk7CiAgICBzZWxlY3RlZFN0YXRlID0gc2hhcmVkU3RhdGUuZ2V0KCdzZWxlY3RlZFN0YXRlJyk/cGFyc2VJbnQobm9kZVN0YXRlLmdldCgnc2VsZWN0ZWRTdGF0ZScpKTowOwogICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOwogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgdmFyIGNiTGlzdCA9IFtdOwogICAgICB2YXIgY291bnRyeUNiID0gbmV3IGZyLkNob2ljZUNhbGxiYWNrKCdTZWxlY3QgY291bnRyeScsIGdldENvdW50cmllcyhkYXRhKSwgc2VsZWN0ZWRDb3VudHJ5LCBmYWxzZSk7CiAgICAgIGNvdW50cnlDYi5zZXRTZWxlY3RlZEluZGV4KHNlbGVjdGVkQ291bnRyeSk7CiAgICAgIGNiTGlzdC5wdXNoKGNvdW50cnlDYik7CiAgICAgIHN0YXRlcyA9IGdldFN0YXRlcyhkYXRhLCBzZWxlY3RlZENvdW50cnkpOwogICAgICB2YXIgc3RhdGVDYiA9IG5ldyBmci5DaG9pY2VDYWxsYmFjaygnU2VsZWN0IHN0YXRlJywgc3RhdGVzLCBzZWxlY3RlZFN0YXRlLCBmYWxzZSk7CiAgICAgIHN0YXRlQ2Iuc2V0U2VsZWN0ZWRJbmRleChzZWxlY3RlZFN0YXRlKTsKICAgICAgY2JMaXN0LnB1c2goc3RhdGVDYik7CiAgICAgIGNpdGllcyA9IGdldENpdGllcyhkYXRhLCBzZWxlY3RlZENvdW50cnksIHNlbGVjdGVkU3RhdGUpOwogICAgICBjYkxpc3QucHVzaChuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKDAsIGBMaXN0IG9mIGNpdGllcyBpbiAke3N0YXRlc1tzZWxlY3RlZFN0YXRlXX1gKSk7CiAgICAgIGNpdGllcy5mb3JFYWNoKGU9PnsKICAgICAgICBjYkxpc3QucHVzaChuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKDAsIGUpKTsKICAgICAgfSk7CgogICAgICB2YXIgc2NyaXB0ID0gYAogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygnc2NyaXB0IGVudGVyJyk7CiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtdWx0aXNlbGVjdF9fb3B0aW9uJykuZm9yRWFjaChmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBjb25zdCBodkNiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdGlvbkNoYW5nZWQnKTsKICAgICAgICAgICAgICBjb25zdCBldiA9IG5ldyBFdmVudCgiY2hhbmdlIik7CiAgICAgICAgICAgICAgaHZDYi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJ3RydWUnKTsKICAgICAgICAgICAgICBjb25zb2xlLmxvZygnaW52b2tpbmcgY2hhbmdlIG9uIGhpZGRlbiB2YWx1ZSBpbnB1dCcpOwogICAgICAgICAgICAgIGh2Q2IuZGlzcGF0Y2hFdmVudChldik7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3N1Ym1pdHRpbmcuLi4nKTsKICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9naW5CdXR0b25fMCcpLmNsaWNrKCk7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9KQogICAgICAgICAgfSkKICAgICAgICB9LCA1MCk7CiAgICAgIGA7CiAgICAgIGNiTGlzdC5wdXNoKG5ldyBmci5IaWRkZW5WYWx1ZUNhbGxiYWNrKCdzZWxlY3Rpb25DaGFuZ2VkJywgJ2ZhbHNlJykpOwogICAgICBjYkxpc3QucHVzaChuZXcgZnIuQ29uZmlybWF0aW9uQ2FsbGJhY2soMCwgWydGaW5pc2gnXSwgMCkpOwogICAgICBjYkxpc3QucHVzaChuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkpOwogICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZC5hcHBseShudWxsLCBjYkxpc3QpLmJ1aWxkKCk7CiAgICB9IGVsc2UgewogICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IGhpZGRlbiB0ZXh0IGlucHV0OiB7fScsIGNhbGxiYWNrcy5nZXQoY2FsbGJhY2tzLnNpemUoKS0zKS5nZXRWYWx1ZSgpKTsKICAgICAgaWYgKGNhbGxiYWNrcy5nZXQoY2FsbGJhY2tzLnNpemUoKS0zKS5nZXRWYWx1ZSgpID09ICd0cnVlJykgeyAvLyBjaGVjayB2YWx1ZSBvZiB0ZXh0IGlucHV0IGNhbGxiYWNrCiAgICAgICAgLy8gb25lIG9mIHRoZSBjYXRlZ29yeSBwaWNrZXJzIHdhcyBjaGFuZ2VkCiAgICAgICAgaWYoc2VsZWN0ZWRDb3VudHJ5ICE9IGNhbGxiYWNrcy5nZXQoMCkuZ2V0U2VsZWN0ZWRJbmRleGVzKClbMF0pIHsKICAgICAgICAgIHNlbGVjdGVkU3RhdGUgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZWxlY3RlZFN0YXRlID0gY2FsbGJhY2tzLmdldCgxKS5nZXRTZWxlY3RlZEluZGV4ZXMoKVswXTsKICAgICAgICB9CiAgICAgICAgc2VsZWN0ZWRDb3VudHJ5ID0gY2FsbGJhY2tzLmdldCgwKS5nZXRTZWxlY3RlZEluZGV4ZXMoKVswXTsKICAgICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNldCBzZWxlY3RlZCBjb3VudHJ5IHt9Jywgc2VsZWN0ZWRDb3VudHJ5KTsKICAgICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNldCBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOyAgCiAgICAgICAgc2hhcmVkU3RhdGUucHV0KCdzZWxlY3RlZENvdW50cnknLCBzZWxlY3RlZENvdW50cnkpOwogICAgICAgIHNoYXJlZFN0YXRlLnB1dCgnc2VsZWN0ZWRTdGF0ZScsIHNlbGVjdGVkU3RhdGUpOwogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKCd1cGRhdGUnKS5idWlsZCgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIHVzZXIgY2xpY2tlZCAiZmluaXNoIgogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKCdjb21wbGV0ZScpLmJ1aWxkKCk7CiAgICAgIH0KICAgIH0KICB9IGNhdGNoIChlKSB7CiAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IGVycm9yOiB7fSAnICsgZSwgZSk7CiAgICBvdXRjb21lID0gJ2Vycm9yJwogIH0KfSkoKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"name\":\"Check Username\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"07ee6240-d106-4e25-a781-5fcabc477d22\",\"name\":\"FrodoSPAdapter\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_SP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"f203173e-bceb-4e8e-8bde-52f2616b7278\",\"name\":\"pwdlessSet.js\",\"description\":\"null\",\"script\":\"aWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwpzZXRDdXN0b21BdHRyVmFsdWUoImN1c3RvbV9wYXNzd29yZGxlc3MiLCB0cnVlKTsKaWRSZXBvc2l0b3J5LnNldEF0dHJpYnV0ZShpZCwgImFzc2lnbmVkRGFzaGJvYXJkIixbInJlZ2lzdGVyV2ViQXV0aE5EZXZpY2UiLCJzZXRVc2VybmFtZUxlc3MiLCJwZWVyUmVjb3ZlcnlFbWFpbCIsInBlZXJSZWNvdmVyeTFGQSIsICJyZWdpc3RlclB1c2giXSk7CgoKICAgIApvdXRjb21lID0gInRydWUiOwoKZnVuY3Rpb24gc2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSxjdXN0b21BdHRyVmFsdWUpCnsKICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCAnZnItaWRtLWN1c3RvbS1hdHRycycpOwogIGlmIChmcklkbUN1c3RvbUF0dHJpYnV0ZXMpCiAgewogICAgdmFyIGZySWRtQ3VzdG9tQXR0cmlidXRlc09iamVjdCA9IEpTT04ucGFyc2UoU3RyaW5nKGZySWRtQ3VzdG9tQXR0cmlidXRlcy50b0FycmF5KClbMF0pKTsKICAgIGZySWRtQ3VzdG9tQXR0cmlidXRlc09iamVjdFtjdXN0b21BdHRyTmFtZV0gPSBjdXN0b21BdHRyVmFsdWU7CiAgICB2YXIganNvbl9zdHJpbmcgPSBKU09OLnN0cmluZ2lmeShmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QpOwogICAgaWRSZXBvc2l0b3J5LnNldEF0dHJpYnV0ZShpZCwgImZyLWlkbS1jdXN0b20tYXR0cnMiLFtqc29uX3N0cmluZ10pOwogIH0KfQo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"58c824ae-84ed-4724-82cd-db128fc3f6c\",\"name\":\"Normalized Profile to Managed User\",\"description\":\"Converts a normalized social profile into a managed user\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgbWFuYWdlZFVzZXIgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlck5hbWUiLCBub3JtYWxpemVkUHJvZmlsZS51c2VybmFtZSkpKQoKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgicG9zdGFsQWRkcmVzcyIsIG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MpCmlmIChub3JtYWxpemVkUHJvZmlsZS5hZGRyZXNzTG9jYWxpdHkuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgiY2l0eSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NMb2NhbGl0eSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24uaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgic3RhdGVQcm92aW5jZSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24pCmlmIChub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInBvc3RhbENvZGUiLCBub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlKQppZiAobm9ybWFsaXplZFByb2ZpbGUuY291bnRyeS5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KCJjb3VudHJ5Iiwgbm9ybWFsaXplZFByb2ZpbGUuY291bnRyeSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBob25lLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInRlbGVwaG9uZU51bWJlciIsIG5vcm1hbGl6ZWRQcm9maWxlLnBob25lKQoKLy8gaWYgdGhlIGdpdmVuTmFtZSBhbmQgZmFtaWx5TmFtZSBpcyBudWxsIG9yIGVtcHR5Ci8vIHRoZW4gYWRkIGEgYm9vbGVhbiBmbGFnIHRvIHRoZSBzaGFyZWQgc3RhdGUgdG8gaW5kaWNhdGUgbmFtZXMgYXJlIG5vdCBwcmVzZW50Ci8vIHRoaXMgY291bGQgYmUgdXNlZCBlbHNld2hlcmUKLy8gZm9yIGVnLiB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gYSBzY3JpcHRlZCBkZWNpc2lvbiBub2RlIHRvIGJ5LXBhc3MgcGF0Y2hpbmcKLy8gdGhlIHVzZXIgb2JqZWN0IHdpdGggYmxhbmsgdmFsdWVzIHdoZW4gZ2l2ZW5OYW1lICBhbmQgZmFtaWx5TmFtZSBpcyBub3QgcHJlc2VudApib29sZWFuIG5vR2l2ZW5OYW1lID0gbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmFzU3RyaW5nKCk/LnRyaW0oKSkKYm9vbGVhbiBub0ZhbWlseU5hbWUgPSBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZmFtaWx5TmFtZS5hc1N0cmluZygpPy50cmltKCkpCnNoYXJlZFN0YXRlLnB1dCgibmFtZUVtcHR5T3JOdWxsIiwgbm9HaXZlbk5hbWUgJiYgbm9GYW1pbHlOYW1lKQoKcmV0dXJuIG1hbmFnZWRVc2VyCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"59f84396-71e4-4c1d-a6ae-c4fc624d9752\",\"name\":\"Test-Script-1\",\"description\":\"A test script that uses an environment variable and a secret variable\",\"script\":\"Ly8gQ2FsY3VsYXRlIEU9bWNeMiB1c2luZyBtID0gNDIKY29uc3QgYzIgPSBzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi50ZXN0LnZhcmlhYmxlLmxpZ2h0Iik7CmNvbnNvbGUubG9nKGBFID0gJHs0MiAqIGMyICogYzJ9YCk7Ci8vIENhbGN1bGF0ZSB0aGUgYXJlYSBvZiBhIGNpcmNsZSB3aXRoIHJhZGl1cyByID0gNDIKY29uc3QgcGkgPSBwYXJzZUZsb2F0KHN5c3RlbUVudi5nZXRQcm9wZXJ0eSgiZXN2LnRlc3Quc2VjcmV0LnBpIikpOwpjb25zb2xlLmxvZyhgQSA9ICR7cGkgKiA0MiAqIDQyfWApOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"29be3f4a-cf40-4aca-8fe3-de40c9a801dd\",\"name\":\"hasWebAuthN.js\",\"description\":\"null\",\"script\":\"dmFyIHdlYmF1dGhuRGV2aWNlUHJvZmlsZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHNoYXJlZFN0YXRlLmdldCgiX2lkIiksICJ3ZWJhdXRobkRldmljZVByb2ZpbGVzIikudG9TdHJpbmcoKTsKc2hhcmVkU3RhdGUucHV0KCJkZWJ1ZyIsd2ViYXV0aG5EZXZpY2VQcm9maWxlcyk7CmlmKHdlYmF1dGhuRGV2aWNlUHJvZmlsZXMubGVuZ3RoPjIpIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7Cn0KZWxzZSB7CiAgb3V0Y29tZSA9ICJmYWxzZSI7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3b2f6836-184c-4ee9-8a1d-557cb01837a5\",\"name\":\"FrodoTestScript3\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"13aaf8de-cd8c-4b0e-9167-39ca1fb590a4\",\"name\":\"timerButton.js\",\"description\":\"null\",\"script\":\"Ly8gVGltZXIgQnV0dG9uIG5vZGUKLy8gT3V0Y29tZXM6IFsgInRydWUiLCAidGltZXIiIF0KCgpERUxBWT0xMDsKTUVTU0FHRT0iU2tpcCB0byB5b3VyIHByZWZlcnJlZCBtZXRob2QuLi4gIjsKQlVUVE9OVEVYVD0iU2VsZWN0IGFub3RoZXIgbG9naW4gbWV0aG9kIjsKCnZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5OYW1lQ2FsbGJhY2ssCiAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKKQoKZnVuY3Rpb24gY3JlYXRlU2NyaXB0KCkgewogICAgcmV0dXJuIFN0cmluZygiIFxuXAogICAgICAgIHZhciBDT1VOVCA9ICIgKyBERUxBWSArICI7IFxuXAogICAgICAgIGZ1bmN0aW9uIGdvKG9icykgeyBcblwKICAgICAgICAgICAgY29uc3QgcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtdnYtYXM9XCJEVU1NWVwiXScpWzBdOyBcblwKICAgICAgICAgICAgaWYgKHApIHsgXG5cCiAgICAgICAgICAgICAgICBwLmhpZGRlbiA9IHRydWU7IFxuXAogICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbGFiZWxbZm9yPScgKyBwLmlkICsgJ10nKS5oaWRkZW4gPSB0cnVlOyBcblwKICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignYnV0dG9uW3R5cGU9c3VibWl0XScpLmlubmVyVGV4dCA9ICciICsgQlVUVE9OVEVYVCArICInOyBcblwKICAgICAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IFxuXAogICAgICAgICAgICAgICAgYi5jbGFzc0xpc3QuYWRkKFwiYnRuXCIsIFwibXQtM1wiLCBcImJ0bi1zZWNvbmRhcnlcIik7IFxuXAogICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSAnIiArIE1FU1NBR0UgKyAiJyArIENPVU5UICsgJ3MnOyBcblwKICAgICAgICAgICAgICAgIGIub25jbGljayA9IGZ1bmN0aW9uKCkgeyBwLnZhbHVlPSdfX19USU1FX19fJzsgcC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnKSk7IH07IFxuXAogICAgICAgICAgICAgICAgcC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShiLCBwLm5leHRTaWJsaW5nKTsgXG5cCiAgICAgICAgICAgICAgICB2YXIgdCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgeyBcblwKICAgICAgICAgICAgICAgICAgICBpZiAoQ09VTlQgPT0gMSkgeyBcblwKICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0KTsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgIHAudmFsdWU9J19fX1RJTUVfX18nOyBwLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcpKTsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dpbkJ1dHRvbl8wJykuY2xpY2soKTsgfSwgMjAwKTsgXG5cCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgIENPVU5ULS07IFxuXAogICAgICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9ICciICsgTUVTU0FHRSArICInICsgQ09VTlQgKyAncyc7IFxuXAogICAgICAgICAgICAgICAgICAgIH0gXG5cCiAgICAgICAgICAgICAgICB9LCAxMDAwICk7IFxuXAogICAgICAgICAgICAgICAgaWYgKG9icykgb2JzLmRpc2Nvbm5lY3QoKTsgXG5cCiAgICAgICAgICAgICAgICByZXR1cm47IFxuXAogICAgICAgICAgICB9IFxuXAogICAgICAgIH0gXG5cCiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtdnYtYXM9XCJEVU1NWVwiXScpWzBdKSBnbygpOyBcblwKICAgICAgICBlbHNlIHsgXG5cCiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucywgb2JzKSA9PiB7IGdvKG9icyk7IH0pOyBcblwKICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7IFxuXAogICAgICAgIH0gXG5cCiAgICAiKTsKfQoKCmlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKGNyZWF0ZVNjcmlwdCgpKSwKICAgICAgICBuZXcgZnIuTmFtZUNhbGxiYWNrKCJEVU1NWSIpCiAgICApLmJ1aWxkKCkKfSBlbHNlIHsKICAgIHZhciBjYiA9IGNhbGxiYWNrcy5nZXQoMSkuZ2V0TmFtZSgpOwogICAgaWYgKGNiID09PSAiX19fVElNRV9fXyIpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidGltZXIiKS5idWlsZCgpOwogICAgfSBlbHNlIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7CiAgICB9Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"95143d29-e417-49a8-a86c-a3b4cf8fd8ed\",\"name\":\"MultilevelSelect\",\"description\":\"null\",\"script\":\"CmZ1bmN0aW9uIGdldENvdW50cmllcyhkYXRhKSB7CiAgdmFyIGMgPSBbXTsKICBkYXRhLmZvckVhY2goZT0+Yy5wdXNoKGUubmFtZSkpOwogIHJldHVybiBjOwp9CgpmdW5jdGlvbiBnZXRTdGF0ZXMoZGF0YSwgYykgewogIHZhciBzID0gW107CiAgZGF0YVtjXS5zdGF0ZXMuZm9yRWFjaChlPT5zLnB1c2goZS5uYW1lKSk7CiAgcmV0dXJuIHM7Cn0KCmZ1bmN0aW9uIGdldENpdGllcyhkYXRhLCBjLCBzKSB7CiAgdmFyIGNpID0gW107CiAgZGF0YVtjXS5zdGF0ZXNbc10uY2l0aWVzLmZvckVhY2goZT0+Y2kucHVzaChlLm5hbWUpKTsKICByZXR1cm4gY2k7Cn0KCmZ1bmN0aW9uIGdldERhdGEoKSB7CiAgdmFyIHJlcXVlc3RPcHRpb25zID0gewogICAgbWV0aG9kOiAnR0VUJywKICB9CgogIHZhciByZXF1ZXN0VVJMID0gJ2h0dHBzOi8vZ2lzdC5naXRodWJ1c2VyY29udGVudC5jb20vYXRvbWljc2FtdXJhaS80OGM4OTFlOGE3OGU4YWEzNDBjMGZmZjk2ZDQ4MDZmNC9yYXcvOTk0NjFmZjdjZDNjYTFiMGI3YTU1MTk0MjkxNTM1N2UzYTQzOGFiNS9jb3VudHJ5LXN0YXRlLWNpdHkuanNvbic7CiAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3RVUkwsIHJlcXVlc3RPcHRpb25zKS5nZXQoKTsKCiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7CiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXNwb25zZS50ZXh0KCkpOwogIH0gZWxzZSB7CiAgICBudWxsOwogIH0KfQoKKGZ1bmN0aW9uICgpIHsKICB0cnkgewogICAgdmFyIGRhdGEgPSBnZXREYXRhKCk7CiAgICB2YXIgc3RhdGVzID0gW107CiAgICB2YXIgY2l0aWVzID0gW107CiAgICB2YXIgc2VsZWN0ZWRDb3VudHJ5ID0gMDsKICAgIHZhciBzZWxlY3RlZFN0YXRlID0gMDsKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIHNlbGVjdGVkQ291bnRyeSA9IG5vZGVTdGF0ZS5nZXQoJ3NlbGVjdGVkQ291bnRyeScpP3BhcnNlSW50KG5vZGVTdGF0ZS5nZXQoJ3NlbGVjdGVkQ291bnRyeScpKTowOwogICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNlbGVjdGVkIGNvdW50cnkge30nLCBzZWxlY3RlZENvdW50cnkpOwogICAgICBzZWxlY3RlZFN0YXRlID0gbm9kZVN0YXRlLmdldCgnc2VsZWN0ZWRTdGF0ZScpP3BhcnNlSW50KG5vZGVTdGF0ZS5nZXQoJ3NlbGVjdGVkU3RhdGUnKSk6MDsKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOwogICAgICBjYWxsYmFja3NCdWlsZGVyLmNob2ljZUNhbGxiYWNrKCdTZWxlY3QgY291bnRyeScsIGdldENvdW50cmllcyhkYXRhKSwgc2VsZWN0ZWRDb3VudHJ5LCBmYWxzZSk7CiAgICAgIHN0YXRlcyA9IGdldFN0YXRlcyhkYXRhLCBzZWxlY3RlZENvdW50cnkpOwogICAgICBjYWxsYmFja3NCdWlsZGVyLmNob2ljZUNhbGxiYWNrKCdTZWxlY3Qgc3RhdGUnLCBzdGF0ZXMsIHNlbGVjdGVkU3RhdGUsIGZhbHNlKTsKICAgICAgY2l0aWVzID0gZ2V0Q2l0aWVzKGRhdGEsIHNlbGVjdGVkQ291bnRyeSwgc2VsZWN0ZWRTdGF0ZSk7CiAgICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogaGVyZSAxJyk7CiAgICAgIGNpdGllcy5mb3JFYWNoKGU9PnsKICAgICAgICBjYWxsYmFja3NCdWlsZGVyLnRleHRPdXRwdXRDYWxsYmFjaygwLCBlKTsKICAgICAgfSk7CiAgICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogaGVyZSAyJyk7CiAgICAgIGNhbGxiYWNrc0J1aWxkZXIuY29uZmlybWF0aW9uQ2FsbGJhY2soMCwgWydVcGRhdGUnLCAnQ29tcGxldGUnXSwgMCk7CiAgICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogaGVyZSAzOiB7fScsIGNhbGxiYWNrcy5nZXRDaG9pY2VDYWxsYmFja3MoKS5zaXplKCkpOwogICAgICBjYWxsYmFja3MuZ2V0Q2hvaWNlQ2FsbGJhY2tzKCkuZ2V0KDApLnNldFNlbGVjdGVkSW5kZXgoc2VsZWN0ZWRDb3VudHJ5KTsKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBoZXJlIDQnKTsKICAgICAgY2FsbGJhY2tzLmdldENob2ljZUNhbGxiYWNrcygpLmdldCgxKS5zZXRTZWxlY3RlZEluZGV4KHNlbGVjdGVkU3RhdGUpOwoKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBoZXJlIDUnKTsKICAgICAgdmFyIHNjcmlwdCA9IGAKICAgICAgICAgIGZ1bmN0aW9uIHNob3dPcmdEZXRhaWxzKCkgewogICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3cmFwcGVyJyk7CiAgICAgICAgICAgIHdyYXBwZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmViZWdpbicsICc8ZGl2PnRlc3Q8L2Rpdj4nKTsKICAgICAgICAgIH0KICAgICAgICAgIHNldFRpbWVvdXQoc2hvd09yZ0RldGFpbHMsIDEwMCk7CiAgICAgICAgICBgOwogICAgICAvLyBjYWxsYmFja3NCdWlsZGVyLnNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpOwogICAgICAvLyBjYWxsYmFja3NCdWlsZGVyLmhpZGRlblZhbHVlQ2FsbGJhY2soJ3NlbGVjdGlvbkNoYW5nZWQnLCAnZmFsc2UnKQogICAgfSBlbHNlIHsKICAgICAgc2VsZWN0ZWRDb3VudHJ5ID0gY2FsbGJhY2tzLmdldENob2ljZUNhbGxiYWNrcygpLmdldCgwKVswXTsKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBzZXQgc2VsZWN0ZWQgY291bnRyeSB7fScsIHNlbGVjdGVkQ291bnRyeSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ3NlbGVjdGVkQ291bnRyeScsIHNlbGVjdGVkQ291bnRyeSk7CiAgICAgIHNlbGVjdGVkU3RhdGUgPSBjYWxsYmFja3MuZ2V0Q2hvaWNlQ2FsbGJhY2tzKCkuZ2V0KDEpWzBdOwogICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNldCBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOwogICAgICBub2RlU3RhdGUucHV0U2hhcmVkKCdzZWxlY3RlZFN0YXRlJywgc2VsZWN0ZWRTdGF0ZSk7CiAgICAgIGlmIChjYWxsYmFja3MuZ2V0Q29uZmlybWF0aW9uQ2FsbGJhY2tzKCkuZ2V0KDApID09IDApIHsKICAgICAgICBvdXRjb21lID0gJ3VwZGF0ZSc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3V0Y29tZSA9ICdjb21wbGV0ZSc7CiAgICAgIH0KICAgIH0KICB9IGNhdGNoIChlKSB7CiAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IGVycm9yOiB7fSAnICsgZSwgZSk7CiAgICBvdXRjb21lID0gJ2Vycm9yJwogIH0KfSkoKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"23143919-6b78-40c3-b25e-beca19b229e0\",\"name\":\"GitHub Profile Normalization (VS)\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJHaXRIdWIgcmF3UHJvZmlsZTogIityYXdQcm9maWxlKQoKcmV0dXJuIGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZmlyc3RfbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3RfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5waWN0dXJlLmRhdGEudXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLmVtYWlsKSkp\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e387c5d7-ceb8-459e-87e6-d09eca512385\",\"name\":\"resetPushBomb.js\",\"description\":\"null\",\"script\":\"dmFyIF9pZCA9IHNoYXJlZFN0YXRlLmdldCgiX2lkIik7CnZhciBhdHRyaWJ1dGUgPSAiZnItYXR0ci1zdHIyIjsKCmlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoX2lkLCBhdHRyaWJ1dGUsWyIiXSk7CgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"248b8a56-df81-4b1b-b4ba-45d994f6504c\",\"name\":\"SAML2 IDP Adapter Script\",\"description\":\"Default global script for SAML2 IDP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9TQU1MMklkZW50aXR5UHJvdmlkZXJBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBJZHBBZGFwdGVyU2NyaXB0SGVscGVyICgxKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgSWRwQWRhcHRlclNjcmlwdEhlbHBlciBjb250YWluaW5nIGhlbHBlciBtZXRob2RzLiBTZWUgSmF2YWRvYyBmb3IgbW9yZSBkZXRhaWxzLgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgyKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDMpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDQpCiAqICAgICBUaGUgb3JpZ2luYWwgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IGZyb20gU1AKICogcmVxSWQgLSBTdHJpbmcKICogICAgIFRoZSBpZCB0byB1c2UgZm9yIGNvbnRpbnVhdGlvbiBvZiBwcm9jZXNzaW5nIGlmIHRoZSBhZGFwdGVyIHJlZGlyZWN0cwogKiByZXMgLSBSZXNwb25zZSAoNSkKICogICAgIFRoZSBTQU1MIFJlc3BvbnNlCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNikKICogICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLiBUaGUgcmVmZXJlbmNlIHR5cGUgb2YgdGhpcyBpcyBPYmplY3QgYW5kIHdvdWxkIG5lZWQgdG8gYmUgY2FzdGVkIHRvIFNTT1Rva2VuLgogKiByZWxheVN0YXRlIC0gU3RyaW5nCiAqICAgICBUaGUgcmVsYXlTdGF0ZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgcmVkaXJlY3QKICogZmF1bHRDb2RlIC0gU3RyaW5nCiAqICAgICB0aGUgZmF1bHQgY29kZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogZmF1bHREZXRhaWwgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBkZXRhaWwgdGhhdCB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBTQU1MIHJlc3BvbnNlCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwuCiAqICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuPHNjcmlwdCBuYW1lPgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb24gKDcpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL0F1dGhuUmVxdWVzdC5odG1sLgogKiAoNSkgUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvUmVzcG9uc2UuaHRtbC4KICogKDYpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBJRFAgQWRhcHRlciBzY3JpcHRlZCBwbHVnaW4uCiAqLwoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2luZ2xlU2lnbk9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlU2lnbk9uICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlQXV0aGVudGljYXRpb246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVBdXRoZW50aWNhdGlvbiAoKSB7CiAgICByZXR1cm4gZmFsc2U7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNlbmRSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgcmVxSWQKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIGJyb3dzZXIgcmVkaXJlY3Rpb24gaGFwcGVuZWQgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2VuZFJlc3BvbnNlICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2lnblJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIHJlcwogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTaWduUmVzcG9uc2UgKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgZmF1bHRDb2RlCiAqICAgICBmYXVsdERldGFpbAogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlICgpIHsKfQ==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"484e6246-dbc6-4288-97e6-54e55431402e\",\"name\":\"Apple Profile Normalization\",\"description\":\"Normalizes raw profile data from Apple\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICoKICogSW4gc29tZSBjb21tb24gZGVmYXVsdCBjb25maWd1cmF0aW9ucywgdGhlIGZvbGxvd2luZyBrZXlzIGFyZSByZXF1aXJlZCB0byBiZSBub3QgZW1wdHk6CiAqIHVzZXJuYW1lLCBnaXZlbk5hbWUsIGZhbWlseU5hbWUsIGVtYWlsLgogKgogKiBGcm9tIFJGQzQ1MTc6IEEgdmFsdWUgb2YgdGhlIERpcmVjdG9yeSBTdHJpbmcgc3ludGF4IGlzIGEgc3RyaW5nIG9mIG9uZSBvciBtb3JlCiAqIGFyYml0cmFyeSBjaGFyYWN0ZXJzIGZyb20gdGhlIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0IChVQ1MpLgogKiBBIHplcm8tbGVuZ3RoIGNoYXJhY3RlciBzdHJpbmcgaXMgbm90IHBlcm1pdHRlZC4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKU3RyaW5nIGVtYWlsID0gImNoYW5nZUBtZS5jb20iClN0cmluZyBzdWJqZWN0SWQgPSByYXdQcm9maWxlLnN1YgpTdHJpbmcgZmlyc3ROYW1lID0gIiAiClN0cmluZyBsYXN0TmFtZSA9ICIgIgpTdHJpbmcgdXNlcm5hbWUgPSBzdWJqZWN0SWQKU3RyaW5nIG5hbWUKCmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgiZW1haWwiKSAmJiByYXdQcm9maWxlLmVtYWlsLmlzTm90TnVsbCgpKXsgLy8gVXNlciBjYW4gZWxlY3QgdG8gbm90IHNoYXJlIHRoZWlyIGVtYWlsCiAgICBlbWFpbCA9IHJhd1Byb2ZpbGUuZW1haWwuYXNTdHJpbmcoKQogICAgdXNlcm5hbWUgPSBlbWFpbAp9CmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgibmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5pc05vdE51bGwoKSkgewogICAgaWYgKHJhd1Byb2ZpbGUubmFtZS5pc0RlZmluZWQoImZpcnN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5maXJzdE5hbWUuaXNOb3ROdWxsKCkpIHsKICAgICAgICBmaXJzdE5hbWUgPSByYXdQcm9maWxlLm5hbWUuZmlyc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KICAgIGlmIChyYXdQcm9maWxlLm5hbWUuaXNEZWZpbmVkKCJsYXN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5sYXN0TmFtZS5pc05vdE51bGwoKSkgewogICAgICAgIGxhc3ROYW1lID0gcmF3UHJvZmlsZS5uYW1lLmxhc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KfQoKbmFtZSA9IChmaXJzdE5hbWU/LnRyaW0oKSA/IGZpcnN0TmFtZSA6ICIiKSArIChsYXN0TmFtZT8udHJpbSgpID8gKChmaXJzdE5hbWU/LnRyaW0oKSA/ICIgIiA6ICIiKSArIGxhc3ROYW1lKSA6ICIiKQpuYW1lID0gICghbmFtZT8udHJpbSgpKSA/ICIgIiA6IG5hbWUKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCBzdWJqZWN0SWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIG5hbWUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIGVtYWlsKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgZmlyc3ROYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIGxhc3ROYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCB1c2VybmFtZSkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3c9d3b4a-b38c-4c77-a8d7-4b937e48f62f\",\"name\":\"selectFavFactor.js\",\"description\":\"null\",\"script\":\"Ly8gRGlzcGxheXMgTUZBIG9wdGlvbnMgZmlsdGVyZWQgYnkgdXNlcnMgcHJlZmVyZW5jZXMKdmFyIHdlYmF1dGhuRGV2aWNlUHJvZmlsZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHNoYXJlZFN0YXRlLmdldCgiX2lkIiksICJ3ZWJhdXRobkRldmljZVByb2ZpbGVzIikudG9TdHJpbmcoKTsKdmFyIHB1c2hEZXZpY2VQcm9maWxlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKSwgInB1c2hEZXZpY2VQcm9maWxlcyIpLnRvU3RyaW5nKCk7Cgp2YXIgaGFzV2ViQXV0aE49ZmFsc2U7CnZhciBoYXNQdXNoPWZhbHNlOwoKaWYod2ViYXV0aG5EZXZpY2VQcm9maWxlcy5sZW5ndGg+MikgewogICAgaGFzV2ViQXV0aE4gPSB0cnVlOwp9CmlmKHB1c2hEZXZpY2VQcm9maWxlcy5sZW5ndGg+MikgewogICAgaGFzUHVzaCA9IHRydWU7Cn0KCgptZmFzID0geyAKICAgICAgICAgICJQdXNoIjogIlB1c2ggbm90aWZpY2F0aW9uIHZpYSBhdXRoZW50aWNhdG9yIGFwcCIsIAogICAgICAgICAiV2ViQXV0aE4iOiAiU2VjdXJpdHkgS2V5L1RvdWNoSUQvV2luZG93c0hlbGxvL1Bhc3NLZXkiLCAKICAgICAgICAgICAvLyJRUiIgOiAiUVIgQ29kZSBDYXNjYWRlZCBDb250ZXh0IChXZWJBdXRoTikiLAogICAgICAgICAgICJTTVMiIDogIlNNUyBDYXNjYWRlZCBDb250ZXh0IChXZWJBdXRoTikiLAogICAgICAgICAgLy8iRW1haWwiIDogIkUtbWFpbCBDYXNjYWRlZCBDb250ZXh0IChXZWJBdXRoTikiLAogICAgICAgICAgLy8gIlNNU01MIiA6ICJTTVMgTWFnaWMgTGluayIKICAgICAgIH07CgoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ2hvaWNlQ2FsbGJhY2sKKQoKdmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKCi8vIEFkZCBlbnRyeSB0byBtdWx0aSB2YWx1ZQp2YXIgY2hvaWNlcyA9IFtdOwppZihoYXNQdXNoPT10cnVlKXsKICAgICAgY2hvaWNlcy5wdXNoKG1mYXMuUHVzaCk7Cn0KaWYoaGFzV2ViQXV0aE49PXRydWUpewogICAgICBjaG9pY2VzLnB1c2gobWZhcy5XZWJBdXRoTik7CiAgICAgIC8vY2hvaWNlcy5wdXNoKG1mYXMuUVIpOwogICAgICAvL2Nob2ljZXMucHVzaChtZmFzLlNNUyk7CiAgICAvL2Nob2ljZXMucHVzaChtZmFzLkVtYWlsKTsKCn0KLy9jaG9pY2VzLnB1c2gobWZhcy5TTVNNTCk7CmZ1bmN0aW9uIHNldEN1c3RvbUF0dHJWYWx1ZSAoY3VzdG9tQXR0ck5hbWUsY3VzdG9tQXR0clZhbHVlKQp7CiAgdmFyIGlkID0gc2hhcmVkU3RhdGUuZ2V0KCdfaWQnKTsKICB2YXIgZnJJZG1DdXN0b21BdHRyaWJ1dGVzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShpZCwgJ2ZyLWlkbS1jdXN0b20tYXR0cnMnKTsKICBpZiAoZnJJZG1DdXN0b21BdHRyaWJ1dGVzKQogIHsKICAgIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QgPSBKU09OLnBhcnNlKFN0cmluZyhmcklkbUN1c3RvbUF0dHJpYnV0ZXMudG9BcnJheSgpWzBdKSk7CiAgICBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdID0gY3VzdG9tQXR0clZhbHVlOwogICAgdmFyIGpzb25fc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0KTsKICAgIGlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoaWQsICJmci1pZG0tY3VzdG9tLWF0dHJzIixbanNvbl9zdHJpbmddKTsKICB9Cn0KCgovL0NhbGxiYWNrIHRvIHByZXNlbnQgYW5kIHJldHJpZXZlIHNlbGVjdGVkIG9yZyBhbmQgc2V0Ci8vc2VsZWN0ZWQgdGhlbWUgZm9yIHNldHRpbmcgaW4gdGhlIG5leHQgbm9kZQoKCgp3aXRoIChmcikgewogICAgICBpZiAoY2hvaWNlcy5sZW5ndGggPCAyKSBhY3Rpb24gPSBBY3Rpb24uZ29UbyhvdXRjb21lKS5idWlsZCgpOwogICAgZWxzZSB7CiAgICAgICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soCiAgICAgICAgICAgICAgICAgICAgICAiU3Ryb25nIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkLiBQbGVhc2Ugc2VsZWN0IHlvdXIgcHJlZmVycmVkIGZvcm0gb2Ygc3Ryb25nIGF1dGhlbnRpY2F0aW9uIGZyb20gdGhlIGxpc3QgYmVsb3cuIiwKICAgICAgICAgICAgICAgICAgY2hvaWNlcywKICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgZmFsc2UKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApLndpdGhTdGFnZShKU09OLnN0cmluZ2lmeSh7ICJDaG9pY2VDYWxsYmFjayI6IFsgeyAiZGlzcGxheVR5cGUiOiJyYWRpbyIgfSBdIH0pKS53aXRoSGVhZGVyKCJDaG9vc2UgTWV0aG9kIikuYnVpbGQoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBzZWxlY3RlZEluZGV4ID0gY2FsbGJhY2tzLmdldCgwKS5nZXRTZWxlY3RlZEluZGV4ZXMoKVswXTsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkTmFtZTsKICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1mYXMpIGlmIChjaG9pY2VzW3NlbGVjdGVkSW5kZXhdID09IG1mYXNba2V5XSkgc2VsZWN0ZWROYW1lID0ga2V5OwogICAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoInNlbGVjdGVkTmFtZSIsIHNlbGVjdGVkTmFtZSk7CiAgICAgICAgICAgICAgc2V0Q3VzdG9tQXR0clZhbHVlICgiY3VzdG9tX2Zhdm91cml0ZUZhY3RvciIsc2VsZWN0ZWROYW1lKTsKICAgICAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8oc2VsZWN0ZWROYW1lKS5idWlsZCgpOwogICAgICAgIH0gICAKICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"7e3d7067-d50f-4674-8c76-a3e13a810c33\",\"name\":\"Scripted Module - Server Side\",\"description\":\"Default global script for server side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgp2YXIgU1RBUlRfVElNRSA9IDk7ICAvLyA5YW0KdmFyIEVORF9USU1FICAgPSAxNzsgLy8gNXBtCnZhciBsb25naXR1ZGUsIGxhdGl0dWRlOwp2YXIgbG9jYWxUaW1lOwoKbG9nZ2VyLm1lc3NhZ2UoIlN0YXJ0aW5nIHNjcmlwdGVkIGF1dGhlbnRpY2F0aW9uIik7CmxvZ2dlci5tZXNzYWdlKCJVc2VyOiAiICsgdXNlcm5hbWUpOwoKdmFyIHVzZXJQb3N0YWxBZGRyZXNzID0gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKTsKbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgYWRkcmVzczogIiArIHVzZXJQb3N0YWxBZGRyZXNzKTsKCmdldExvbmdpdHVkZUxhdGl0dWRlRnJvbVVzZXJQb3N0YWxBZGRyZXNzKCk7CmdldExvY2FsVGltZSgpOwoKbG9nZ2VyLm1lc3NhZ2UoIkN1cnJlbnQgdGltZSBhdCB0aGUgdXNlcnMgbG9jYXRpb246ICIgKyBsb2NhbFRpbWUuZ2V0SG91cnMoKSk7CmlmIChsb2NhbFRpbWUuZ2V0SG91cnMoKSA8IFNUQVJUX1RJTUUgfHwgbG9jYWxUaW1lLmdldEhvdXJzKCkgPiBFTkRfVElNRSkgewogICAgbG9nZ2VyLmVycm9yKCJMb2dpbiBmb3JiaWRkZW4gb3V0c2lkZSB3b3JrIGhvdXJzISIpOwogICAgYXV0aFN0YXRlID0gRkFJTEVEOwp9IGVsc2UgewogICAgbG9nZ2VyLm1lc3NhZ2UoIkF1dGhlbnRpY2F0aW9uIGFsbG93ZWQhIik7CiAgICBhdXRoU3RhdGUgPSBTVUNDRVNTOwp9CgpmdW5jdGlvbiBnZXRMb25naXR1ZGVMYXRpdHVkZUZyb21Vc2VyUG9zdGFsQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlclBvc3RhbEFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwogICAgICAvL3RoZSBhYm92ZSBVUkkgaGFzIHRvIGJlIGV4dGVuZGVkIHdpdGggYW4gQVBJX0tFWSBpZiB1c2VkIGluIGEgZnJlcXVlbnQgbWFubmVyCiAgICAgIC8vc2VlIGRvY3VtZW50YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9nZW9jb2RpbmcvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIGdlb2NvZGUgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIHZhciBpOwogICAgZm9yIChpID0gMDsgaSA8IGdlb2NvZGUucmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciByZXN1bHQgPSBnZW9jb2RlLnJlc3VsdHNbaV07CiAgICAgICAgbGF0aXR1ZGUgPSByZXN1bHQuZ2VvbWV0cnkubG9jYXRpb24ubGF0OwogICAgICAgIGxvbmdpdHVkZSA9IHJlc3VsdC5nZW9tZXRyeS5sb2NhdGlvbi5sbmc7CgogICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJsYXRpdHVkZToiICsgbGF0aXR1ZGUgKyAiIGxvbmdpdHVkZToiICsgbG9uZ2l0dWRlKTsKICAgIH0KfQoKZnVuY3Rpb24gZ2V0TG9jYWxUaW1lKCkgewoKICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7CiAgICB2YXIgbG9jYXRpb24gPSAibG9jYXRpb249IiArIGxhdGl0dWRlICsgIiwiICsgbG9uZ2l0dWRlOwogICAgdmFyIHRpbWVzdGFtcCA9ICJ0aW1lc3RhbXA9IiArIG5vdzsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS90aW1lem9uZS9qc29uPyIgKyBsb2NhdGlvbiArICImIiArIHRpbWVzdGFtcCk7CiAgICAgIHJlcXVlc3Quc2V0TWV0aG9kKCJHRVQiKTsKICAgICAgLy90aGUgYWJvdmUgVVJJIGhhcyB0byBiZSBleHRlbmRlZCB3aXRoIGFuIEFQSV9LRVkgaWYgdXNlZCBpbiBhIGZyZXF1ZW50IG1hbm5lcgogICAgICAvL3NlZSBkb2N1bWVudGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vdGltZXpvbmUvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIHRpbWV6b25lID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICB2YXIgbG9jYWxUaW1lc3RhbXAgPSBwYXJzZUludChub3cpICsgcGFyc2VJbnQodGltZXpvbmUuZHN0T2Zmc2V0KSArIHBhcnNlSW50KHRpbWV6b25lLnJhd09mZnNldCk7CiAgICBsb2NhbFRpbWUgPSBuZXcgRGF0ZShsb2NhbFRpbWVzdGFtcCoxMDAwKTsKfQoKZnVuY3Rpb24gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKSB7CiAgICB2YXIgdXNlckFkZHJlc3NTZXQgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCAicG9zdGFsQWRkcmVzcyIpOwogICAgaWYgKHVzZXJBZGRyZXNzU2V0ID09IG51bGwgfHwgdXNlckFkZHJlc3NTZXQuaXNFbXB0eSgpKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIGFkZHJlc3Mgc3BlY2lmaWVkIGZvciB1c2VyOiAiICsgdXNlcm5hbWUpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKQp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3b7c5bbe-5a80-4ba1-8918-6a3e2ef891c4\",\"name\":\"CheckIfValidSession\",\"description\":\"Check if a valid session already exists\",\"script\":\"aWYgKHR5cGVvZiBleGlzdGluZ1Nlc3Npb24gIT09ICd1bmRlZmluZWQnKQp7CiAgb3V0Y29tZSA9ICJoYXNTZXNzaW9uIjsKfQplbHNlCnsKICBvdXRjb21lID0gIm5vU2Vzc2lvbiI7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"320012d2-ad02-401a-871e-3973db81a3d7\",\"name\":\"Demo - Journey Chooser\",\"description\":\"null\",\"script\":\"Ly8gRGlzcGxheSBjaG9pY2Ugb2Ygam91cm5leXMKLy8gU2VlIGh0dHBzOi8vY2RuLWljb25zLXBuZy5mbGF0aWNvbi5jb20gZm9yIGV4YW1wbGUgaWNvbnMKdmFyIGpvdXJuZXlzID0gWwogIC8veyAibmFtZSI6ICJMZWdhY3kgTG9naW4iLCAidXJsIjogIkxvZ2luIiwgImljb24iOiAiMTI4LzYzMTcvNjMxNzU3Ny5wbmciIH0sCiAgeyAibmFtZSI6ICJMb2dpbiIsICJ1cmwiOiAiUGFzc3dvcmRsZXNzLU1hc3RlciIsICJpY29uIjogIjEyOC85Njk5Lzk2OTk1ODIucG5nIiB9LAogIC8veyAibmFtZSI6ICJSZWdpc3RlciIsICJ1cmwiOiAiRGVtby1Qd2RsZXNzLU5ldy1Vc2VyICIsICJpY29uIjogIjEyOC8xNjk4LzE2OTg1NzIucG5nIiB9LAogIC8veyAibmFtZSI6ICJRUiBMb2dpbiIsICJ1cmwiOiAiRGVtby1Qd2RMZXNzLVFSIiwgImljb24iOiAiMTI4LzEyODcvMTI4NzU1OC5wbmciIH0sCiAgLy97ICJuYW1lIjogIlNNUyBXZWJBdXRoTiIsICJ1cmwiOiAiRGVtby1Qd2RMZXNzLVNNUyIsICJpY29uIjogIjEyOC8yNzA0LzI3MDQxNjcucG5nIiB9LAogIC8veyAibmFtZSI6ICJTTVMgTWFnaWMgTGluayIsICJ1cmwiOiAiRGVtby1Qd2RMZXNzLVNNUy1TaW1wbGUiLCAiaWNvbiI6ICIxMjgvMjcwNC8yNzA0MTY3LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiSUQgUHJvb2ZpbmciLCAidXJsIjogIkRlbW8tT25GaWRvIiwgImljb24iOiAiMTI4LzYwNjEvNjA2MTM5Ni5wbmciIH0sCiAgLy97ICJuYW1lIjogIlJlZ2lzdGVyK0lEVi1MaXZlIiwgInVybCI6ICJEZW1vLVNlbGZSZWdpc3RyYXRpb24iLCAiaWNvbiI6ICIxMjgvMTY5OC8xNjk4NTcyLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUmVnaXN0ZXIrSURWLVNhbmRib3giLCAidXJsIjogIkRlbW8tU2VsZlJlZ2lzdHJhdGlvblNhbmRib3giLCAiaWNvbiI6ICIxMjgvMTY5OC8xNjk4NTcyLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUmVtZW1iZXIgVXNlcm5hbWVzIiwgInVybCI6ICJEZW1vLVJlbWVtYmVyTXlVc2VybmFtZSIsICJpY29uIjogIjEyOC84ODkvODg5NjY4LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUGVlciBSZWNvdmVyeSIsICJ1cmwiOiAiRGVtby1SZWNvdmVyeSIsICJpY29uIjogIjEyOC8yNTk3LzI1OTcxNDMucG5nIiB9LAogIC8veyAibmFtZSI6ICJGaW5nZXJwcmludEpTIiwgInVybCI6ICJGaW5nZXJwcmludEpTIiwgImljb24iOiAiLzEyOC84MzM3LzgzMzc3MDIucG5nIiB9LAogIC8veyAibmFtZSI6ICJGaW5nZXJwcmludEpTIFBybyIsICJ1cmwiOiAiRmluZ2VycHJpbnRQcm9KUyIsICJpY29uIjogIi8xMjgvODMzNy84MzM3NzAyLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUmVzZXQgUGFzc3dvcmQiLCAidXJsIjogIlJlc2V0UGFzc3dvcmQiLCAiaWNvbiI6ICIxMjgvMTAwMC8xMDAwOTMzLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiU29jaWFsIExvZ2luIiwgInVybCI6ICJEZW1vLVNvY2lhbCIsICJpY29uIjogIjEyOC8zMDAvMzAwMjIxLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiU0FNTCIsICJ1cmwiOiAiRGVtby1TQU1MIiwgImljb24iOiAiMTI4LzI5LzI5NjExLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiTUZBLU9BVEgiLCAidXJsIjogIkRlbW8tTUZBLU9BVEgiLCAiaWNvbiI6ICIxMjgvNzQ3Ni83NDc2Nzk2LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiTUZBLVB1c2giLCAidXJsIjogIkRlbW8tTUZBLVB1c2giLCAiaWNvbiI6ICIxMjgvNzQ3Ni83NDc2Nzk2LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUGFzc3dvcmRsZXNzIiwgInVybCI6ICJEZW1vLU1GQS1QYXNzd2RsZXNzIiwgImljb24iOiAiMTI4LzI3NjcvMjc2NzE0Ni5wbmciIH0sICAKICAvL3sgIm5hbWUiOiAiTUZBLUNob2ljZSIsICJ1cmwiOiAiRGVtby1NRkEtQ2hvaWNlIiwgImljb24iOiAiMTI4Lzc0NzYvNzQ3Njc5Ni5wbmciIH0sCiAgLy97ICJuYW1lIjogIlByb2dyZXNzaXZlIFByb2ZpbGUiLCAidXJsIjogIlByb2dyZXNzaXZlUHJvZmlsZSIsICJpY29uIjogIjEyOC83MzE5LzczMTk1MDkucG5nIiB9LAogIC8veyAibmFtZSI6ICJBZ2UtQmFzZWQgTG9naW4iLCAidXJsIjogIkRlbW8tQWdlQmFzZWRMb2dpbiIsICJpY29uIjogIjEyOC8zMDgxLzMwODE5NjkucG5nIiB9LAogIC8veyAibmFtZSI6ICJNdWx0aSBCcmFuZCIsICJ1cmwiOiAiRGVtby1NdWx0aUJyYW5kIiwgImljb24iOiAiMTI4LzY5ODAvNjk4MDczNS5wbmciIH0sCiAgLy97ICJuYW1lIjogIkFudGkgRnJhdWQiLCAidXJsIjogIjEtRGVtby1DaG9vc2VyLUF1dG9BY2Nlc3MiLCAiaWNvbiI6ICIxMjgvMjg2Ny8yODY3NzI1LnBuZyIgfSwKICAKICAKXQoKCnZhciBJQ09OUyA9ICJodHRwczovL2Nkbi1pY29ucy1wbmcuZmxhdGljb24uY29tLyIKdmFyIFNJWkUgPSAiMjQiOwoKdmFyIGNzcyA9ICIqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfSAgLmNvbHVtbiB7IGZsb2F0OiBsZWZ0OyB3aWR0aDogNTAlOyBwYWRkaW5nOiAxMHB4OyB0ZXh0LWFsaWduOmxlZnQ7IH0gLnJvdzphZnRlciB7IGNvbnRlbnQ6IFwiXCI7IGRpc3BsYXk6IHRhYmxlOyBjbGVhcjogYm90aDsgfSAuYm94IHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgIGhlaWdodDogNjBweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBwYWRkaW5nOiAwIDEwcHg7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsgY29sb3I6IHJnYigwLCAwLCAwKTsgYm9yZGVyLWNvbG9yOiByZ2IoMCwgMCwgMCk7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDoxcHg7IG1hcmdpbi1ib3R0b206IDJweDsgIH0gLmljb24geyBoZWlnaHQ6IDMycHg7IG1pbi13aWR0aDogMzJweDsgbWFyZ2luLXJpZ2h0OiAxMHB4OyB9IGE6aG92ZXIgeyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0iOwoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKKQoKCndpdGgoZnIpIHsKICAgIHZhciBzY3JpcHQ7CiAgICBmdW5jdGlvbiBjcmVhdGVTY3JpcHQoKSB7CiAgICAgICAgICB2YXIgbGVmdCA9ICIiOwogICAgICAgIHZhciByaWdodCA9ICIiOwogICAgICAgICAgZm9yIChpIGluIGpvdXJuZXlzKSB7CiAgICAgICAgICAgIHZhciBlbGVtID0gJzxhIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tYmxvY2sgYm94XCIgaHJlZj1cImh0dHBzOi8vb3BlbmFtLXZvbGtlci1kZW1vLmZvcmdlYmxvY2tzLmNvbS9hbS9YVUk/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPScgKyBqb3VybmV5c1tpXVsidXJsIl0gKyAnXCI+PGltZyBjbGFzcz1cImljb25cIiBzcmM9XCInICsgSUNPTlMgKyBqb3VybmV5c1tpXVsiaWNvbiJdICsgJ1wiPjxzcGFuPicgKyBqb3VybmV5c1tpXVsibmFtZSJdICsgJzwvc3Bhbj48L2E+JzsKICAgICAgICAgICAgICBpZiAoaSAlIDIgPT0gMCkgCiAgICAgICAgICAgICAgICAgIGxlZnQgKz0gZWxlbTsKICAgICAgICAgICAgICBlbHNlIAogICAgICAgICAgICAgICAgICByaWdodCArPSBlbGVtOwogICAgICAgIH0KICAgICAgICByZXR1cm4gU3RyaW5nKCJkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSkuaW5uZXJIVE1MID0gJyIgKyBjc3MgKyAiJyBcblwKICAgICAgICAgICAgdmFyIGNob29zZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgXG5cCiAgICAgICAgICAgIGNob29zZXIuaWQgPSAnY2hvb3Nlcic7IFxuXAogICAgICAgICAgICB2YXIgY2IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FsbGJhY2tzUGFuZWwnKTsgXG5cCiAgICAgICAgICAgIGNiLmluc2VydEJlZm9yZShjaG9vc2VyLCBjYi5maXJzdENoaWxkKTsgXG5cCiAgICAgICAgICAgIGNob29zZXIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJyb3dcIj48ZGl2IGNsYXNzPVwiY29sdW1uXCI+IitsZWZ0KyI8L2Rpdj48ZGl2IGNsYXNzPVwiY29sdW1uXCI+IityaWdodCsiPC9kaXY+PC9kaXY+JyBcblwKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignYnV0dG9uW3R5cGU9c3VibWl0XScpKSB7IFxuXAogICAgICAgICAgICAgICAgdmFyIGIgPSBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvblt0eXBlPXN1Ym1pdF0nKTsgXG5cCiAgICAgICAgICAgICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbigpIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nob29zZXInKS5yZW1vdmUoKTsgIH0pOyBcblwKICAgICAgICAgICAgfSBcblwKICAgICAgICAiKTsKICAgIH0gIAogIAogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBBY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IFNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhjcmVhdGVTY3JpcHQoKSkKICAgICAgICApLmJ1aWxkKCkKICAgIH0gZWxzZSBhY3Rpb24gPSBBY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"d22f9a0c-426a-4466-b95e-d0f125b0d5fa\",\"name\":\"OAuth2 Access Token Modification Script\",\"description\":\"Default global script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"0ab1dc10-a54f-476f-ad07-2a04915cd443\",\"name\":\"wks-DisplayUserName\",\"description\":\"DisplayUserName\",\"script\":\"LyogRGlzcGxheSBVc2VybmFtZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBEaXNwbGF5IHRoZSB1c2VybmFtZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICB0cnkgewogICAgdmFyIG91dGNvbWUgPSAndHJ1ZSc7CiAgICB2YXIgdXNlcm5hbWUgPSBub2RlU3RhdGUuZ2V0KCd1c2VybmFtZScpLmFzU3RyaW5nKCk7CgogICAgLy8gU3BlY2lmeSB0aGUgbWVzc2FnZSB5b3Ugd2FudCB0byBkaXNwbGF5LiBZb3UgbWF5IHVzZSBIVE1MIGZvciBmb3JtYXR0aW5nLiBBdm9pZCBsaW5lIGJyZWFrcyEgVXNlIDxicj4gaW5zdGVhZC4KICAgIHZhciBtZXNzYWdlID0gJ1lvdXIgRW5jb3JlIHVzZXJuYW1lIGlzOjxoMyBzdHlsZT0iY29sb3I6IzI5NDhBNzsiPicrdXNlcm5hbWUrJzwvaDM+JzsKCiAgICB2YXIgYW5jaG9yID0gJ2FuY2hvci0nK2dlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKTsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4gXAogICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiBcCiAgICAgIGZ1bmN0aW9uIChlKSB7XG4gXAogICAgICAgIHZhciBtZXNzYWdlID0gZS5maXJzdEVsZW1lbnRDaGlsZDtcbiBcCiAgICAgICAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIithbmNob3IrIicpIHtcbiBcCiAgICAgICAgICBtZXNzYWdlLmlubmVySFRNTCA9ICciK21lc3NhZ2UrIic7XG4gXAogICAgICAgIH1cbiBcCiAgICAgIH0pIjsKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgICAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKICAgICkKICAgIGlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICAgIG5ldyBmci5UZXh0T3V0cHV0Q2FsbGJhY2soCiAgICAgICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgICAgICBhbmNob3IKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9CiAgICBlbHNlIHsKICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgIH0KICB9IGNhdGNoIChlcnJvcikgewogICAgbG9nZ2VyLmVycm9yKCdFcnJvcjogJyArIGVycm9yKTsKICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2Vycm9yJywgZXJyb3IubWVzc2FnZSk7CiAgfQoKICAgLyoKICAgICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAgICogCiAgICAqIEV4YW1wbGU6CiAgICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICAqLwogIGZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbihjKSB7CiAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkqMTB8MDsKICAgICAgICAgIHZhciB2ID0gcjsKICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDEwKTsKICAgICAgfSk7CiAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"9674f7d1-7448-4544-879e-91587bb04f46\",\"name\":\"Get esv admin token\",\"description\":\"Get esc admin token\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwp2YXIgYWRtaW5Ub2tlbiA9ICBzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi5hZG1pbi50b2tlbiIpOwpzaGFyZWRTdGF0ZS5wdXQoJ2FkbWluVG9rZW4nLCBhZG1pblRva2VuKTsKb3V0Y29tZSA9ICJ0cnVlIjs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c0413dae-fdd1-45b7-9302-61d6ae02b194\",\"name\":\"FR-Debug\",\"description\":\"Debug to show AM States\",\"script\":\"LyogRElTQ0xBSU1FUjogVGhpcyBjb2RlIGlzIHByb3ZpZGVkIHRvIHlvdSBleHByZXNzbHkgYXMgYW4gZXhhbXBsZSAgKOKAnFNhbXBsZSBDb2Rl4oCdKS4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBpbmRpdmlkdWFsIHJlY2lwaWVudCB1c2VyLCBpbiBoaXMvaGVyIHNvbGUgZGlzY3JldGlvbiwgdG8gZGlsaWdlbmNlIHN1Y2ggU2FtcGxlIENvZGUgZm9yIGFjY3VyYWN5LCBjb21wbGV0ZW5lc3MsIHNlY3VyaXR5LCBhbmQgZmluYWwgZGV0ZXJtaW5hdGlvbiBmb3IgYXBwcm9wcmlhdGVuZXNzIG9mIHVzZS4gCiAqIEFOWSBTQU1QTEUgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiDigJxBUyBJU+KAnSBJUyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gRk9SR0VST0NLIEFORCBJVFMgTElDRU5TT1JTIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUywgIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCwgT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTICBPRiBNRVJDSEFOVEFCSUxJVFksIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogKiBGT1JHRVJPQ0sgU0hBTEwgTk9UIEhBVkUgQU5ZIExJQUJJTElUWSBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBBTlkgVVNFLCBJTVBMRU1FTlRBVElPTiwgSU5URUdSQVRJT04sIE9SIENPTkZJR1VSQVRJT04gT0YgQU5ZIFNBTVBMRSBDT0RFIElOIEFOWSBQUk9EVUNUSU9OIEVOVklST05NRU5UIE9SIEZPUiBBTlkgQ09NTUVSQ0lBTCBERVBMT1lNRU5UKFMpLgogKgogKiBTY3JpcHQgTmFtZTogQU0gSm91cm5leSBUZW1wbGF0ZQogKgogKiBBdXRob3JzOiBzZUBmb3JnZXJvY2suY29tCiAqIAogKiBUaGlzIHNjcmlwdCBzaG93cyBhIGRlZmF1bHQgdGVtcGxhdGUgb24gaG93IHlvdXIgU2NyaXB0aW5nIERlY2lzaW9uIE5vZGUgc2NyaXB0cyBzaG91bGQgYmUgd3JpdHRlbi4KICogSXQgc2hvd3MgeW91IGhvdyB0byB3b3JrIHdpdGggc2hhcmVkU3RhdGUsIHRyYW5zaWVudFN0YXRlLCBzZWN1cmVTdGF0ZS4KICogVGhpcyBpcyBhIGdyZWF0IGRlYnVnIHNjcmlwdCB0byB1c2UgaW4gYW5kIG9mIGl0c2VsZiBhcyBpdCB3aWxsIGRpc3BsYXkgYWxsIHRocmVlIHN0YXRlcyBtZW50aW9uZWQgYWJvdmUgaW4gYSBmb3JtYXR0ZWQgdGFibGUKICogCiAqIFRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCBub3Qgd29yayBwcm9wZXJseSBhcyBpcy4gCiAqIEl0IHJlcXVpcmVzIHNvbWUgbm9kZXMgdGhhdCBzZXQgYXQgbGVhc3Qgc2hhcmVkU3RhdGUgYmVmb3JlIGl0IGNhbiBvcGVyYXRlLgogKiBGb3IgZXhhbXBsZSwgc2V0IGEgcGFnZSBub2RlIHdpdGggUGxhdGZvcm0gVXNlcm5hbWUgYW5kIFBsYXRmb3JtIFBhc3N3b3JkIG5vZGVzCiAqIAogKiBUaGlzIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKKi8KCi8vIERvIGV2ZXJ5dGhpbmcgaW4gYSBzZWxmLWludm9raW5nIGZ1bmN0aW9uIGFuZCBkbyBub3Qgd3JpdGUgY29kZSBvdXRzaWRlIG9mIGEgZnVuY3Rpb24gb3IgeW91IHdpbGwgcGF5IGRlYXJseS4gCi8vIFRoaXMgaXMgYmVjYXVzZSBvZiB0b3AtbGV2ZWwgc2NvcGluZy93aGl0ZWxpc3RpbmcvZXRjIGlzc3VlcyB0aGF0IGdpdmUgeW91ICd1bmRlZmluZWQnIGVycm9ycy4KKGZ1bmN0aW9uICgpIHsKICBsb2dnZXIubWVzc2FnZSgiU2NyaXB0OiBzdGFydCIpOyAvLyBiZWdpbmcgb2Ygc2NyaXB0IG1haW4KICBvdXRjb21lID0gInRydWUiOyAvLyA8LSBmaWxsIGluIGRlZmF1bHQgb3V0Y29tZSBoZXJlIGFuZCBpdCBzaG91bGQgbWF0Y2ggYSAiU2NyaXB0IE91dGNvbWVzIiBzZXR0aW5nIG9uIHRoaXMgbm9kZSBpdHNlbGYKCiAgLy8gYnVpbGQgb3V0cHV0IGh0bWwgdGFibGUgdGhhdCB3aWxsIGJlIHNlbnQgYmFjayB0byBicm93c2VyCiAgdmFyIG91dHB1dCA9IGNyZWF0ZUh0bWwoKTsKCiAgLy8gaXNzdWUgY2FsbGJhY2sgdG8gYnJvd3NlciBhZnRlciBvdXRwdXQgaHRtbCBpcyBidWlsdCBmcm9tIGNyZWF0ZUh0bWwoKSBmdW5jdGlvbgogIGRpc3BsYXlNZXNzYWdlKG91dHB1dCk7CiAgCiAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmlwdDogZW5kIik7IC8vIGVuZCBvZiBzY3JpcHQgbWFpbgoKICAvKgogICogUHV0IGZ1bmN0aW9ucyBiZWxvdyBoZXJlCiAgKi8KICBmdW5jdGlvbiBjcmVhdGVIdG1sKCkgewogICAgICB2YXIgaHRtbCA9ICI8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkXCI+IjsKICAgICAgaHRtbCArPSAiPHRoZWFkIGNsYXNzPVwidGhlYWQtZGFya1wiPjx0cj48dGggY2xhc3M9XCJweC0xIHB5LTFcIiBjb2xzcGFuPVwiMlwiPlNoYXJlZCBTdGF0ZSBWYXJpYWJsZXMgKHNoYXJlZFN0YXRlLmdldCk8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAvLyBnZXQgYWxsIHRoZSBrZXlzIGluIG5vZGVTdGF0ZQogICAgICB2YXIgaXRlcmF0b3IgPSBub2RlU3RhdGUua2V5cygpLml0ZXJhdG9yKCk7CiAgICAgIHZhciBzdGF0ZUtleXMgPSBbXTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgc3RhdGVLZXlzLnB1c2goaXRlcmF0b3IubmV4dCgpLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICAgIHN0YXRlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZUtleSkgewogICAgICAgIGlmIChzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpIAogICAgICAgICAgICAmJiBzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpLnRvU3RyaW5nKCkgIT09ICJudWxsIgogICAgICAgICAgICAmJiBzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpLnRvU3RyaW5nKCkgIT09ICIiCiAgICAgICAgICAgICYmICIiK3N0YXRlS2V5ICE9PSAib2JqZWN0QXR0cmlidXRlcyIgIC8vIGdvaW5nIHRvIHB1bGwgb3V0IG9iamVjdEF0dHJpYnV0ZXMgbGF0ZXIKICAgICAgICAgICAgJiYgIiIrc3RhdGVLZXkgIT09ICJwYWdlTm9kZUNhbGxiYWNrcyIpIC8vcGFnZU5vZGVDYWxsYmFja3MgYXJlIGludGVybmFsIHRvIHRoZSBQYWdlIE5vZGUgYW5kIG5vdCBuZWVkZWQvdXNlZCAgCiAgICAgICAgewogICAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBzdGF0ZUtleSArICI8L3RkPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpICsgIjwvdGQ+PC90cj4iOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGh0bWwgKz0gIjwvdGFibGU+IjsKCiAgICAgIGh0bWwgKz0gIjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWRcIj4iOwogICAgICAKICAgICAgaHRtbCArPSAiPHRoZWFkIGNsYXNzPVwidGhlYWQtZGFya1wiPjx0cj48dGggY2xhc3M9XCJweC0xIHB5LTFcIiBjb2xzcGFuPVwiMlwiPlRyYW5zaWVudCBTdGF0ZSBWYXJpYWJsZXMgKHRyYW5zaWVudFN0YXRlLmdldCk8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAvLyBnZXQgYWxsIHRoZSBrZXlzIGluIG5vZGVTdGF0ZQogICAgICB2YXIgaXRlcmF0b3IgPSBub2RlU3RhdGUua2V5cygpLml0ZXJhdG9yKCk7CiAgICAgIHZhciBzdGF0ZUtleXMgPSBbXTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgc3RhdGVLZXlzLnB1c2goaXRlcmF0b3IubmV4dCgpLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICAgIHN0YXRlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZUtleSkgewogICAgICAgIGlmICh0cmFuc2llbnRTdGF0ZS5nZXQoc3RhdGVLZXkpIAogICAgICAgICAgICAmJiB0cmFuc2llbnRTdGF0ZS5nZXQoc3RhdGVLZXkpLnRvU3RyaW5nKCkgIT09ICJudWxsIiAKICAgICAgICAgICAgJiYgdHJhbnNpZW50U3RhdGUuZ2V0KHN0YXRlS2V5KS50b1N0cmluZygpICE9PSAiIgogICAgICAgICAgICAmJiAiIitzdGF0ZUtleSAhPT0gIm9iamVjdEF0dHJpYnV0ZXMiKSAKICAgICAgICB7CiAgICAgICAgICBodG1sICs9ICI8dHI+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIHN0YXRlS2V5ICsgIjwvdGQ+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIHRyYW5zaWVudFN0YXRlLmdldChzdGF0ZUtleSkgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwoKICAgICAgaHRtbCArPSAiPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPiI7CiAgICAgIC8vIEJ1aWxkIHRoZSB0YWJsZSBvZiBvYmplY3RBdHRyaWJ1dGVzIGluIHNoYXJlZFN0YXRlCiAgICAgIGlmIChzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKSkKICAgICAgeyAgIAogICAgICAgIGh0bWwgKz0gIjx0aGVhZCBjbGFzcz1cInRoZWFkLWRhcmtcIj48dHI+PHRoIGNsYXNzPVwicHgtMSBweS0xXCIgY29sc3Bhbj1cIjJcIj5TaGFyZWQgT2JqZWN0IEF0dHJpYnV0ZXMgKHNoYXJlZFN0YXRlLmdldCk8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAgIHZhciBlbnRyaWVzID0gc2hhcmVkU3RhdGUuZ2V0KCdvYmplY3RBdHRyaWJ1dGVzJykuZW50cnlTZXQoKS50b0FycmF5KCk7CiAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkgeyAvLyBzaG93aW5nIGhvdyB0byB1c2UgZW50cnlTZXQoKS4gQ2FuIHVzZSBrZXlTZXQoKS4KICAgICAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBlbnRyeS5nZXRLZXkoKSArICI8L3RkPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBlbnRyeS5nZXRWYWx1ZSgpICsgIjwvdGQ+PC90cj4iOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGh0bWwgKz0gIjx0cj48dGQgY29sc3Bhbj1cIjJcIj5FTVBUWTwvdGQ+PC90cj4iOwogICAgICB9CiAgICAgIGh0bWwgKz0gIjwvdGFibGU+IjsKCiAgICAgIGh0bWwgKz0gIjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWRcIj4iOwogICAgICAvLyBCdWlsZCB0aGUgdGFibGUgb2Ygb2JqZWN0QXR0cmlidXRlcyBpbiB0cmFuc2llbnRTdGF0ZQogICAgICBpZiAodHJhbnNpZW50U3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikpCiAgICAgIHsKICAgICAgICBodG1sICs9ICI8dGhlYWQgY2xhc3M9XCJ0aGVhZC1kYXJrXCI+PHRyPjx0aCBjbGFzcz1cInB4LTEgcHktMVwiIGNvbHNwYW49XCIyXCI+VHJhbnNpZW50IE9iamVjdCBBdHRyaWJ1dGVzICh0cmFuc2llbnRTdGF0ZS5nZXQpPC90aD48L3RyPjwvdGhlYWQ+IjsKICAgICAgICB2YXIga2V5cyA9IHRyYW5zaWVudFN0YXRlLmdldCgnb2JqZWN0QXR0cmlidXRlcycpLmtleVNldCgpLnRvQXJyYXkoKTsKICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyAvLyBzaG93aW5nIGhvdyB0byB1c2Uga2V5U2V0KCkuIENhbiB1c2UgZW50cnlTZXQoKS4KICAgICAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBrZXkgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgdHJhbnNpZW50U3RhdGUuZ2V0KCdvYmplY3RBdHRyaWJ1dGVzJykuZ2V0KGtleSkgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPkVNUFRZPC90ZD48L3RyPiI7CiAgICAgIH0KICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwoKICAgICAgaHRtbCArPSAiPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPiI7CiAgICAgIGh0bWwgKz0gIjx0aGVhZCBjbGFzcz1cInRoZWFkLWRhcmtcIj48dHI+PHRoIGNsYXNzPVwicHgtMSBweS0xXCIgY29sc3Bhbj1cIjJcIj5ub2RlU3RhdGUuZ2V0ICh0cmFuc2llbnRTdGF0ZSwgc2VjdXJlU3RhdGUsIHNoYXJlZFN0YXRlKTwvdGg+PC90cj48L3RoZWFkPiI7CiAgICAgIC8vIGdldCBhbGwgdGhlIGtleXMgaW4gbm9kZVN0YXRlCiAgICAgIHZhciBpdGVyYXRvciA9IG5vZGVTdGF0ZS5rZXlzKCkuaXRlcmF0b3IoKTsKICAgICAgdmFyIHN0YXRlS2V5cyA9IFtdOwogICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7CiAgICAgICAgICBzdGF0ZUtleXMucHVzaChpdGVyYXRvci5uZXh0KCkudG9TdHJpbmcoKSk7CiAgICAgIH0KICAgICAgc3RhdGVLZXlzLmZvckVhY2goZnVuY3Rpb24gKHN0YXRlS2V5KSB7CiAgICAgICAgaWYgKG5vZGVTdGF0ZS5nZXQoc3RhdGVLZXkpIAogICAgICAgICAgICAmJiBub2RlU3RhdGUuZ2V0KHN0YXRlS2V5KS50b1N0cmluZygpICE9PSAibnVsbCIKICAgICAgICAgICAgJiYgbm9kZVN0YXRlLmdldChzdGF0ZUtleSkudG9TdHJpbmcoKSAhPT0gIiIKICAgICAgICAgICAgJiYgIiIrc3RhdGVLZXkgIT09ICJwYWdlTm9kZUNhbGxiYWNrcyIpIC8vcGFnZU5vZGVDYWxsYmFja3MgYXJlIGludGVybmFsIHRvIHRoZSBQYWdlIE5vZGUgYW5kIG5vdCBuZWVkZWQvdXNlZCAgCgogICAgICAgIHsKICAgICAgICAgIGh0bWwgKz0gIjx0cj48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgc3RhdGVLZXkgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgbm9kZVN0YXRlLmdldChzdGF0ZUtleSkgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwoKCiAgICAgIGh0bWwgKz0gIjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWRcIj4iOwogICAgICAvLyBsb29raW5nIGZvciBhIHdheSB0byBidWlsZCB0aGlzIEFNIFVzZXIgUHJvZmlsZSBsaXN0IGR5bmFtaWNhbGx5CiAgICAgIHZhciBvYmpBTUF0dHJzID0gWwogICAgICAgICJ1aWQiLAogICAgICAgICJjbiIsCiAgICAgICAgImluZXRVc2VyU3RhdHVzIiwKICAgICAgICAiZ2l2ZW5OYW1lIiwKICAgICAgICAic24iLAogICAgICAgICJtYWlsIiwKICAgICAgICAiZGVzY3JpcHRpb24iLAogICAgICAgICJ0ZWxlcGhvbmVOdW1iZXIiLAogICAgICAgICJzdHJlZXQiLAogICAgICAgICJsIiwKICAgICAgICAicG9zdGFsQ29kZSIsCiAgICAgICAgImNvIiwKICAgICAgICAic3QiLAogICAgICAgICJkaXNwbGF5TmFtZSIsCiAgICAgICAgImZyLWF0dHItaXN0cjEiLAogICAgICAgICJmci1hdHRyLWlzdHIyIiwKICAgICAgICAiZnItYXR0ci1pc3RyMyIsCiAgICAgICAgImZyLWF0dHItaXN0cjQiLAogICAgICAgICJmci1hdHRyLWlzdHI1IiwKICAgICAgICAiZnItYXR0ci1zdHIxIiwKICAgICAgICAiZnItYXR0ci1zdHIyIiwKICAgICAgICAiZnItYXR0ci1zdHIzIiwKICAgICAgICAiZnItYXR0ci1zdHI0IiwKICAgICAgICAiZnItYXR0ci1zdHI1IiwKICAgICAgICAiZnItYXR0ci1pbXVsdGkxIiwKICAgICAgICAiZnItYXR0ci1pbXVsdGkyIiwKICAgICAgICAiZnItYXR0ci1pbXVsdGkzIiwKICAgICAgICAiZnItYXR0ci1pbXVsdGk0IiwKICAgICAgICAiZnItYXR0ci1pbXVsdGk1IiwKICAgICAgICAiZnItYXR0ci1tdWx0aTEiLAogICAgICAgICJmci1hdHRyLW11bHRpMiIsCiAgICAgICAgImZyLWF0dHItbXVsdGkzIiwKICAgICAgICAiZnItYXR0ci1tdWx0aTQiLAogICAgICAgICJmci1hdHRyLW11bHRpNSIsCiAgICAgICAgImZyLWF0dHItaWRhdGUxIiwKICAgICAgICAiZnItYXR0ci1pZGF0ZTIiLAogICAgICAgICJmci1hdHRyLWlkYXRlMyIsCiAgICAgICAgImZyLWF0dHItaWRhdGU0IiwKICAgICAgICAiZnItYXR0ci1pZGF0ZTUiLAogICAgICAgICJmci1hdHRyLWRhdGUxIiwKICAgICAgICAiZnItYXR0ci1kYXRlMiIsCiAgICAgICAgImZyLWF0dHItZGF0ZTMiLAogICAgICAgICJmci1hdHRyLWRhdGU0IiwKICAgICAgICAiZnItYXR0ci1kYXRlNSIsCiAgICAgICAgImZyLWF0dHItaWludDEiLAogICAgICAgICJmci1hdHRyLWlpbnQyIiwKICAgICAgICAiZnItYXR0ci1paW50MyIsCiAgICAgICAgImZyLWF0dHItaWludDQiLAogICAgICAgICJmci1hdHRyLWlpbnQ1IiwKICAgICAgICAiZnItYXR0ci1pbnQxIiwKICAgICAgICAiZnItYXR0ci1pbnQyIiwKICAgICAgICAiZnItYXR0ci1pbnQzIiwKICAgICAgICAiZnItYXR0ci1pbnQ0IiwKICAgICAgICAiZnItYXR0ci1pbnQ1IgogICAgICBdOyAgCgogICAgICAvLyBCdWlsZCB0aGUgdGFibGUgb2YgaWRSZXBvc2l0b3J5IGJpbmRpbmcKICAgICAgdmFyIGF0dHJzMjsKICAgICAgaWYgKHNoYXJlZFN0YXRlLmdldCgiX2lkIikgJiYgaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpLCAidWlkIikpCiAgICAgIHsKICAgICAgICBodG1sICs9ICI8dGhlYWQgY2xhc3M9XCJ0aGVhZC1kYXJrXCI+PHRyPjx0aCBjbGFzcz1cInB4LTEgcHktMVwiIGNvbHNwYW49XCIyXCI+aWRSZXBvc2l0b3J5IEFNIFVzZXIgUHJvZmlsZTwvdGg+PC90cj48L3RoZWFkPiI7ICAgICAgICAKICAgICAgICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwogICAgICAgIG9iakFNQXR0cnMuZm9yRWFjaChmdW5jdGlvbiAoYXR0cikgewogICAgICAgICAgYXR0cnMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCBhdHRyKTsgIAogICAgICAgICAgaWYgKGF0dHJzICYmICIiK2F0dHJzICE9PSAibnVsbCIgJiYgIiIrYXR0cnMgIT09ICIiICYmICIiK2F0dHJzLnNpemUoKT4wKXsKICAgICAgICAgICAgaWYgKGF0dHJzLnNpemUoKT09PTEpewogICAgICAgICAgICAgICAgYXR0cnMgPSBzaW5nbGVWYWx1ZShhdHRycyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBodG1sICs9ICI8dHI+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIGF0dHIgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgYXR0cnMgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgICB9CiAgICAgICAgfSk7ICAgICAgCiAgICAgIH0KICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwogICAgICAKICAgICAgaHRtbCArPSAiPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPiI7CiAgICAgIGh0bWwgKz0gIjx0aGVhZCBjbGFzcz1cInRoZWFkLWRhcmtcIj48dHI+PHRoIGNsYXNzPVwicHgtMSBweS0xXCIgY29sc3Bhbj1cIjJcIj5SZXF1ZXN0IEhlYWRlcnM8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAvL2h0bWwgKz0gIjx0cj48dGQgY29sc3Bhbj1cIjJcIj4iICsgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSArICI8L3RkPjwvdHI+IjsKICAgICAgdmFyIHJIZWFkZXJzID0gU3RyaW5nKHJlcXVlc3RIZWFkZXJzKS5zcGxpdCgnXSwgJykubWFwKGZ1bmN0aW9uIChoZWFkZXIpewogICAgICAgIHJldHVybiBoZWFkZXIuc3BsaXQoJz0nKVswXS5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpOyAKICAgICAgfSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICBySGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChoZWFkZXJOYW1lKSB7CiAgICAgICAgdmFyIGhlYWRlciA9IHJlcXVlc3RIZWFkZXJzLmdldChoZWFkZXJOYW1lKTsKICAgICAgICBodG1sICs9ICI8dHI+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIGhlYWRlck5hbWUgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgaGVhZGVyLmdldCgwKSArICI8L3RkPjwvdHI+IjsKICAgICAgfSk7ICAgIAogICAgCiAgICBodG1sICs9ICI8L3RhYmxlPiI7CiAgICAgIAogICAgcmV0dXJuIGh0bWw7CiAgfQogIAogIC8vYnVpbGRzIHRoZSBodG1sIHRvIGRpc3BsYXkgdGhlIG1lc3NhZ2UgaW4gdGhlIGJyb3dzZXIgb24gdGhlIGNhbGxiYWNrCiAgLy91c2UgdmlldyBzb3VyY2UgaW4gYnJvd3NlciBhbmQgbG9vayBmb3IgY2xhc3M9ImNhbGxiYWNrLWNvbXBvbmVudCIgdG8gc2VlIGh0bWwgcmVzcG9uc2UKICBmdW5jdGlvbiBkaXNwbGF5TWVzc2FnZShtZXNzYWdlKSB7CiAgICAgIHZhciBhbmNob3IgPSAiYW5jaG9yLSIuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CiAgICAgIHZhciBoYWxpZ24gPSAibGVmdCI7CiAgICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4iLmNvbmNhdCgKICAgICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAgICAgICAgICAgICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAgICAgICAgICAgICAgICAgIiAgdmFyIG1lc3NhZ2UgPSBlLmZpcnN0RWxlbWVudENoaWxkO1xuIikuY29uY2F0KAogICAgICAgICAgICAgICAgICAgICAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwiXCI7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgbWVzc2FnZS5zdHlsZSA9IFwiXCI7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIG1lc3NhZ2UuYWxpZ24gPSBcIiIpLmNvbmNhdChoYWxpZ24pLmNvbmNhdCgiXCI7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBtZXNzYWdlLmlubmVySFRNTCA9ICciKS5jb25jYXQobWVzc2FnZSkuY29uY2F0KCInO1xuIikuY29uY2F0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICB9XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSkiKQogICAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suVGV4dE91dHB1dENhbGxiYWNrLAogICAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICAgICkKICAgICAgaWYgKG1lc3NhZ2UubGVuZ3RoICYmIGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKAogICAgICAgICAgICAgIG5ldyBmci5UZXh0T3V0cHV0Q2FsbGJhY2soCiAgICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgICAgYW5jaG9yCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkKICAgICAgICAgICkuYnVpbGQoKQogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgICAgfQogIH0KCiAgLyoKICAgKiBHZW5lcmF0ZSBhIHRva2VuIGluIHRoZSBkZXNpcmVkIGZvcm1hdC4gQWxsICd4JyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHJhbmRvbSBudW1iZXIgMC05LgogICAqIFRoaXMgaXMgbmVlZGVkIHRvIGhhdmUgYSB1bmlxdWUgZGl2KGFuY2hvci14KSBvbiB0aGUgaHRtbCBjYWxsYmFjayB0aGF0IHdlIGNhbiBwb3B1bGF0ZSBkYXRhCiAgICogRXhhbXBsZToKICAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICovCiAgZnVuY3Rpb24gZ2VuZXJhdGVOdW1lcmljVG9rZW4oZm9ybWF0KSB7CiAgICAgIHJldHVybiBmb3JtYXQucmVwbGFjZSgvW3hdL2csIGZ1bmN0aW9uIChjKSB7CiAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxMCB8IDA7CiAgICAgICAgICB2YXIgdiA9IHI7CiAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICAgIH0pOwogIH0KCiAgLy8gZ2V0IGEgc2luZ2xlVmFsdWUgZnJvbSBhIEhhc2hTZXQKICBmdW5jdGlvbiBzaW5nbGVWYWx1ZSh4KQogIHsKICAgIGlmKHguc2l6ZSgpPjApCiAgICAgIHsKICAgICAgICByZXR1cm4geC5pdGVyYXRvcigpLm5leHQoKTsKICAgICAgfQogICAgICAKICAgIHJldHVybiAiIjsKICAgIAogIH0KCn0oKSk7IC8vIHNlbGYtaW52b2tpbmcgZnVuY3Rpb24=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"10643e95-873a-4ec0-b713-a7f56760d179\",\"name\":\"FrodoTestScript4\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"0414eed8-abfd-43bb-94b5-c841a8ba2c98\",\"name\":\"pushBomb.js\",\"description\":\"null\",\"script\":\"dmFyIGF0dHJpYnV0ZSA9ICJmci1hdHRyLXN0cjIiOwp2YXIgdGhyZXNob2xkID0gMjsKb3V0Y29tZSA9ICJkZWZhdWx0IjsKdmFyIG5vdyA9IG5ldyBEYXRlKCkgIAp2YXIgZXBvY2ggPSBNYXRoLnJvdW5kKG5vdy5nZXRUaW1lKCkgLyAxMDAwKTsKdmFyIGVwb2NoQ3VycmVudE1pbnV0ZSA9IE1hdGgucm91bmQoZXBvY2gvNjApOwoKdmFyIHVzZXJBdHRyOwp2YXIgX2lkID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKdmFyIGVwb2NoQXR0ck1pbnV0ZT0wOwp2YXIgYXR0ZW1wdENvdW50PTE7Cgp2YXIgdXNlclByZWZlcmVuY2VzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShfaWQsICJmci1pZG0tcHJlZmVyZW5jZXMiKS50b1N0cmluZygpOwoKaWYodXNlclByZWZlcmVuY2VzLmluZGV4T2YoIlwiY3VzdG9tX3B1c2hcIjp0cnVlIikgPiAtMSkKewogICAgb3V0Y29tZSA9ICJzdXNwZW5kZWQiOwp9CmVsc2UKewogIHZhciB1c2VyQXR0clJhdyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoX2lkLCBhdHRyaWJ1dGUpOwogIGlmICh1c2VyQXR0clJhdyAmJiB1c2VyQXR0clJhdy5pdGVyYXRvcigpLmhhc05leHQoKSkgewogICAgICB1c2VyQXR0ciA9IEpTT04ucGFyc2UodXNlckF0dHJSYXcuaXRlcmF0b3IoKS5uZXh0KCkudG9TdHJpbmcoKSk7CiAgICAgIGVwb2NoQXR0ck1pbnV0ZSA9IHVzZXJBdHRyWzBdOwogICAgICBhdHRlbXB0Q291bnQgPSB1c2VyQXR0clsxXTsKICAgICAgYXR0ZW1wdENvdW50ID0gYXR0ZW1wdENvdW50ICsgMTsKICB9CgogIC8vaWYoCgogIHZhciBuZXdBdHRyOwogIGlmKGVwb2NoQ3VycmVudE1pbnV0ZT09ZXBvY2hBdHRyTWludXRlKSB7CiAgICAgIG5ld0F0dHIgPSBTdHJpbmcoIlsiICsgZXBvY2hBdHRyTWludXRlLnRvU3RyaW5nKCkgKyAiLCIgKyBhdHRlbXB0Q291bnQudG9TdHJpbmcoKSAgKyAiXSIpOwogIH0KICBlbHNlIHsKICAgICAgYXR0ZW1wdENvdW50PTE7CiAgICAgIG5ld0F0dHIgPSBTdHJpbmcoIlsiICsgZXBvY2hDdXJyZW50TWludXRlLnRvU3RyaW5nKCkgKyAiLCIgKyBhdHRlbXB0Q291bnQudG9TdHJpbmcoKSArICJdIik7CiAgfQogIGlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoX2lkLCAiZnItYXR0ci1zdHIyIixbbmV3QXR0cl0pOwoKICBpZihhdHRlbXB0Q291bnQ+dGhyZXNob2xkKSB7CiAgICBvdXRjb21lID0gInRydWUiOwogIH0KICBlbHNlIHsKICAgIG91dGNvbWUgPSAiZmFsc2UiOwogIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"157298c0-7d31-4059-a95b-eeb08473b7e5\",\"name\":\"Device Id (Match) - Client Side\",\"description\":\"Default global script for client side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGZvbnREZXRlY3RvciA9IChmdW5jdGlvbiAoKSB7CiAgICAvKioKICAgICAqIEphdmFTY3JpcHQgY29kZSB0byBkZXRlY3QgYXZhaWxhYmxlIGF2YWlsYWJpbGl0eSBvZiBhCiAgICAgKiBwYXJ0aWN1bGFyIGZvbnQgaW4gYSBicm93c2VyIHVzaW5nIEphdmFTY3JpcHQgYW5kIENTUy4KICAgICAqCiAgICAgKiBBdXRob3IgOiBMYWxpdCBQYXRlbAogICAgICogV2Vic2l0ZTogaHR0cDovL3d3dy5sYWxpdC5vcmcvbGFiL2phdmFzY3JpcHQtY3NzLWZvbnQtZGV0ZWN0LwogICAgICogTGljZW5zZTogQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wCiAgICAgKiAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAgICAqIFZlcnNpb246IDAuMTUgKDIxIFNlcCAyMDA5KQogICAgICogICAgICAgICAgQ2hhbmdlZCBjb21wYXJpc2lvbiBmb250IHRvIGRlZmF1bHQgZnJvbSBzYW5zLWRlZmF1bHQtZGVmYXVsdCwKICAgICAqICAgICAgICAgIGFzIGluIEZGMy4wIGZvbnQgb2YgY2hpbGQgZWxlbWVudCBkaWRuJ3QgZmFsbGJhY2sKICAgICAqICAgICAgICAgIHRvIHBhcmVudCBlbGVtZW50IGlmIHRoZSBmb250IGlzIG1pc3NpbmcuCiAgICAgKiBWZXJzaW9uOiAwLjIgKDA0IE1hciAyMDEyKQogICAgICogICAgICAgICAgQ29tcGFyaW5nIGZvbnQgYWdhaW5zdCBhbGwgdGhlIDMgZ2VuZXJpYyBmb250IGZhbWlsaWVzIGllLAogICAgICogICAgICAgICAgJ21vbm9zcGFjZScsICdzYW5zLXNlcmlmJyBhbmQgJ3NhbnMnLiBJZiBpdCBkb2Vzbid0IG1hdGNoIGFsbCAzCiAgICAgKiAgICAgICAgICB0aGVuIHRoYXQgZm9udCBpcyAxMDAlIG5vdCBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbQogICAgICogVmVyc2lvbjogMC4zICgyNCBNYXIgMjAxMikKICAgICAqICAgICAgICAgIFJlcGxhY2VkIHNhbnMgd2l0aCBzZXJpZiBpbiB0aGUgbGlzdCBvZiBiYXNlRm9udHMKICAgICAqLwogICAgLyoKICAgICAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMgRm9yZ2VSb2NrIEFTLgogICAgICovCiAgICB2YXIgZGV0ZWN0b3IgPSB7fSwgYmFzZUZvbnRzLCB0ZXN0U3RyaW5nLCB0ZXN0U2l6ZSwgaCwgcywgZGVmYXVsdFdpZHRoID0ge30sIGRlZmF1bHRIZWlnaHQgPSB7fSwgaW5kZXg7CgogICAgLy8gYSBmb250IHdpbGwgYmUgY29tcGFyZWQgYWdhaW5zdCBhbGwgdGhlIHRocmVlIGRlZmF1bHQgZm9udHMuCiAgICAvLyBhbmQgaWYgaXQgZG9lc24ndCBtYXRjaCBhbGwgMyB0aGVuIHRoYXQgZm9udCBpcyBub3QgYXZhaWxhYmxlLgogICAgYmFzZUZvbnRzID0gWydtb25vc3BhY2UnLCAnc2Fucy1zZXJpZicsICdzZXJpZiddOwoKICAgIC8vd2UgdXNlIG0gb3IgdyBiZWNhdXNlIHRoZXNlIHR3byBjaGFyYWN0ZXJzIHRha2UgdXAgdGhlIG1heGltdW0gd2lkdGguCiAgICAvLyBBbmQgd2UgdXNlIGEgTExpIHNvIHRoYXQgdGhlIHNhbWUgbWF0Y2hpbmcgZm9udHMgY2FuIGdldCBzZXBhcmF0ZWQKICAgIHRlc3RTdHJpbmcgPSAibW1tbW1tbW1tbWxsaSI7CgogICAgLy93ZSB0ZXN0IHVzaW5nIDcycHggZm9udCBzaXplLCB3ZSBtYXkgdXNlIGFueSBzaXplLiBJIGd1ZXNzIGxhcmdlciB0aGUgYmV0dGVyLgogICAgdGVzdFNpemUgPSAnNzJweCc7CgogICAgaCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07CgogICAgLy8gY3JlYXRlIGEgU1BBTiBpbiB0aGUgZG9jdW1lbnQgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgdGV4dCB3ZSB1c2UgdG8gdGVzdAogICAgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIHMuc3R5bGUuZm9udFNpemUgPSB0ZXN0U2l6ZTsKICAgIHMuaW5uZXJIVE1MID0gdGVzdFN0cmluZzsKICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHQgd2lkdGggZm9yIHRoZSB0aHJlZSBiYXNlIGZvbnRzCiAgICAgICAgcy5zdHlsZS5mb250RmFtaWx5ID0gYmFzZUZvbnRzW2luZGV4XTsKICAgICAgICBoLmFwcGVuZENoaWxkKHMpOwogICAgICAgIGRlZmF1bHRXaWR0aFtiYXNlRm9udHNbaW5kZXhdXSA9IHMub2Zmc2V0V2lkdGg7IC8vd2lkdGggZm9yIHRoZSBkZWZhdWx0IGZvbnQKICAgICAgICBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dID0gcy5vZmZzZXRIZWlnaHQ7IC8vaGVpZ2h0IGZvciB0aGUgZGVmdWFsdCBmb250CiAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgIH0KCiAgICBkZXRlY3Rvci5kZXRlY3QgPSBmdW5jdGlvbihmb250KSB7CiAgICAgICAgdmFyIGRldGVjdGVkID0gZmFsc2UsIGluZGV4LCBtYXRjaGVkOwogICAgICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgICAgIHMuc3R5bGUuZm9udEZhbWlseSA9IGZvbnQgKyAnLCcgKyBiYXNlRm9udHNbaW5kZXhdOyAvLyBuYW1lIG9mIHRoZSBmb250IGFsb25nIHdpdGggdGhlIGJhc2UgZm9udCBmb3IgZmFsbGJhY2suCiAgICAgICAgICAgIGguYXBwZW5kQ2hpbGQocyk7CiAgICAgICAgICAgIG1hdGNoZWQgPSAocy5vZmZzZXRXaWR0aCAhPT0gZGVmYXVsdFdpZHRoW2Jhc2VGb250c1tpbmRleF1dIHx8IHMub2Zmc2V0SGVpZ2h0ICE9PSBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dKTsKICAgICAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgICAgICAgICAgZGV0ZWN0ZWQgPSBkZXRlY3RlZCB8fCBtYXRjaGVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGV0ZWN0ZWQ7CiAgICB9OwoKICAgIHJldHVybiBkZXRlY3RvcjsKfSgpKTsKLyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAxNCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGNvbGxlY3RTY3JlZW5JbmZvID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBzY3JlZW5JbmZvID0ge307CiAgICAgICAgaWYgKHNjcmVlbikgewogICAgICAgICAgICBpZiAoc2NyZWVuLndpZHRoKSB7CiAgICAgICAgICAgICAgICBzY3JlZW5JbmZvLnNjcmVlbldpZHRoID0gc2NyZWVuLndpZHRoOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLmhlaWdodCkgewogICAgICAgICAgICAgICAgc2NyZWVuSW5mby5zY3JlZW5IZWlnaHQgPSBzY3JlZW4uaGVpZ2h0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLnBpeGVsRGVwdGgpIHsKICAgICAgICAgICAgICAgIHNjcmVlbkluZm8uc2NyZWVuQ29sb3VyRGVwdGggPSBzY3JlZW4ucGl4ZWxEZXB0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3Qgc2NyZWVuIGluZm9ybWF0aW9uLiBzY3JlZW4gaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzY3JlZW5JbmZvOwogICAgfSwKICAgIGNvbGxlY3RUaW1lem9uZUluZm8gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHRpbWV6b25lSW5mbyA9ICB7fSwgb2Zmc2V0ID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOwoKICAgICAgICBpZiAob2Zmc2V0KSB7CiAgICAgICAgICAgIHRpbWV6b25lSW5mby50aW1lem9uZSA9IG9mZnNldDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbm5vdCBjb2xsZWN0IHRpbWV6b25lIGluZm9ybWF0aW9uLiB0aW1lem9uZSBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aW1lem9uZUluZm87CiAgICB9LAogICAgY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbyA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgaWYgKG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IucGx1Z2lucykgewogICAgICAgICAgICB2YXIgcGx1Z2luc0luZm8gPSB7fSwgaSwgcGx1Z2lucyA9IG5hdmlnYXRvci5wbHVnaW5zOwogICAgICAgICAgICBwbHVnaW5zSW5mby5pbnN0YWxsZWRQbHVnaW5zID0gIiI7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGx1Z2luc0luZm8uaW5zdGFsbGVkUGx1Z2lucyA9IHBsdWdpbnNJbmZvLmluc3RhbGxlZFBsdWdpbnMgKyBwbHVnaW5zW2ldLmZpbGVuYW1lICsgIjsiOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcGx1Z2luc0luZm87CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBicm93c2VyIHBsdWdpbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLnBsdWdpbnMgaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgICAgIHJldHVybiB7fTsKICAgICAgICB9CgogICAgfSwKLy8gR2V0dGluZyBnZW9sb2NhdGlvbiB0YWtlcyBzb21lIHRpbWUgYW5kIGlzIGRvbmUgYXN5bmNocm9ub3VzbHksIGhlbmNlIG5lZWQgYSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgb25jZSBnZW9sb2NhdGlvbiBpcyByZXRyaWV2ZWQuCiAgICBjb2xsZWN0R2VvbG9jYXRpb25JbmZvID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIGdlb2xvY2F0aW9uSW5mbyA9IHt9LAogICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgICAgICAgICAgZ2VvbG9jYXRpb25JbmZvLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGU7CiAgICAgICAgICAgICAgICBnZW9sb2NhdGlvbkluZm8ubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGU7CiAgICAgICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgICAgICB9LCBlcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3QgZ2VvbG9jYXRpb24gaW5mb3JtYXRpb24uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVycm9yLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgY2FsbGJhY2soZ2VvbG9jYXRpb25JbmZvKTsKICAgICAgICAgICAgfTsKICAgICAgICBpZiAobmF2aWdhdG9yICYmIG5hdmlnYXRvci5nZW9sb2NhdGlvbikgewogICAgICAgICAgICAvLyBOQjogSWYgdXNlciBjaG9vc2VzICdOb3Qgbm93JyBvbiBGaXJlZm94IG5laXRoZXIgY2FsbGJhY2sgZ2V0cyBjYWxsZWQKICAgICAgICAgICAgLy8gICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NTUzMwogICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBnZW9sb2NhdGlvbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgIH0KICAgIH0sCiAgICBjb2xsZWN0QnJvd3NlckZvbnRzSW5mbyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZm9udHNJbmZvID0ge30sIGksIGZvbnRzTGlzdCA9IFsiY3Vyc2l2ZSIsIm1vbm9zcGFjZSIsInNlcmlmIiwic2Fucy1zZXJpZiIsImZhbnRhc3kiLCJkZWZhdWx0IiwiQXJpYWwiLCJBcmlhbCBCbGFjayIsCiAgICAgICAgICAgICJBcmlhbCBOYXJyb3ciLCJBcmlhbCBSb3VuZGVkIE1UIEJvbGQiLCJCb29rbWFuIE9sZCBTdHlsZSIsIkJyYWRsZXkgSGFuZCBJVEMiLCJDZW50dXJ5IiwiQ2VudHVyeSBHb3RoaWMiLAogICAgICAgICAgICAiQ29taWMgU2FucyBNUyIsIkNvdXJpZXIiLCJDb3VyaWVyIE5ldyIsIkdlb3JnaWEiLCJHZW50aXVtIiwiSW1wYWN0IiwiS2luZyIsIkx1Y2lkYSBDb25zb2xlIiwiTGFsaXQiLAogICAgICAgICAgICAiTW9kZW5hIiwiTW9ub3R5cGUgQ29yc2l2YSIsIlBhcHlydXMiLCJUYWhvbWEiLCJUZVgiLCJUaW1lcyIsIlRpbWVzIE5ldyBSb21hbiIsIlRyZWJ1Y2hldCBNUyIsIlZlcmRhbmEiLAogICAgICAgICAgICAiVmVyb25hIl07CiAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gIiI7CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBmb250c0xpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGZvbnREZXRlY3Rvci5kZXRlY3QoZm9udHNMaXN0W2ldKSkgewogICAgICAgICAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzICsgZm9udHNMaXN0W2ldICsgIjsiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb250c0luZm87CiAgICB9LAogICAgZGV2aWNlUHJpbnQgPSB7fTsKCmRldmljZVByaW50LnNjcmVlbiA9IGNvbGxlY3RTY3JlZW5JbmZvKCk7CmRldmljZVByaW50LnRpbWV6b25lID0gY29sbGVjdFRpbWV6b25lSW5mbygpOwpkZXZpY2VQcmludC5wbHVnaW5zID0gY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbygpOwpkZXZpY2VQcmludC5mb250cyA9IGNvbGxlY3RCcm93c2VyRm9udHNJbmZvKCk7CgppZiAobmF2aWdhdG9yLnVzZXJBZ2VudCkgewogICAgZGV2aWNlUHJpbnQudXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKfQppZiAobmF2aWdhdG9yLmFwcE5hbWUpIHsKICAgIGRldmljZVByaW50LmFwcE5hbWUgPSBuYXZpZ2F0b3IuYXBwTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcENvZGVOYW1lKSB7CiAgICBkZXZpY2VQcmludC5hcHBDb2RlTmFtZSA9IG5hdmlnYXRvci5hcHBDb2RlTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcFZlcnNpb24pIHsKICAgIGRldmljZVByaW50LmFwcFZlcnNpb24gPSBuYXZpZ2F0b3IuYXBwVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbikgewogICAgZGV2aWNlUHJpbnQuYXBwTWlub3JWZXJzaW9uID0gbmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmJ1aWxkSUQpIHsKICAgIGRldmljZVByaW50LmJ1aWxkSUQgPSBuYXZpZ2F0b3IuYnVpbGRJRDsKfQppZiAobmF2aWdhdG9yLnBsYXRmb3JtKSB7CiAgICBkZXZpY2VQcmludC5wbGF0Zm9ybSA9IG5hdmlnYXRvci5wbGF0Zm9ybTsKfQppZiAobmF2aWdhdG9yLmNwdUNsYXNzKSB7CiAgICBkZXZpY2VQcmludC5jcHVDbGFzcyA9IG5hdmlnYXRvci5jcHVDbGFzczsKfQppZiAobmF2aWdhdG9yLm9zY3B1KSB7CiAgICBkZXZpY2VQcmludC5vc2NwdSA9IG5hdmlnYXRvci5vc2NwdTsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3QpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3QgPSBuYXZpZ2F0b3IucHJvZHVjdDsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3RTdWIpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3RTdWIgPSBuYXZpZ2F0b3IucHJvZHVjdFN1YjsKfQppZiAobmF2aWdhdG9yLnZlbmRvcikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yID0gbmF2aWdhdG9yLnZlbmRvcjsKfQppZiAobmF2aWdhdG9yLnZlbmRvclN1YikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yU3ViID0gbmF2aWdhdG9yLnZlbmRvclN1YjsKfQppZiAobmF2aWdhdG9yLmxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5sYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnVzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQudXNlckxhbmd1YWdlID0gbmF2aWdhdG9yLnVzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQuYnJvd3Nlckxhbmd1YWdlID0gbmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnN5c3RlbUxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5zeXN0ZW1MYW5ndWFnZSA9IG5hdmlnYXRvci5zeXN0ZW1MYW5ndWFnZTsKfQoKLy8gQXR0ZW1wdCB0byBjb2xsZWN0IGdlby1sb2NhdGlvbiBpbmZvcm1hdGlvbiBhbmQgcmV0dXJuIHRoaXMgd2l0aCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgovLyBPdGhlcndpc2UsIGlmIGdlby1sb2NhdGlvbiBmYWlscyBvciB0YWtlcyBsb25nZXIgdGhhbiAzMCBzZWNvbmRzLCBhdXRvLXN1Ym1pdCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgphdXRvU3VibWl0RGVsYXkgPSAzMDAwMDsKb3V0cHV0LnZhbHVlID0gSlNPTi5zdHJpbmdpZnkoZGV2aWNlUHJpbnQpOwpjb2xsZWN0R2VvbG9jYXRpb25JbmZvKGZ1bmN0aW9uKGdlb2xvY2F0aW9uSW5mbykgewogICAgZGV2aWNlUHJpbnQuZ2VvbG9jYXRpb24gPSBnZW9sb2NhdGlvbkluZm87CiAgICBvdXRwdXQudmFsdWUgPSBKU09OLnN0cmluZ2lmeShkZXZpY2VQcmludCk7CiAgICBzdWJtaXQoKTsKfSk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"312e951f-70c5-49d2-a9ae-93aef909d5df\",\"name\":\"Salesforce Profile Normalization\",\"description\":\"Normalizes raw profile data from Salesforce\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZ2l2ZW5fbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmZhbWlseV9uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnBpY3R1cmUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJsb2NhbGUiLCByYXdQcm9maWxlLnpvbmVJbmZvKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"69f06e63-128c-4e2f-af52-079a8a6f448b\",\"name\":\"SAML2 SP Adapter Script\",\"description\":\"Default global script for SAML2 SP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_SP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"name\":\"debug\",\"description\":\"Display sharedState, transientState, and headers.\",\"script\":\"LyogZGVidWcKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogRGlzcGxheSBzaGFyZWRTdGF0ZSwgdHJhbnNpZW50U3RhdGUsIGFuZCBoZWFkZXJzLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwp2YXIgYW5jaG9yID0gImFuY2hvci0iLmNvbmNhdChnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4JykpOwp2YXIgaGFsaWduID0gImxlZnQiOwp2YXIgbWVzc2FnZSA9ICI8cD48Yj5TaGFyZWQgU3RhdGU8L2I+Ojxici8+Ii5jb25jYXQoCiAgICAgIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpLmNvbmNhdCgKICAgICI8cD48Yj5UcmFuc2llbnQgU3RhdGU8L2I+Ojxici8+IikuY29uY2F0KAogICAgICB0cmFuc2llbnRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+UmVxdWVzdCBIZWFkZXJzPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgICAgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikKdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwidGV4dC1sZWZ0XCI7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIikuY29uY2F0KG1lc3NhZ2UpLmNvbmNhdCgiJztcbiIpLmNvbmNhdCgKICAiICB9XG4iKS5jb25jYXQoCiAgIn0pIikKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawopCmlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgIGFuY2hvcgogICAgICAgICksCiAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICApLmJ1aWxkKCkKfQplbHNlIHsKICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0KCiAvKgogICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAqIAogICogRXhhbXBsZToKICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICogJ3h4eC14eHgnIHByb2R1Y2VzICc0MzItNTIxJwogICovCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxMHwwOwogICAgICAgIHZhciB2ID0gcjsKICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"a7a78773-445b-4eca-bb93-409e86bced81\",\"name\":\"GitHub Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUubG9naW4pKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"01e1a3c0-038b-4c16-956a-6c9d89328cff\",\"name\":\"Authentication Tree Decision Node Script\",\"description\":\"Default global script for a scripted decision node\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKb3V0Y29tZSA9ICJ0cnVlIjsK\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"bb393d07-a121-47e2-9d24-1a1066f39ec0\",\"name\":\"My Example Script Using Libraries\",\"description\":\"My Example Script Using Libraries\",\"script\":\"LyoqCiAqIFRlc3RpbmcgbGlicmFyeSBzY3JpcHRzCiAqLwp2YXIgbXlsaWIgPSByZXF1aXJlKCdNeSBFeGFtcGxlIExpYnJhcnknKTsKdmFyIGxvZ2dlcnMgPSByZXF1aXJlKCdMaWJyYXJ5IFNjcmlwdCcpOwoKbXlsaWIuYWRkKDEpOwpteWxpYi5sb2dUb3RhbChsb2dnZXIpOwpteWxpYi5hZGQoMyk7Cm15bGliLmxvZ1RvdGFsV2l0aE1lc3NhZ2UobG9nZ2VyLCBteWxpYi5NU0cpOwoKb3V0Y29tZSA9ICd0cnVlJzs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"77e87451-bde9-40c0-84b1-02d4c97687f2\",\"name\":\"takeFavouriteFactor.js\",\"description\":\"null\",\"script\":\"ZnVuY3Rpb24gZ2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSkKewogIHZhciBpZCA9IHNoYXJlZFN0YXRlLmdldCgnX2lkJyk7CiAgdmFyIGZySWRtQ3VzdG9tQXR0cmlidXRlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoaWQsICdmci1pZG0tY3VzdG9tLWF0dHJzJyk7CiAgaWYgKGZySWRtQ3VzdG9tQXR0cmlidXRlcykKICB7CiAgICAgIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QgPSBKU09OLnBhcnNlKFN0cmluZyhmcklkbUN1c3RvbUF0dHJpYnV0ZXMudG9BcnJheSgpWzBdKSk7CiAgICAgICAgcmV0dXJuIGZySWRtQ3VzdG9tQXR0cmlidXRlc09iamVjdFtjdXN0b21BdHRyTmFtZV07CiAgfQp9Cgp2YXIgZmF2RmFjdG9yID0gZ2V0Q3VzdG9tQXR0clZhbHVlKCJjdXN0b21fZmF2b3VyaXRlRmFjdG9yIik7Cm91dGNvbWUgPSBmYXZGYWN0b3I7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"39c08084-1238-43e8-857f-2e11005eac49\",\"name\":\"Alpha OAuth2 Access Token Modification Script\",\"description\":\"Default alpha realm script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6b3cfd48-62d3-48ff-a96f-fe8f3a22ab30\",\"name\":\"Amazon Profile Normalization\",\"description\":\"Normalizes raw profile data from Amazon\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"424da748-82cc-4b54-be6f-82bd64d82a74\",\"name\":\"Yahoo Profile Normalization\",\"description\":\"Normalizes raw profile data from Yahoo\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"da56fe60-8b38-4c46-a405-d6b306d4b336\",\"name\":\"OAuth2 Evaluate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Evaluation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcG9wdWxhdGUgdGhlIHNjb3BlcyB3aXRoIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlcyB3aGVuIHRoZSB0b2tlbmluZm8gZW5kcG9pbnQgaXMgY2FsbGVkLgogKiBGb3IgZXhhbXBsZSwgaWYgb25lIG9mIHRoZSBzY29wZXMgaXMgbWFpbCwgQU0gc2V0cyBtYWlsIHRvIHRoZSByZXNvdXJjZSBvd25lcidzIGVtYWlsIGFkZHJlc3MgaW4gdGhlIHRva2VuIGluZm9ybWF0aW9uIHJldHVybmVkLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDIpLgogKiAgICAgICAgICAgIFRoZSBjbGllbnQncyBpZGVudGl0eSBpZiBwcmVzZW50IG9yIHRoZSByZXNvdXJjZSBvd25lcidzIGlkZW50aXR5LiBDYW4gYmUgbnVsbC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0VWQUxVQVRFX1NDT1BFCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoMykuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIGEgTWFwPFN0cmluZywgT2JqZWN0PiBvZiB0aGUgYWNjZXNzIHRva2VuJ3MgaW5mb3JtYXRpb24gKDQpLgogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBBY2Nlc3NUb2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vYXV0aDIvY29yZS9BY2Nlc3NUb2tlbi5odG1sLgogKiAoMikgQU1JZGVudGl0eSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9pZG0vQU1JZGVudGl0eS5odG1sLgogKiAoMykgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBldmFsdWF0ZSBzY29wZSBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgbWFwID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7CiAgICBpZiAoaWRlbnRpdHkgIT09IG51bGwpIHsKICAgICAgICB2YXIgc2NvcGVzID0gYWNjZXNzVG9rZW4uZ2V0U2NvcGUoKS50b0FycmF5KCk7CiAgICAgICAgc2NvcGVzLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKHNjb3BlKS50b0FycmF5KCk7CiAgICAgICAgICAgIG1hcC5wdXQoc2NvcGUsIGF0dHJpYnV0ZXMuam9pbigiLCIpKTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKCdpZGVudGl0eSBpcyBudWxsJyk7CiAgICB9CiAgICByZXR1cm4gbWFwOwp9KCkpOw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_EVALUATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"name\":\"level\",\"description\":\"set per level shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdsZXZlbCcgKyBsZXZlbCArICdWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzZXQgYXQgZWFjaCBsZXZlbCBvZiB0aGUgbmVzdGVkIGpvdXJuZXlzLiBJdCBjb250YWlucyBhbiBpbmRpY2F0b3IgaW4gd2hpY2ggbGV2ZWwgaXQgd2FzIHNldC4nKTsKfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"403cf226-6051-4368-8b72-9ba14f9a5140\",\"name\":\"VKontakte Profile Normalization\",\"description\":\"Normalizes raw profile data from VKontakte\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGhvdG9fNTApLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c4f22465-2368-4e27-8013-e6399974fd48\",\"name\":\"SAML2 IDP Attribute Mapper Script\",\"description\":\"Default global script for SAML2 IDP Attribute Mapper\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSBvYmplY3RzIGZvciB0aGUgSURQIGZyYW1ld29yayB0byBpbnNlcnQgaW50byB0aGUgZ2VuZXJhdGVkIEFzc2VydGlvbi4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgICAgICBUaGUgaG9zdGVkIGVudGl0eSBJRC4KICogcmVtb3RlRW50aXR5SWQgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgICAgVGhlIHJlbW90ZSBlbnRpdHkgSUQuCiAqIHJlYWxtIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGluZyB0by4KICogbG9nZ2VyIC0gQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5TQU1MMl9JRFBfQVRUUklCVVRFX01BUFBFUgogKiBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgLSBJZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgKDIpCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFuIElkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlciBpbnN0YW5jZSBjb250YWluaW5nIG1ldGhvZHMgdXNlZCBmb3IgSURQIGF0dHJpYnV0ZSBtYXBwaW5nLgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb246CiAqICAgICAgLSBvbiBmYWlsaW5nIHRvIG1hcCB0aGUgSURQIGF0dHJpYnV0ZXMuCiAqCiAqIFJldHVybiAtIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSAoMykgb2JqZWN0cy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgSWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaHRtbC4KICogKDMpIEF0dHJpYnV0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9hc3NlcnRpb24vQXR0cmlidXRlLmh0bWwuCiAqLwoKLyoqCiAqIERlZmF1bHQgU0FNTDIgSURQIEF0dHJpYnV0ZSBNYXBwZXIuCiAqLwpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKCkgewogICAgdmFyIGZySmF2YSA9IEphdmFJbXBvcnRlcigKICAgICAgICBjb20uc3VuLmlkZW50aXR5LnNhbWwyLmNvbW1vbi5TQU1MMkV4Y2VwdGlvbgogICAgKTsKCiAgICBjb25zdCBkZWJ1Z01ldGhvZCA9ICJTY3JpcHRlZElEUEF0dHJpYnV0ZU1hcHBlci5nZXRBdHRyaWJ1dGVzOjogIjsKCiAgICB0cnkgewoKICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1Nlc3Npb25WYWxpZChzZXNzaW9uKSkgewogICAgICAgICAgICBsb2dnZXIuZXJyb3IoZGVidWdNZXRob2QgKyAiSW52YWxpZCBzZXNzaW9uLiIpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHZhciBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0UmVtb3RlU1BDb25maWdBdHRyaWJ1dGVNYXAocmVhbG0sIHJlbW90ZUVudGl0eUlkKTsKICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJSZW1vdGUgU1AgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICBpZiAoY29uZmlnTWFwID09IG51bGwgfHwgY29uZmlnTWFwLmlzRW1wdHkoKSkgewogICAgICAgICAgICBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0SG9zdGVkSURQQ29uZmlnQXR0cmlidXRlTWFwKHJlYWxtLCBob3N0ZWRFbnRpdHlJZCk7CiAgICAgICAgICAgIGlmIChjb25maWdNYXAgPT0gbnVsbCB8fCBjb25maWdNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJDb25maWd1cmF0aW9uIG1hcCBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKGRlYnVnTWV0aG9kICsgIkhvc3RlZCBJRFAgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICB9CgogICAgICAgIHZhciBhdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoKTsKICAgICAgICB2YXIgc3RyaW5nVmFsdWVNYXAgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKICAgICAgICB2YXIgYmluYXJ5VmFsdWVNYXA7CiAgICAgICAgdmFyIGxvY2FsQXR0cmlidXRlOwoKICAgICAgICAvLyBEb24ndCB0cnkgdG8gcmVhZCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBkYXRhc3RvcmUgaWYgdGhlIGlnbm9yZWQgcHJvZmlsZSBpcyBlbmFibGVkIGluIHRoaXMgcmVhbG0uCiAgICAgICAgaWYgKCFpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaXNJZ25vcmVkUHJvZmlsZShzZXNzaW9uLCByZWFsbSkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIFJlc29sdmUgYXR0cmlidXRlcyB0byBiZSByZWFkIGZyb20gdGhlIGRhdGFzdG9yZS4KICAgICAgICAgICAgICAgIHZhciBzdHJpbmdBdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KCk7CiAgICAgICAgICAgICAgICB2YXIgYmluYXJ5QXR0cmlidXRlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgIHdoaWxlIChrZXlJdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlJdGVyLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBsb2NhbEF0dHJpYnV0ZSA9IGNvbmZpZ01hcC5nZXQoa2V5KTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1N0YXRpY0F0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc0JpbmFyeUF0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHRyZWF0IGFzIGJlaW5nIGJpbmFyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5QXR0cmlidXRlcy5hZGQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLnJlbW92ZUJpbmFyeUF0dHJpYnV0ZUZsYWcobG9jYWxBdHRyaWJ1dGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMuYWRkKGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXN0cmluZ0F0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWVNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0QXR0cmlidXRlcyhzZXNzaW9uLCBzdHJpbmdBdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghYmluYXJ5QXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBiaW5hcnlWYWx1ZU1hcCA9IGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5nZXRCaW5hcnlBdHRyaWJ1dGVzKHNlc3Npb24sIGJpbmFyeUF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGRlYnVnTWV0aG9kICsgIkVycm9yIGFjY2Vzc2luZyB0aGUgZGF0YXN0b3JlLiAiICsgZXJyb3IpOwogICAgICAgICAgICAgICAgLy9jb250aW51ZSB0byBjaGVjayBpbiBzc290b2tlbi4KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICB3aGlsZSAoa2V5SXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgdmFyIGtleSA9IGtleUl0ZXIubmV4dCgpCiAgICAgICAgICAgIHZhciBuYW1lRm9ybWF0ID0gbnVsbDsKICAgICAgICAgICAgdmFyIHNhbWxBdHRyaWJ1dGUgPSBrZXk7CiAgICAgICAgICAgIGxvY2FsQXR0cmlidXRlID0gY29uZmlnTWFwLmdldChrZXkpOwogICAgICAgICAgICAvLyBjaGVjayBpZiBzYW1sQXR0cmlidXRlIGhhcyBmb3JtYXQgbmFtZUZvcm1hdHxzYW1sQXR0cmlidXRlCiAgICAgICAgICAgIHZhciBzYW1sQXR0cmlidXRlcyA9IFN0cmluZyhuZXcgamF2YS5sYW5nLlN0cmluZyhzYW1sQXR0cmlidXRlKSk7CiAgICAgICAgICAgIHZhciB0b2tlbnMgPSBzYW1sQXR0cmlidXRlcy5zcGxpdCgnfCcpOwoKICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICBuYW1lRm9ybWF0ID0gdG9rZW5zWzBdOwogICAgICAgICAgICAgICAgc2FtbEF0dHJpYnV0ZSA9IHRva2Vuc1sxXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVZhbHVlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzU3RhdGljQXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdGF0aWMgZmxhZyBiZWZvcmUgdXNpbmcgaXQgYXMgdGhlIHN0YXRpYyB2YWx1ZQogICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlU3RhdGljQXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoW2xvY2FsQXR0cmlidXRlXSk7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJBZGRpbmcgc3RhdGljIHZhbHVlIHt9IGZvciBhdHRyaWJ1dGUgbmFtZWQge30iLCBsb2NhbEF0dHJpYnV0ZSwgc2FtbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzQmluYXJ5QXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZmxhZyBhcyBub3QgdXNlZCBmb3IgbG9va3VwCiAgICAgICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlQmluYXJ5QXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzID0gaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldEJpbmFyeUF0dHJpYnV0ZVZhbHVlcyhzYW1sQXR0cmlidXRlLCBsb2NhbEF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5VmFsdWVNYXApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWVNYXAgIT0gbnVsbCAmJiAhc3RyaW5nVmFsdWVNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlcyA9IHN0cmluZ1ZhbHVlTWFwLmdldChsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoZGVidWdNZXRob2QgKyAie30gc3RyaW5nIHZhbHVlIG1hcCB3YXMgZW1wdHkgb3IgbnVsbC4iLCBsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSB1c2VycyBzc29Ub2tlbgogICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlcyA9PSBudWxsIHx8IGF0dHJpYnV0ZVZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJVc2VyIHByb2ZpbGUgZG9lcyBub3QgaGF2ZSB2YWx1ZSBmb3Ige30sIGNoZWNraW5nIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldFByb3BlcnR5U2V0KHNlc3Npb24sIGxvY2FsQXR0cmlidXRlKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZXMgPT0gbnVsbCB8fCBhdHRyaWJ1dGVWYWx1ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJ7fSBub3QgZm91bmQgaW4gdXNlciBwcm9maWxlIG9yIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuYWRkKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5jcmVhdGVTQU1MQXR0cmlidXRlKHNhbWxBdHRyaWJ1dGUsIG5hbWVGb3JtYXQsIGF0dHJpYnV0ZVZhbHVlcykpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXR0cmlidXRlczsKCiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGxvZ2dlci5lcnJvcihkZWJ1Z01ldGhvZCArICJFcnJvciBtYXBwaW5nIElEUCBhdHRyaWJ1dGVzLiAiICsgZXJyb3IpOwogICAgICAgIHRocm93IG5ldyBmckphdmEuU0FNTDJFeGNlcHRpb24oZXJyb3IpOwogICAgfQp9CgpnZXRBdHRyaWJ1dGVzKCk7\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ATTRIBUTE_MAPPER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"46074930-6a38-4e36-8985-1ed90b4bdb3b\",\"name\":\"SaveLogin\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCik7CndpdGggKGZyKSB7CiAgLy8gQ3JlYXRlIG5ldyBlbnRyeSB3aXRoIGRldmljZSBwcm9maWxlIGFuZCBkYXRlCiAgdmFyIHByb2ZpbGUgPSBzaGFyZWRTdGF0ZS5nZXQoImZvcmdlUm9jay5kZXZpY2UucHJvZmlsZSIpOwogIHZhciBkYXRlID0gRGF0ZS5ub3coKQogIHZhciBpZGVudGlmaWVyID0gcHJvZmlsZS5nZXQoImlkZW50aWZpZXIiKQogIHZhciBwbGF0Zm9ybSA9IHByb2ZpbGUuZ2V0KCJtZXRhZGF0YSIpLmdldCgicGxhdGZvcm0iKS5nZXQoInBsYXRmb3JtIikKICB2YXIgZGV2aWNlTmFtZSA9IHByb2ZpbGUuZ2V0KCJtZXRhZGF0YSIpLmdldCgicGxhdGZvcm0iKS5nZXQoImRldmljZU5hbWUiKQogIHZhciBsYXRpdHVkZSA9IHByb2ZpbGUuZ2V0KCJsb2NhdGlvbiIpLmdldCgibGF0aXR1ZGUiKQogIHZhciBsb25naXR1ZGUgPSBwcm9maWxlLmdldCgibG9jYXRpb24iKS5nZXQoImxvbmdpdHVkZSIpCiAgdmFyIHVzZXJBZ2VudCA9IHByb2ZpbGUuZ2V0KCJtZXRhZGF0YSIpLmdldCgiYnJvd3NlciIpLmdldCgidXNlckFnZW50Iik7CiAgdmFyIGJyb3dzZXIgPSAiIgogIAogIC8vIFdvcmsgb3V0IHdoaWNoIGJyb3dzZXIgdGhpcyBpcwogIGlmICh1c2VyQWdlbnQudG9VcHBlckNhc2UoKS5pbmRleE9mKCJGSVJFRk9YIikgPiAtMSkgewogICAgYnJvd3NlciA9ICJGaXJlZm94IjsKICB9IGVsc2UgaWYgKHVzZXJBZ2VudC50b1VwcGVyQ2FzZSgpLmluZGV4T2YoIkNIUk9NRSIpID4gLTEgJiYgdXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiU0FGQVJJIikgPiAtMSkgewogICAgLy8gQ2hyb21lIGNhbiBzb21ldGltZXMgbGlzdCBDaHJvbWUgZm9sbG93ZWQgYnkgU2FmYXJpIGluIHVzZXJBZ2VudAogICAgaWYgKHVzZXJBZ2VudC50b1VwcGVyQ2FzZSgpLmluZGV4T2YoIkNIUk9NRSIpIDwgdXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiU0FGQVJJIikpIHsKICAgICAgYnJvd3NlciA9ICJDaHJvbWUiOwogICAgfQogIH0gZWxzZSBpZiAodXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiQ0hST01FIikgPiAtMSkgewogICAgYnJvd3NlciA9ICJDaHJvbWUiOwogIH0gZWxzZSBpZiAodXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiU0FGQVJJIikgPiAtMSkgewogICAgYnJvd3NlciA9ICJTYWZhcmkiOwogIH0KICAKICB2YXIgZW50cnkgPSB7CiAgICAiZGF0ZSI6IERhdGUoKS50b1N0cmluZygpLAogICAgImxhc3RTZWxlY3RlZERhdGUiOiBkYXRlLAogICAgImRldmljZSI6IHsKICAgICAgImlkZW50aWZpZXIiOiBTdHJpbmcoaWRlbnRpZmllciksCiAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAicGxhdGZvcm0iOiB7CiAgICAgICAgICAicGxhdGZvcm0iOiBTdHJpbmcocGxhdGZvcm0pLAogICAgICAgICAgImRldmljZU5hbWUiOiBTdHJpbmcoZGV2aWNlTmFtZSkKICAgICAgICB9LAogICAgICAgICJicm93c2VyIjogYnJvd3NlcgogICAgICB9CiAgICB9LAogICAgImxvY2F0aW9uIjogewogICAgICAibGF0aXR1ZGUiOiBTdHJpbmcobGF0aXR1ZGUpLAogICAgICAibG9uZ2l0dWRlIjogU3RyaW5nKGxvbmdpdHVkZSkKICAgIH0KICB9CiAgCiAgLy8gQWRkIGVudHJ5IHRvIG11bHRpIHZhbHVlCiAgdmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKQogIHZhciBhdHRyaWJ1dGUgPSAiZnItYXR0ci1pbXVsdGkxIgogIGlkUmVwb3NpdG9yeS5hZGRBdHRyaWJ1dGUodXNlcm5hbWUsIGF0dHJpYnV0ZSwgSlNPTi5zdHJpbmdpZnkoZW50cnkpKTsKICAKICBvdXRjb21lID0gInRydWUiCn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e1db8a0a-0329-4962-a5bf-ecffaca376ae\",\"name\":\"Alpha endUserUIClient OIDC Claims Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"name\":\"mode\",\"description\":\"Check if mode has already been set.\",\"script\":\"LyogbW9kZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDb2xsZWN0IG1vZGUgaWYgbm90IGFscmVhZHkgc2V0IGFuZCBzZXQgb3V0Y29tZSB0byBtb2RlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSAnc2hhcmVkIGFuZCBsZXZlbCcKICogLSAnc2hhcmVkIG9ubHknCiAqIC0gJ2xldmVsIG9ubHknCiAqIC0gJ25vbmUnCiAqLwooZnVuY3Rpb24gKCkgewogIHZhciBtb2RlID0gbm9kZVN0YXRlLmdldCgnbW9kZScpOwogIGlmIChtb2RlKSB7CiAgICBvdXRjb21lID0gbW9kZS5hc1N0cmluZygpOwogICAgdmFyIGxldmVsID0gbm9kZVN0YXRlLmdldCgnbGV2ZWwnKS5hc0ludGVnZXIoKSArIDE7CiAgICBsb2dnZXIuZXJyb3IoJ21vZGU6IG1vZGU9JyArIG1vZGUuYXNTdHJpbmcoKSArICcsIGxldmVsPScgKyBsZXZlbCk7CiAgICBzaGFyZWRTdGF0ZS5wdXQoJ2xldmVsJywgbGV2ZWwpOwogIH0KICBlbHNlIHsKICAgIHZhciBjaG9pY2VzID0gWydzaGFyZWQgYW5kIGxldmVsJywgJ3NoYXJlZCBvbmx5JywgJ2xldmVsIG9ubHknLCAnbm9uZSddOwogIAogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DaG9pY2VDYWxsYmFjawogICAgKQoKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKFsKICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soJ0Nob29zZSB0ZXN0IG1vZGUnLCBjaG9pY2VzLCAwLCBmYWxzZSkKICAgICAgXSkuYnVpbGQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBjaG9pY2UgPSBwYXJzZUludChjYWxsYmFja3MuZ2V0KDApLmdldFNlbGVjdGVkSW5kZXhlcygpWzBdKTsKICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgnbW9kZScsIGNob2ljZXNbY2hvaWNlXSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2xldmVsJywgMCk7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKGNob2ljZXNbY2hvaWNlXSkuYnVpbGQoKTsKICAgIH0KICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"743351b3-001a-4ec8-b3ac-a674ddb8de22\",\"name\":\"UOP Enrich Session\",\"description\":\"Enrich user session with UOP class ID.\",\"script\":\"LyogVU9QIEVucmljaCBTZXNzaW9uCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIEFkZCBjdXJyZW50IGNsYXNzIElEIHRvIHVzZXIgc2Vzc2lvbi4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuIAogKiBJdCByZXF1aXJlcyB0aGUgSWRlbnRpZnkgRXhpc3RpbmcgVXNlciBub2RlIGJlZm9yZSBpdCBpcyBiZWluZyBjYWxsZWQuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAtIGZhbHNlCiAqLwpsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBzdGFydCIpOwpvdXRjb21lID0gImZhbHNlIjsKCmlmIChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBnb2luZyB0byBlbnJpY2ggc2Vzc2lvbiB3aXRoIGNsYXNzIGlkOiAiLmNvbmNhdChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpKTsKICAKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaQogICAgKTsKCiAgICB3aXRoIChmcikgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJVT1AgRW5yaWNoIFNlc3Npb246IEVuZCAob3V0Y29tZT0iLmNvbmNhdChvdXRjb21lKS5jb25jYXQoIikiKSk7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8ob3V0Y29tZSkucHV0U2Vzc2lvblByb3BlcnR5KCJVT1BDbGFzc0lEIiwgc2hhcmVkU3RhdGUuZ2V0KCJ1b3BDdXJyZW50Q2xhc3NJRCIpKS5idWlsZCgpOwogICAgfQogIAp9IGVsc2UgewogICAgbG9nZ2VyLmVycm9yKCJVT1AgRW5yaWNoIFNlc3Npb246IG5vIGNsYXNzZXMhIik7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBFbmQgKG91dGNvbWU9Ii5jb25jYXQob3V0Y29tZSkuY29uY2F0KCIpIikpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"85523e71-2d77-4577-b078-6f9674cc54e2\",\"name\":\"Saml2 IDP Adapter Always Auth\",\"description\":\"Always redirect browser pre-auth\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4yL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL1NBTUwySWRlbnRpdHlQcm92aWRlckFkYXB0ZXIuaHRtbAogKiBOb3RlIHRoYXQgdGhlIGluaXRpYWxpemUgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIHNjcmlwdHMuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzLiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMgZm9yIHRoZSB2YXJpYWJsZXMgYXZhaWxhYmxlIHRvIGl0LgogKgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZwogKiAgICAgRW50aXR5IElEIGZvciB0aGUgaG9zdGVkIElEUAogKiByZWFsbSAtIFN0cmluZwogKiAgICAgUmVhbG0gb2YgdGhlIGhvc3RlZCBJRFAKICogaWRwQWRhcHRlclNjcmlwdEhlbHBlciAtIElkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEpCiAqICAgICBBbiBpbnN0YW5jZSBvZiBJZHBBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIHJlcXVlc3QgLSBIdHRwU2VydmxldFJlcXVlc3QgKDIpCiAqICAgICBTZXJ2bGV0IHJlcXVlc3Qgb2JqZWN0CiAqIHJlc3BvbnNlIC0gSHR0cFNlcnZsZXRSZXNwb25zZSAoMykKICogICAgIFNlcnZsZXQgcmVzcG9uc2Ugb2JqZWN0CiAqIGF1dGhuUmVxdWVzdCAtIEF1dGhuUmVxdWVzdCAoNCkKICogICAgIFRoZSBvcmlnaW5hbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHNlbnQgZnJvbSBTUAogKiByZXFJZCAtIFN0cmluZwogKiAgICAgVGhlIGlkIHRvIHVzZSBmb3IgY29udGludWF0aW9uIG9mIHByb2Nlc3NpbmcgaWYgdGhlIGFkYXB0ZXIgcmVkaXJlY3RzCiAqIHJlcyAtIFJlc3BvbnNlICg1KQogKiAgICAgVGhlIFNBTUwgUmVzcG9uc2UKICogc2Vzc2lvbiAtIFNTT1Rva2VuICg2KQogKiAgICAgVGhlIHNpbmdsZSBzaWduLW9uIHNlc3Npb24uIFRoZSByZWZlcmVuY2UgdHlwZSBvZiB0aGlzIGlzIE9iamVjdCBhbmQgd291bGQgbmVlZCB0byBiZSBjYXN0ZWQgdG8gU1NPVG9rZW4uCiAqIHJlbGF5U3RhdGUgLSBTdHJpbmcKICogICAgIFRoZSByZWxheVN0YXRlIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSByZWRpcmVjdAogKiBmYXVsdENvZGUgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBjb2RlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgU0FNTCByZXNwb25zZQogKiBmYXVsdERldGFpbCAtIFN0cmluZwogKiAgICAgdGhlIGZhdWx0IGRldGFpbCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogbG9nZ2VyIC0gTG9nZ2VyIGluc3RhbmNlCiAqICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLjxzY3JpcHQgbmFtZT4KICoKICogVGhyb3dzIFNBTUwyRXhjZXB0aW9uICg3KToKICogICAgIGZvciBhbnkgZXhjZXB0aW9ucyBvY2N1cnJpbmcgaW4gdGhlIGFkYXB0ZXIuIFRoZSBmZWRlcmF0aW9uIHByb2Nlc3Mgd2lsbCBjb250aW51ZQogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBpZHBBZGFwdGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL1Jlc3BvbnNlLmh0bWwuCiAqICg2KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvY29tbW9uL1NBTUwyRXhjZXB0aW9uLmh0bWwuCiAqLwoKLyoKICogVGVtcGxhdGUvZGVmYXVsdCBzY3JpcHQgZm9yIFNBTUwyIElEUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTaW5nbGVTaWduT24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNpbmdsZVNpZ25PbiIpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZUF1dGhlbnRpY2F0aW9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlQXV0aGVudGljYXRpb24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZUF1dGhlbnRpY2F0aW9uIik7CiAgICByZXR1cm4gdHJ1ZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZFJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBoYXBwZW5lZCBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTZW5kUmVzcG9uc2UgKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNlbmRSZXNwb25zZSIpOwogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IGF1dGhuUmVxdWVzdDogIithdXRoblJlcXVlc3QpOwogICAgICByZXNwb25zZS5zZW5kUmVkaXJlY3QoImh0dHBzOi8vaWRjLnNjaGV1YmVyLmlvL2FtL1hVSS8/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPURpc3BhdGNoZXImRm9yY2VBdXRoPXRydWUmZ290bz0iK3JlbGF5U3RhdGUpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpZ25SZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICByZXMKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2lnblJlc3BvbnNlICgpIHsKICAgICAgbG9nZ2VyLmVycm9yKCJDaGljYWdvOiBwcmVTaWduUmVzcG9uc2UiKTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZEZhaWx1cmVSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGZhdWx0Q29kZQogKiAgICAgZmF1bHREZXRhaWwKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2VuZEZhaWx1cmVSZXNwb25zZSAoKSB7CiAgICAgIGxvZ2dlci5lcnJvcigiQ2hpY2FnbzogcHJlU2VuZEZhaWx1cmVSZXNwb25zZSIpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e5c302c8-f838-4698-87cc-d7225fc82454\",\"name\":\"EmailAsUsername\",\"description\":\"null\",\"script\":\"b2JqZWN0QXR0cmlidXRlcyA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpCnVzZXJOYW1lID0gb2JqZWN0QXR0cmlidXRlcy5nZXQoInVzZXJOYW1lIikKCmlmKHVzZXJOYW1lKXsKICAvL0Zvcm0gRmlsbAogIG9iamVjdEF0dHJpYnV0ZXMucHV0KCJtYWlsIiwgdXNlck5hbWUpCn0gZWxzZSB7CiAgLy9Tb2NpYWwKICBvYmplY3RBdHRyaWJ1dGVzLnB1dCgidXNlck5hbWUiLCBvYmplY3RBdHRyaWJ1dGVzLmdldCgibWFpbCIpKQp9CgoKc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgb2JqZWN0QXR0cmlidXRlcyk7Ci8vc2hhcmVkU3RhdGUucHV0KCJ1c2VybmFtZSIsIG1haWwpCgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"223739f3-9c54-43b7-9572-3c5338786145\",\"name\":\"Format Username\",\"description\":\"null\",\"script\":\"dmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpOwoKc2hhcmVkU3RhdGUucHV0KCJkaXNwbGF5TmFtZSIsIHVzZXJuYW1lKTsKb3V0Y29tZSA9ICJjb250aW51ZSI7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"2c38c998-aec0-4e56-8d46-bff6e24a704e\",\"name\":\"My Example Library\",\"description\":\"My Example Library\",\"script\":\"dmFyIGkgPSAwOwoKZnVuY3Rpb24gYWRkKGopIHtpICs9IGp9OwpmdW5jdGlvbiBsb2dUb3RhbChsb2cpIHsgbG9nLmluZm8oIlRvdGFsOiAiICsgaSkgfTsKCi8vIGV4cG9ydCBjb25zdGFudApleHBvcnRzLk1TRyA9ICdGaW5hbCBzdW0nOwoKLy8gZXhwb3J0IGZ1bmN0aW9ucwpleHBvcnRzLmFkZCA9IGFkZDsKZXhwb3J0cy5sb2dUb3RhbCA9IGxvZ1RvdGFsOwoKLy9kaXJlY3QgZXhwb3J0IHVzaW5nIGFuIGlubGluZSBkZWNsYXJhdGlvbgpleHBvcnRzLmxvZ1RvdGFsV2l0aE1lc3NhZ2UgPSAobG9nLCBtZXNzYWdlKSA9PiBsb2cuaW5mbyhtZXNzYWdlICsgIjogIiArIGkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"d030f9fb-6d2d-4f5a-834d-b4f6304b8eb9\",\"name\":\"Impossible Traveller\",\"description\":\"null\",\"script\":\"Ly8gR2VvVmVsb2NpdHkgLyBJbXBvc3NpYmxlIEpvdXJuZXkgYXV0aGVudGljYXRpb24gc2NyaXB0Ci8vCi8vIE91dGNvbWVzIGZvciB0aGlzIHNjcmlwdCBhcmU6Ci8vICAgICAibm9Mb2NhdGlvbiIgLSB0aGUgZGV2aWNlJ3MgY3VycmVudCBsb2NhdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIHNoYXJlZFN0YXRlCi8vICAgICAibm9IaXN0b3J5IiAgLSB0aGUgdXNlcidzIHByb2ZpbGUgZG9lc24ndCB5ZXQgY29udGFpbiBwcmV2aW91cyBkZXZpY2UgaGlzdG9yeQovLyAgICAgIm9rIiAgICAgICAgIC0gdGhlIHVzZXIncyBnZW92ZWxvY2l0eSBpcyBsb3dlciB0aGFuIHRoZSBtYXggYWNjZXB0YWJsZSBzcGVlZAovLyAgICAgICAiaW1wb3NzaWJsZSIgLSB0aGUgdXNlcidzIGdlb3ZlbG9jaXR5IGV4Y2VlZHMgbWF4IGFjY2VwdGFibGUgc3BlZWQKTUFYX1ZFTE9DSVRZPTMwMApmdW5jdGlvbiBjYWxjdWxhdGVEaXN0YW5jZShmaXJzdCwgc2Vjb25kKSB7CiAgICB2YXIgZmFjdG9yID0gKE1hdGguUEkgLyAxODApLAogICAgICAgIHRoZXRhLAogICAgICAgIGRpc3Q7CiAgICBmdW5jdGlvbiBkZWdyZWVzVG9SYWRpYW5zKGRlZ3JlZXMpIHsKICAgICAgICByZXR1cm4gZGVncmVlcyAqIGZhY3RvcjsKICAgIH0KICAgIGZ1bmN0aW9uIHJhZGlhbnNUb0RlZ3JlZXMocmFkaWFucykgewogICAgICAgIHJldHVybiByYWRpYW5zIC8gZmFjdG9yOwogICAgfQogICAgdGhldGEgPSBmaXJzdC5sb25naXR1ZGUgLSBzZWNvbmQubG9uZ2l0dWRlOwogICAgZGlzdCA9IE1hdGguc2luKGRlZ3JlZXNUb1JhZGlhbnMoZmlyc3QubGF0aXR1ZGUpKSAqIE1hdGguc2luKGRlZ3JlZXNUb1JhZGlhbnMoc2Vjb25kLmxhdGl0dWRlKSkgKwogICAgICAgIE1hdGguY29zKGRlZ3JlZXNUb1JhZGlhbnMoZmlyc3QubGF0aXR1ZGUpKSAqIE1hdGguY29zKGRlZ3JlZXNUb1JhZGlhbnMoc2Vjb25kLmxhdGl0dWRlKSkgKgogICAgICAgIE1hdGguY29zKGRlZ3JlZXNUb1JhZGlhbnModGhldGEpKTsKICAgIGRpc3QgPSBNYXRoLmFjb3MoZGlzdCk7CiAgICBkaXN0ID0gcmFkaWFuc1RvRGVncmVlcyhkaXN0KTsKICAgIGRpc3QgPSBkaXN0ICogNjAgKiAxLjE1MTU7CiAgICByZXR1cm4gZGlzdDsKfTsKdmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKLy9kZXZpY2VzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZSh1c2VybmFtZSwgImRldmljZVByb2ZpbGVzIikudG9BcnJheSgpOwpsb2dpbkhpc3RvcnkgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCAiZnItYXR0ci1pbXVsdGkxIikudG9BcnJheSgpOwppZiAobG9naW5IaXN0b3J5Lmxlbmd0aCA9PSAwKSBvdXRjb21lID0gIm5vSGlzdG9yeSI7CmVsc2UgewogICAgICBvdXRjb21lID0gIm5vTG9jYXRpb24iOwogICAgICBpZiAoc2hhcmVkU3RhdGUuY29udGFpbnNLZXkoImZvcmdlUm9jay5kZXZpY2UucHJvZmlsZSIpICYmIHNoYXJlZFN0YXRlLmdldCgiZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlIikuY29udGFpbnNLZXkoImxvY2F0aW9uIikpIHsKICAgICAgICB2YXIgdGhpc0RldmljZSA9IHNoYXJlZFN0YXRlLmdldCgiZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlIik7CiAgICAgICAgICBvdXRjb21lID0gIm9rIjsKICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpCiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxvZ2luSGlzdG9yeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIHZhciBlbnRyeSA9IEpTT04ucGFyc2UobG9naW5IaXN0b3J5W2ldKTsKICAgICAgICAgICAgICB2YXIgbGFzdFNlbGVjdGVkRGF0ZSA9IGVudHJ5WyJsYXN0U2VsZWN0ZWREYXRlIl07CiAgICAgICAgICAgICAgdmFyIGxhc3RMb2NhdGlvbiA9IGVudHJ5WyJsb2NhdGlvbiJdOwogICAgICAgICAgICAgIHZhciB0aW1lRGlmZiA9IG5vdyAtIHBhcnNlSW50KGxhc3RTZWxlY3RlZERhdGUpOwogICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBjYWxjdWxhdGVEaXN0YW5jZSh7ICJsYXRpdHVkZSI6IHRoaXNEZXZpY2UuZ2V0KCJsb2NhdGlvbiIpLmdldCgibGF0aXR1ZGUiKSwgImxvbmdpdHVkZSI6IHRoaXNEZXZpY2UuZ2V0KCJsb2NhdGlvbiIpLmdldCgibG9uZ2l0dWRlIikgfSwgbGFzdExvY2F0aW9uKTsKICAgICAgICAgICAgICB2ZWxvY2l0eSA9IGRpc3RhbmNlIC8gKHRpbWVEaWZmIC8gMzYwMDAwMCk7CiAgICAgICAgICAgICAgaWYgKHZlbG9jaXR5ID4gTUFYX1ZFTE9DSVRZKSBvdXRjb21lID0gImltcG9zc2libGUiOwogICAgICAgIH0KICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"cf3515f0-8278-4ee3-a530-1bad7424c416\",\"name\":\"Alpha OIDC Claims Script\",\"description\":\"Default alpha realm script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"0ca79cb0-ea11-4e87-adac-7f8aeebc8c03\",\"name\":\"Save Mobile OATH Preference\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkKKTsKd2l0aCAoZnIpIHsKICAKICB2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCiAgdmFyIG1mYVByZWZBdHRyaWJ1dGUgPSAiZnItYXR0ci1pbXVsdGkyIgogIHZhciBtZmFUeXBlID0gIiI7CiAgCiAgaWRSZXBvc2l0b3J5LmFkZEF0dHJpYnV0ZSh1c2VybmFtZSwgbWZhUHJlZkF0dHJpYnV0ZSwgWyJvYXRoIl0pOwogIAogIG91dGNvbWUgPSAidHJ1ZSIKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e3b1018f-1b2e-4e96-9950-087bdfa13d6d\",\"name\":\"Set New Favourite\",\"description\":\"null\",\"script\":\"ZnVuY3Rpb24gZ2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSkgewogIHZhciBpZCA9IHNoYXJlZFN0YXRlLmdldCgnX2lkJyk7CiAgdmFyIGZySWRtQ3VzdG9tQXR0cmlidXRlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoaWQsICdmci1pZG0tY3VzdG9tLWF0dHJzJyk7CiAgaWYgKGZySWRtQ3VzdG9tQXR0cmlidXRlcykgewogICAgICB2YXIgZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0ID0gSlNPTi5wYXJzZShTdHJpbmcoZnJJZG1DdXN0b21BdHRyaWJ1dGVzLnRvQXJyYXkoKVswXSkpOwogICAgICAgIHJldHVybiBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdOwogIH0KfQoKZnVuY3Rpb24gc2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSxjdXN0b21BdHRyVmFsdWUpIHsKICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCAnZnItaWRtLWN1c3RvbS1hdHRycycpOwogIGlmIChmcklkbUN1c3RvbUF0dHJpYnV0ZXMpIHsKICAgIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QgPSBKU09OLnBhcnNlKFN0cmluZyhmcklkbUN1c3RvbUF0dHJpYnV0ZXMudG9BcnJheSgpWzBdKSk7CiAgICBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdID0gY3VzdG9tQXR0clZhbHVlOwogICAgdmFyIGpzb25fc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0KTsKICAgIGlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoaWQsICJmci1pZG0tY3VzdG9tLWF0dHJzIixbanNvbl9zdHJpbmddKTsKICB9Cn0KCnZhciBhdHRyID0gZ2V0Q3VzdG9tQXR0clZhbHVlKCJjdXN0b21fZmF2b3VyaXRlRmFjdG9yIik7CmlmICghYXR0cil7CnNldEN1c3RvbUF0dHJWYWx1ZSAoImN1c3RvbV9mYXZvdXJpdGVGYWN0b3IiLCJXZWJBdXRoTiIpOwp9CgoKCm91dGNvbWUgPSAidHJ1ZSI7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"25e6c06d-cf70-473b-bd28-26931edc476b\",\"name\":\"OAuth2 Validate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Validation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgdmFsaWRhdGVzIHRoZSByZXF1ZXN0ZWQgc2NvcGVzIGFnYWluc3QgdGhlIGFsbG93ZWQgc2NvcGVzLgogKiBJZiBubyBzY29wZXMgYXJlIHJlcXVlc3RlZCwgZGVmYXVsdCBzY29wZXMgYXJlIGFzc3VtZWQuCiAqIFRoZSBzY3JpcHQgaGFzIGZvdXIgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgZGlmZmVyZW50IE9BdXRoMiBmbG93czoKICogICAgICAtIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlCiAqICAgICAgLSB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUKICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHJlcXVlc3RlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgVGhlIHNldCBvZiByZXF1ZXN0ZWQgc2NvcGVzLgogKiBkZWZhdWx0U2NvcGVzIC0gU2V0PFN0cmluZz4gKDEpLgogKiAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBkZWZhdWx0IHNjb3Blcy4KICogYWxsb3dlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgYWxsb3dlZCBzY29wZXMuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIGRlYnVnIGxvZ2dlciBpbnN0YW5jZToKICogICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgICAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9BVVRIMl9WQUxJREFURV9TQ09QRQogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKgogKiBUaHJvd3MgSW52YWxpZFNjb3BlRXhjZXB0aW9uOgogKiAgICAgIC0gaWYgdGhlcmUgYXJlIG5vIHNjb3BlcyByZXF1ZXN0ZWQgYW5kIGRlZmF1bHQgc2NvcGVzIGFyZSBlbXB0eQogKiAgICAgIC0gaWYgYSByZXF1ZXN0ZWQgc2NvcGUgaXMgbm90IGFsbG93ZWQKICoKICogUmV0dXJuIC0gYSBTZXQ8U3RyaW5nPiBvZiB2YWxpZGF0ZWQgc2NvcGVzICgxKS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICgyKSBDbGllbnQgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svaHR0cC9DbGllbnQuaHRtbC4KICovCgovKioKICogRGVmYXVsdCB2YWxpZGF0ZSBzY29wZSBzY3JpcHQuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZVNjb3BlcyAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkU2NvcGVFeGNlcHRpb24KICAgICk7CgogICAgdmFyIHNjb3BlczsKICAgIGlmIChyZXF1ZXN0ZWRTY29wZXMgPT0gbnVsbCB8fCByZXF1ZXN0ZWRTY29wZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgc2NvcGVzID0gZGVmYXVsdFNjb3BlczsKICAgIH0gZWxzZSB7CiAgICAgICAgc2NvcGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KGFsbG93ZWRTY29wZXMpOwogICAgICAgIHNjb3Blcy5yZXRhaW5BbGwocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICBpZiAocmVxdWVzdGVkU2NvcGVzLnNpemUoKSA+IHNjb3Blcy5zaXplKCkpIHsKICAgICAgICAgICAgdmFyIGludmFsaWRTY29wZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICAgICAgaW52YWxpZFNjb3Blcy5yZW1vdmVBbGwoYWxsb3dlZFNjb3Blcyk7CiAgICAgICAgICAgIHRocm93IG5ldyBmckphdmEuSW52YWxpZFNjb3BlRXhjZXB0aW9uKCdVbmtub3duL2ludmFsaWQgc2NvcGUocyknKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKHNjb3BlcyA9PSBudWxsIHx8IHNjb3Blcy5pc0VtcHR5KCkpIHsKICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRTY29wZUV4Y2VwdGlvbignTm8gc2NvcGUgcmVxdWVzdGVkIGFuZCBubyBkZWZhdWx0IHNjb3BlIGNvbmZpZ3VyZWQnKTsKICAgIH0KICAgIHJldHVybiBzY29wZXM7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlICgpIHsKICAgIHJldHVybiB2YWxpZGF0ZVNjb3BlcygpOwp9CgpmdW5jdGlvbiB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_VALIDATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"91d197de-5916-4dca-83b5-9a4df26e7159\",\"name\":\"WordPress Profile Normalization\",\"description\":\"Normalizes raw profile data from WordPress\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJuYW1lKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5hdmF0YXJfVVJMKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"name\":\"shared\",\"description\":\"set the same shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdzaGFyZWRWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzaGFyZWQgYWNyb3NzIGFsbCBuZXN0ZWQgam91cm5leXMuIEl0IGNvbnRhaW5zIGFuIGluZGljYXRvciBpbiB3aGljaCBsZXZlbCBpdCB3YXMgbGFzdCBzZXQuJyk7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"5e854779-6ec1-4c39-aeba-0477e0986646\",\"name\":\"Config Provider Node Script\",\"description\":\"Script to provide values for a config provider node\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKioKICogVGhlIGZvbGxvd2luZyBzY3JpcHQgaXMgYSBzaW1wbGlmaWVkIHRlbXBsYXRlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0byBidWlsZAogKiB1cCBhIGNvbmZpZyBNYXAgb2JqZWN0IHdpdGggY3VzdG9tIHZhbHVlcy4gVGhlIENvbmZpZyBQcm92aWRlciBOb2RlIHdpbGwgdGhlbgogKiBwcm92aWRlIHRoaXMgY29uZmlnIE1hcCB0byB0aGUgZGVzaXJlZCBub2RlIHR5cGUuIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBNYXAKICogeW91IGJ1aWxkIGhlcmUgaXMgbmFtZWQgJ2NvbmZpZycuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKgogKiBub2RlU3RhdGUgLSBOb2RlIFN0YXRlICgxKQogKiAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoaXMgcmVwcmVzZW50cyB0aGUgY3VycmVudCB2YWx1ZXMgc3RvcmVkIGluIHRoZSBub2RlIHN0YXRlLgogKgogKiBpZFJlcG9zaXRvcnkgLSBQcm9maWxlIERhdGEgKDIpCiAqICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgYSByZXBvc2l0b3J5IHRvIHJldHJpZXZlIHVzZXIgaW5mb3JtYXRpb24uCiAqCiAqIHNlY3JldHMgLSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAoMykKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBTZWNyZXRzIEFQSSBmcm9tIGEgc2NyaXB0aW5nIGNvbnRleHQuCiAqCiAqIHJlcXVlc3RIZWFkZXJzICg0KSAtIE1hcCAoNSkKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIGZvciBhY2Nlc3NpbmcgaGVhZGVycyBpbiB0aGUgbG9naW4gcmVxdWVzdC4KICoKICogbG9nZ2VyIC0gRGVidWcgTG9nZ2luZyAoNikKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2UuCiAqCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoNykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cy4KICoKICogcmVhbG0gLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqCiAqIGV4aXN0aW5nU2Vzc2lvbiAtIE1hcDxTdHJpbmcsIFN0cmluZz4gKDUpCiAqICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LiBUaGUgcmV0dXJuZWQgbWFwIGZyb20KICogICAgICAgICAgU1NPVG9rZW4uZ2V0UHJvcGVydGllcygpICg4KQogKgogKiByZXF1ZXN0UGFyYW1ldGVycyAtIE1hcCAoNSkKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBwYXJhbWV0ZXJzLgogKgogKgogKiBPdXRwdXRzOgogKgogKiBjb25maWcgLSBNYXAgKDUpCiAqICAgICAgICAgICBEZWZpbmUgYW5kIGZpbGwgYSBNYXAgb2JqZWN0IG5hbWVkICdjb25maWcnIHdpdGggY3VzdG9tIHZhbHVlcywgdGhpcyB3aWxsIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlCiAqICAgICAgICAgICBhc3NvY2lhdGVkIG5vZGUgc2VsZWN0ZWQgaW4gdGhlIENvbmZpZ1Byb3ZpZGVyTm9kZS4KICoKICogUmVmZXJlbmNlOgogKiAoMSkgTm9kZSBTdGF0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9pZGNsb3VkLWFtL2xhdGVzdC9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtbm9kZVN0YXRlCiAqICgyKSBQcm9maWxlIERhdGEgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4xL2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1pZC1yZXBvCiAqICgzKSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjEvYXV0aGVudGljYXRpb24tZ3VpZGUvc2NyaXB0aW5nLWFwaS1ub2RlLmh0bWwjc2NyaXB0aW5nLWFwaS1hdXRobi1zZWNyZXRzCiAqICg0KSBSZXF1ZXN0IEhlYWRlcnMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtcmVxdWVzdEhlYWRlcnMuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL01hcC5odG1sCiAqICg2KSBEZWJ1ZyBMb2dnaW5nIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogKDcpIEhUVFAgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg4KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqLwoKY29uZmlnID0gewogICAgImtleTAiOiB7InN1YktleSI6ICJ2YWx1ZTAifSwKICAgICJrZXkxIjogInZhbHVlMSIKfTs=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"CONFIG_PROVIDER_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1d475815-72cb-42eb-aafd-4026989d28a7\",\"name\":\"Social Identity Provider Profile Transformation Script\",\"description\":\"Default global script for Social Identity Provider Profile Transformation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyogRGVmYXVsdCBTb2NpYWwgSWRlbnRpdHkgUHJvdmlkZXIgUHJvZmlsZSBUcmFuc2Zvcm1hdGlvbiBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzICov\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"bae1d54a-e97d-4997-aa5d-c027f21af82c\",\"name\":\"Facebook Profile Normalization\",\"description\":\"Normalizes raw profile data from Facebook\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"36863ffb-40ec-48b9-94b1-9a99f71cc3b5\",\"name\":\"OIDC Claims Script\",\"description\":\"Default global script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c827d2b4-3608-4693-868e-bbcf86bd87c7\",\"name\":\"Scripted Module - Client Side\",\"description\":\"Default global script for client side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTYtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qIERlZmF1bHQgQXV0aGVudGljYXRpb24gY2xpZW50IHNpZGUgc2NyaXB0IHRvIHVzZSBhcyBhIHRlbXBsYXRlIGZvciBuZXcgc2NyaXB0cyAqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"4c963bb3-7084-43d0-bcdc-a47482cf1825\",\"name\":\"Dummy\",\"description\":\"Dummy\",\"script\":\"Cm91dGNvbWUgPSAidHJ1ZSI7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"8e298710-b55e-4085-a464-88a375a4004b\",\"name\":\"Twitter Profile Normalization\",\"description\":\"Normalizes raw profile data from Twitter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkX3N0ciksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnByb2ZpbGVfaW1hZ2VfdXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnNjcmVlbl9uYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"634fb0b2-8873-4e78-8913-9a669e4f3816\",\"name\":\"Debug Shared State\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCik7CndpdGggKGZyKSB7CiAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgZGVidWcgPSBTdHJpbmcoIlNoYXJlZCBzdGF0ZTogIiArIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkgKyAiXFxuIik7CiAgICAgIGRlYnVnID0gU3RyaW5nKGRlYnVnICsgIlJlcXVlc3QgaGVhZGVyczogIiArIHJlcXVlc3RIZWFkZXJzLnRvU3RyaW5nKCkgKyAiXFxuIik7CiAgICAgIGlmICh0eXBlb2YgZXhpc3RpbmdTZXNzaW9uICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgZGVidWcgPSBTdHJpbmcoZGVidWcgKyAiRXhpc3Rpbmcgc2Vzc2lvbjogIiArICJcXG4iKTsKICAgICAgfSAgCiAgICAgICAgIGxvZ2dlci5lcnJvcigiSk9OSzogIiArIGRlYnVnKTsKICAgICAgc2NyaXB0ID0gU3RyaW5nKCdhbGVydCgiJytkZWJ1ZysnIik7Jyk7CiAgICAgIGFjdGlvbiA9IEFjdGlvbi5zZW5kKG5ldyBTY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2soc2NyaXB0KSkuYnVpbGQoKTsKICB9CiAgb3V0Y29tZSA9ICJ0cnVlIjsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1244e639-4a31-401d-ab61-d75133d8dc9e\",\"name\":\"Instagram Profile Normalization\",\"description\":\"Normalizes raw profile data from Instagram\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"ed685f9f-5909-4726-86e8-22bd38b47663\",\"name\":\"Normalized Profile to Identity\",\"description\":\"Converts a normalized social profile into an Identity\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgaWRlbnRpdHkgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgiY24iLCBub3JtYWxpemVkUHJvZmlsZS5kaXNwbGF5TmFtZSksCiAgICAgICAgZmllbGQoInVzZXJOYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUudXNlcm5hbWUpLAogICAgICAgIGZpZWxkKCJpcGxhbmV0LWFtLXVzZXItYWxpYXMtbGlzdCIsIHNlbGVjdGVkSWRwICsgJy0nICsgbm9ybWFsaXplZFByb2ZpbGUuaWQuYXNTdHJpbmcoKSkpKQoKcmV0dXJuIGlkZW50aXR5\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"40a38167-2371-4d49-bbf1-e0e97ace3132\",\"name\":\"pwdlessCheck.js\",\"description\":\"null\",\"script\":\"b3V0Y29tZSA9ICJsZWdhY3kiOwp2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwppZihnZXRDdXN0b21BdHRyVmFsdWUoImN1c3RvbV9wYXNzd29yZGxlc3MiKT09dHJ1ZSkgewogIG91dGNvbWUgPSAicHdkbGVzcyI7Cn0KCmZ1bmN0aW9uIGdldEN1c3RvbUF0dHJWYWx1ZSAoY3VzdG9tQXR0ck5hbWUpCnsKICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCAnZnItaWRtLWN1c3RvbS1hdHRycycpOwogIGlmIChmcklkbUN1c3RvbUF0dHJpYnV0ZXMpCiAgewogICAgICB2YXIgZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0ID0gSlNPTi5wYXJzZShTdHJpbmcoZnJJZG1DdXN0b21BdHRyaWJ1dGVzLnRvQXJyYXkoKVswXSkpOwogICAgICAgIHJldHVybiBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdOwogIH0KfQo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"9de3eb62-f131-4fac-a294-7bd170fd4acb\",\"name\":\"Scripted Policy Condition\",\"description\":\"Default global script for Scripted Policy Conditions\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qKgogKiBUaGlzIGlzIGEgUG9saWN5IENvbmRpdGlvbiBleGFtcGxlIHNjcmlwdC4gSXQgZGVtb25zdHJhdGVzIGhvdyB0byBhY2Nlc3MgYSB1c2VyJ3MgaW5mb3JtYXRpb24sCiAqIHVzZSB0aGF0IGluZm9ybWF0aW9uIGluIGV4dGVybmFsIEhUVFAgY2FsbHMgYW5kIG1ha2UgYSBwb2xpY3kgZGVjaXNpb24gYmFzZWQgb24gdGhlIG91dGNvbWUuCiAqLwoKdmFyIHVzZXJBZGRyZXNzLCB1c2VySVAsIHJlc291cmNlSG9zdDsKCmlmICh2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkpIHsKCiAgICB2YXIgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9IGdldENvdW50cnlGcm9tVXNlckFkZHJlc3MoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJDb3VudHJ5IHJldHJpZXZlZCBmcm9tIHVzZXIncyBhZGRyZXNzOiAiICsgY291bnRyeUZyb21Vc2VyQWRkcmVzcyk7CiAgICB2YXIgY291bnRyeUZyb21Vc2VySVAgPSBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpOwogICAgbG9nZ2VyLm1lc3NhZ2UoIkNvdW50cnkgcmV0cmlldmVkIGZyb20gdXNlcidzIElQOiAiICsgY291bnRyeUZyb21Vc2VySVApOwogICAgdmFyIGNvdW50cnlGcm9tUmVzb3VyY2VVUkkgPSBnZXRDb3VudHJ5RnJvbVJlc291cmNlVVJJKCk7CiAgICBsb2dnZXIubWVzc2FnZSgiQ291bnRyeSByZXRyaWV2ZWQgZnJvbSByZXNvdXJjZSBVUkk6ICIgKyBjb3VudHJ5RnJvbVJlc291cmNlVVJJKTsKCiAgICBpZiAoY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21Vc2VySVAgJiYgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21SZXNvdXJjZVVSSSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIFN1Y2NlZWRlZCIpOwogICAgICAgIHJlc3BvbnNlQXR0cmlidXRlcy5wdXQoImNvdW50cnlPZk9yaWdpbiIsIFtjb3VudHJ5RnJvbVVzZXJBZGRyZXNzXSk7CiAgICAgICAgYXV0aG9yaXplZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIEZhaWxlZCIpOwogICAgICAgIGF1dGhvcml6ZWQgPSBmYWxzZTsKICAgIH0KCn0gZWxzZSB7CiAgICBsb2dnZXIubWVzc2FnZSgiUmVxdWlyZWQgcGFyYW1ldGVycyBub3QgZm91bmQuIEF1dGhvcml6YXRpb24gRmFpbGVkLiIpOwogICAgYXV0aG9yaXplZCA9IGZhbHNlOwp9CgovKioKICogVXNlIHRoZSB1c2VyJ3MgYWRkcmVzcyB0byBsb29rdXAgdGhlaXIgY291bnRyeSBvZiByZXNpZGVuY2UuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgdXNlcidzIGNvdW50cnkgb2YgcmVzaWRlbmNlLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21Vc2VyQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlckFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgZ2VvY29kZSA9IEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvY29kZS5yZXN1bHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGdlb2NvZGUucmVzdWx0c1tpXTsKICAgICAgICB2YXIgajsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgcmVzdWx0LmFkZHJlc3NfY29tcG9uZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAocmVzdWx0LmFkZHJlc3NfY29tcG9uZW50c1tpXS50eXBlc1swXSA9PSAiY291bnRyeSIpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYWRkcmVzc19jb21wb25lbnRzW2ldLmxvbmdfbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKLyoqCiAqIFVzZSB0aGUgdXNlcidzIElQIHRvIGxvb2t1cCB0aGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqLwpmdW5jdGlvbiBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgdXNlcklQKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdC5jb3VudHJ5OwogICAgfQp9CgovKioKICogVXNlIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UncyBob3N0IG5hbWUgdG8gbG9va3VwIHRoZSBjb3VudHJ5IHdoZXJlIHRoZSByZXNvdXJjZSBpcyBob3N0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBpbiB3aGljaCB0aGUgcmVzb3VyY2UgaXMgaG9zdGVkLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21SZXNvdXJjZVVSSSgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgZW5jb2RlVVJJQ29tcG9uZW50KHJlc291cmNlSG9zdCkpOwogICAgICByZXF1ZXN0LnNldE1ldGhvZCgiR0VUIik7CgogICAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3QpLmdldCgpOwogICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwoKICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIGlmIChyZXN1bHQpIHsKICAgICAgICByZXR1cm4gcmVzdWx0LmNvdW50cnk7CiAgICB9Cn0KCi8qKgogKiBSZXRyaWV2ZSBhbmQgdmFsaWRhdGUgdGhlIHZhcmlhYmxlcyByZXF1aXJlZCB0byBtYWtlIHRoZSBleHRlcm5hbCBIVFRQIGNhbGxzLgogKgogKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2lsbCBiZSB0cnVlIGlmIHZhbGlkYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkgewogICAgdmFyIHVzZXJBZGRyZXNzU2V0ID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKCJwb3N0YWxBZGRyZXNzIik7CiAgICBpZiAodXNlckFkZHJlc3NTZXQgPT0gbnVsbCB8fCB1c2VyQWRkcmVzc1NldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gYWRkcmVzcyBzcGVjaWZpZWQgZm9yIHVzZXI6ICIgKyB1c2VybmFtZSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdXNlckFkZHJlc3MgPSB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIGFkZHJlc3M6ICIgKyB1c2VyQWRkcmVzcyk7CgogICAgaWYgKCFlbnZpcm9ubWVudCkgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJObyBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiB0aGUgZXZhbHVhdGlvbiByZXF1ZXN0LiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB2YXIgaXBTZXQgPSBlbnZpcm9ubWVudC5nZXQoIklQIik7CiAgICBpZiAoaXBTZXQgPT0gbnVsbCB8fCBpcFNldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gSVAgc3BlY2lmaWVkIGluIHRoZSBldmFsdWF0aW9uIHJlcXVlc3QgZW52aXJvbm1lbnQgcGFyYW1ldGVycy4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB1c2VySVAgPSBpcFNldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIElQOiAiICsgdXNlcklQKTsKCiAgICBpZiAoIXJlc291cmNlVVJJKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIHJlc291cmNlIFVSSSBzcGVjaWZpZWQuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmVzb3VyY2VIb3N0ID0gcmVzb3VyY2VVUkkubWF0Y2goL14oLio6XC9cLykod3d3XC4pPyhbQS1aYS16MC05XC1cLl0rKSg6WzAtOV0rKT8oLiopJC8pWzNdOwogICAgbG9nZ2VyLm1lc3NhZ2UoIlJlc291cmNlIGhvc3Q6ICIgKyByZXNvdXJjZUhvc3QpOwoKICAgIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"POLICY_CONDITION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"01bec3a8-105d-45dc-9f80-d003e1b33fa2\",\"name\":\"updateWebAuthNProfileNickname.js\",\"description\":\"null\",\"script\":\"dmFyIGlkID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKdmFyIHByb2ZpbGVzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShpZCwid2ViYXV0aG5EZXZpY2VQcm9maWxlcyIpOwp2YXIgb2JqZWN0QXR0cmlidXRlcyA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwp2YXIgbmV3Tmlja05hbWUgPSBvYmplY3RBdHRyaWJ1dGVzLmdldCgiY3VzdG9tX25pY2tuYW1lIik7Cgp2YXIgcHJvZmlsZXNBcnJheSA9IHByb2ZpbGVzLnRvQXJyYXkoKTsKCmZvciAodmFyIGk9MDsgaTxwcm9maWxlc0FycmF5Lmxlbmd0aDsgaSsrKQp7CiAgcHJvZmlsZXNBcnJheVtpXT1wcm9maWxlc0FycmF5W2ldLnJlcGxhY2UoIk5ldyBTZWN1cml0eSBLZXkiLG5ld05pY2tOYW1lKTsKfQppZFJlcG9zaXRvcnkuc2V0QXR0cmlidXRlKGlkLCJ3ZWJhdXRobkRldmljZVByb2ZpbGVzIixbXSk7CmZvciAodmFyIGk9MDsgaTxwcm9maWxlc0FycmF5Lmxlbmd0aDsgaSsrKQp7CiAgaWRSZXBvc2l0b3J5LmFkZEF0dHJpYnV0ZShpZCwid2ViYXV0aG5EZXZpY2VQcm9maWxlcyIscHJvZmlsZXNBcnJheVtpXSk7Cn0Kb3V0Y29tZSA9ICJzdWNjZXNzIjs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"d58977ed-0542-4147-8197-973ef7300191\",\"name\":\"Custom Device Match Script\",\"description\":\"Custom Device Match Script\",\"script\":\"LyoKICogQ3VzdG9tIERldmljZSBNYXRjaCBTY3JpcHQKICovCgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3d97c436-42c0-4dd0-a571-ea6f34f752b3\",\"name\":\"Itsme Profile Normalization\",\"description\":\"Normalizes raw profile data from Itsme\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKaW1wb3J0IG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUKCkpzb25WYWx1ZSBtYW5hZ2VkVXNlciA9IGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuc3ViKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmdpdmVuX25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5mYW1pbHlfbmFtZSksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQpyZXR1cm4gbWFuYWdlZFVzZXI=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"18940a0d-2997-49af-8cb9-9d8da38b4145\",\"name\":\"resetPush.js\",\"description\":\"null\",\"script\":\"aWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwppZFJlcG9zaXRvcnkuc2V0QXR0cmlidXRlKGlkLCAicHVzaERldmljZVByb2ZpbGVzIixbXSk7CgoKICAgIApvdXRjb21lID0gInRydWUiOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c735de08-f8f2-4e69-aa4a-2d8d3d438323\",\"name\":\"OAuth2 May Act Script\",\"description\":\"Default global script for OAuth2 May Act\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKiB0b2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gdG8gYmUgdXBkYXRlZC4gTXV0YWJsZSBvYmplY3QsIGFsbCBjaGFuZ2VzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gd2lsbCBiZSByZWZsZWN0ZWQuCiAqIGxvZ2dlciAtIGFsd2F5cyBwcmVzZW50LCBjb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIHNjcmlwdE5hbWUgLSBhbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0CiAqIHNlc3Npb24gLSBwcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdAogKiByZXF1ZXN0UHJvcGVydGllcyAtIGFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIHRoZSByZXF1ZXN0IFVSSQogKiAgICAgICAgICAgICAgICAgICAgIHJlYWxtIC0gdGhlIHJlYWxtIHRoYXQgdGhlIHJlcXVlc3QgcmVsYXRlcyB0bwogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBhIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLiBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IKICogICAgICAgICAgICAgICAgICAgICBtb3JlIHByb3BlcnRpZXMuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QKICogICAgICAgICAgICAgICAgICAgICBwcmFjdGljZXMuCiAqIGNsaWVudFByb3BlcnRpZXMgLSBwcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICBjbGllbnRJZCAtIHRoZSBjbGllbnQncyBVcmkgZm9yIHRoZSByZXF1ZXN0IGxvY2FsZQogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBsaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gbGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudAogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFNjb3BlcyAtIGxpc3Qgb2YgdGhlIGFsbG93ZWQgc2NvcGVzIGZvciB0aGUgY2xpZW50CiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzLCBlLmc6CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdE1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyB0ZXN0bWFwIC0+IEtleTEgLT4gVmFsdWUxCiAqCiAqIGlkZW50aXR5IC0gYWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIKICogc2NvcGVzIC0gYWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzCiAqLwovKgppbXBvcnQgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQoKdG9rZW4uc2V0TWF5QWN0KAogICAgSnNvblZhbHVlLmpzb24oSnNvblZhbHVlLm9iamVjdCgKICAgICAgICBKc29uVmFsdWUuZmllbGQoImNsaWVudF9pZCIsICJteUNsaWVudCIpLCAKICAgICAgICBKc29uVmFsdWUuZmllbGQoInN1YiIsICIodXNyIW15QWN0b3IpIikpKSkKKi8=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"OAUTH2_MAY_ACT\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c234ba0b-58a1-4cfd-9567-09edde980745\",\"name\":\"ForgeRock Internal: OAuth2 Access Token Modification Script\",\"description\":\"Internal token modification script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwovLyBTY3JpcHQgaXMgaW50ZW50aW9uYWxseSBlbXB0eQo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":1433147666269,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"58d29080-4563-480b-89bb-1e7719776a21\",\"name\":\"Google Profile Normalization\",\"description\":\"Normalizes raw profile data from Google\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3bd13a46-61c4-4974-8efb-1700c80c64e3\",\"name\":\"Inactive Device Match Script\",\"description\":\"Inactive Device Match Script\",\"script\":\"LyoKICogSW5hY3RpdmUgRGV2aWNlIE1hdGNoIFNjcmlwdAogKi8KCm91dGNvbWUgPSAidHJ1ZSI7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"343b3cc5-38f4-4e37-9d92-8ba0830936da\",\"name\":\"wks-RemoveButton\",\"description\":\"RemoveButton\",\"script\":\"LyogUmVtb3ZlIEJ1dHRvbgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBIaWRlIGJ1dHRvbnMgb24gdGhlIGpvdXJuZXkgcGFnZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfSkiCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICB2YXIgbWVzc2FnZSA9ICIgIgogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIG1lc3NhZ2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"13e3f263-9cd3-4844-8d1c-040fd0dd02eb\",\"name\":\"Device Profile Match Template - Decision Node Script\",\"description\":\"Default global script template for Device Profile Match decision node script for Authentication Tree\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGEgc2ltcGxpZmllZCB0ZW1wbGF0ZSBmb3IgdW5kZXJzdGFuZGluZwogKiB0aGUgYmFzaWNzIG9mIGRldmljZSBtYXRjaGluZy4gX1RoaXMgaXMgbm90IGZ1bmN0aW9uYWxseSBjb21wbGV0ZS5fCiAqIEZvciBhIGZ1bmN0aW9uYWxseSBjb21wbGV0ZSBzY3JpcHQgYXMgd2VsbCBhcyBhIGRldmVsb3BtZW50IHRvb2xraXQsCiAqIHZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9Gb3JnZVJvY2svZm9yZ2Vyb2NrLWRldmljZS1tYXRjaC1zY3JpcHQuCiAqCiAqIEdsb2JhbCBub2RlIHZhcmlhYmxlcyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGlzIHNjb3BlOgogKiAxLiBgc2hhcmVkU3RhdGVgIHByb3ZpZGVzIGFjY2VzcyB0byBpbmNvbWluZyByZXF1ZXN0CiAqIDIuIGBkZXZpY2VQcm9maWxlc0Rhb2AgcHJvdmlkZXMgYWNjZXNzIHRvIHN0b3JlZCBwcm9maWxlcwogKiAzLiBgb3V0Y29tZWAgdmFyaWFibGUgbWFwcyB0byBhdXRoIHRyZWUgbm9kZSBvdXRjb21lczsgdmFsdWVzIGFyZQogKiAgICAndHJ1ZScsICdmYWxzZScsIG9yICd1bmtub3duRGV2aWNlJyAobm90aWNlIF9hbGxfIGFyZSBzdHJpbmdzKS4KICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgcmVxdWVzdCdzIGRldmljZSBwcm9maWxlLgogKiBSZXR1cm5zIHNlcmlhbGl6ZWQgSlNPTiAodHlwZSBzdHJpbmcpOyBwYXJzaW5nIHRoaXMgd2lsbCByZXN1bHQgYQogKiBuYXRpdmUgSlMgb2JqZWN0LgogKi8KdmFyIGluY29taW5nSnNvbiA9IHNoYXJlZFN0YXRlLmdldCgnZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlJykudG9TdHJpbmcoKTsKdmFyIGluY29taW5nID0gSlNPTi5wYXJzZShpbmNvbWluZ0pzb24pOwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgdXNlcidzIHVzZXJuYW1lIGFuZCByZWFsbS4KICogTm90aWNlIHRoZSB1c2Ugb2YgYC5hc1N0cmluZygpYC4KICovCnZhciB1c2VybmFtZSA9IHNoYXJlZFN0YXRlLmdldCgidXNlcm5hbWUiKS5hc1N0cmluZygpOwp2YXIgcmVhbG0gPSBzaGFyZWRTdGF0ZS5nZXQoInJlYWxtIikuYXNTdHJpbmcoKTsKCi8qKgogKiBHZXQgdGhlIHVzZXIncyBzdG9yZWQgcHJvZmlsZXMgZm9yIGFwcHJvcHJpYXRlIHJlYWxtLgogKiBSZXR1cm5zIGEgX3NwZWNpYWxfIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIHByb2ZpbGUgZGF0YQogKi8KdmFyIHN0b3JlZFByb2ZpbGVzID0gZGV2aWNlUHJvZmlsZXNEYW8uZ2V0RGV2aWNlUHJvZmlsZXModXNlcm5hbWUsIHJlYWxtKTsKCi8vIERlZmF1bHQgdG8gYG91dGNvbWVgIG9mICd1bmtub3duRGV2aWNlJwpvdXRjb21lID0gJ3Vua25vd25EZXZpY2UnOwoKaWYgKHN0b3JlZFByb2ZpbGVzKSB7CiAgICB2YXIgaSA9IDA7CiAgICAvLyBOT1RFOiBgLnNpemUoKWAgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBzdG9yZWQgcHJvZmlsZXMKICAgIHZhciBsZW4gPSBzdG9yZWRQcm9maWxlcy5zaXplKCk7CgogICAgZm9yIChpOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIHN0b3JlZCBwcm9maWxlLgogICAgICAgICAqIFJldHVybnMgc2VyaWFsaXplZCBKU09OICh0eXBlIHN0cmluZyk7IHBhcnNpbmcgdGhpcyB3aWxsIHJlc3VsdAogICAgICAgICAqIGEgbmF0aXZlIEpTIG9iamVjdC4KICAgICAgICAgKi8KICAgICAgICB2YXIgc3RvcmVkSnNvbiA9IHN0b3JlZFByb2ZpbGVzLmdldChpKTsKICAgICAgICB2YXIgc3RvcmVkID0gSlNPTi5wYXJzZShzdG9yZWRKc29uKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogRmluZCBhIHN0b3JlZCBwcm9maWxlIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllci4KICAgICAgICAgKi8KICAgICAgICBpZiAoaW5jb21pbmcuaWRlbnRpZmllciA9PT0gc3RvcmVkLmlkZW50aWZpZXIpIHsKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBOb3cgdGhhdCB5b3UndmUgZm91bmQgdGhlIGFwcHJvcHJpYXRlIHByb2ZpbGUsIHlvdSB3aWxsIHBlcmZvcm0KICAgICAgICAgICAgICogdGhlIGxvZ2ljIGhlcmUgdG8gbWF0Y2ggdGhlIHZhbHVlcyBvZiB0aGUgYGluY29taW5nYCBwcm9maWxlCiAgICAgICAgICAgICAqIHdpdGggdGhhdCBvZiB0aGUgYHN0b3JlZGAgcHJvZmlsZS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogVGhlIHJlc3VsdCBvZiB0aGUgbWF0Y2hpbmcgbG9naWMgaXMgYXNzaWduZWQgdG8gYG91dGNvbWVgLiBTaW5jZQogICAgICAgICAgICAgKiB3ZSBoYXZlIHByb2ZpbGVzIG9mIHRoZSBzYW1lIGlkZW50aWZpZXIsIHRoZSB2YWx1ZSAodHlwZSBzdHJpbmcpCiAgICAgICAgICAgICAqIHNob3VsZCBub3cgYmUgZWl0aGVyICd0cnVlJyBvciAnZmFsc2UnIChwcm9wZXJ0aWVzIG1hdGNoZWQgb3Igbm90KS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0b3BpYywgdmlzaXQgdGhpcyBHaXRodWIgcmVwbzoKICAgICAgICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL0ZvcmdlUm9jay9mb3JnZXJvY2stZGV2aWNlLW1hdGNoLXNjcmlwdAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgb3V0Y29tZSA9ICdmYWxzZSc7CiAgICAgICAgfQogICAgfQp9\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"name\":\"Remove Button\",\"description\":\"Remove button from page.\",\"script\":\"LyogUmVtb3ZlIEJ1dHRvbgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBIaWRlIGJ1dHRvbnMgb24gdGhlIGpvdXJuZXkgcGFnZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfSkiCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICB2YXIgbWVzc2FnZSA9ICIgIgogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIG1lc3NhZ2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"472534ec-a25f-468d-a606-3fb1935190df\",\"name\":\"WeChat Profile Normalization\",\"description\":\"Normalizes raw profile data from WeChat\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLm9wZW5pZCksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uaWNrbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5oZWFkaW1ndXJsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLm5pY2tuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6325cf19-a49b-471e-8d26-7e4df76df0e2\",\"name\":\"Okta Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJPa3RhIHJhd1Byb2ZpbGU6ICIrcmF3UHJvZmlsZSkKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5wcmVmZXJyZWRfdXNlcm5hbWUpKSk=\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"7b88752e-5529-459c-a970-1fb78ff0d87f\",\"name\":\"Set Email Verified\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkKKTsKd2l0aCAoZnIpIHsKICAKICB2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCiAgdmFyIGF0dHJpYnV0ZSA9ICJmci1hdHRyLXN0cjEiCiAKICBpZFJlcG9zaXRvcnkuc2V0QXR0cmlidXRlKHVzZXJuYW1lLCBhdHRyaWJ1dGUsIFsidmVyaWZpZWQiXSk7CiAgCiAgb3V0Y29tZSA9ICJ0cnVlIgp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1f389a3d-21cf-417c-a6d3-42ea620071f0\",\"name\":\"ForgeRock Internal: OIDC Claims Script\",\"description\":\"Internal OIDC Claims script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6c49bebe-3a62-11ed-a261-0242ac120002\",\"name\":\"Library Script\",\"description\":\"Default global library script to be referenced from other scripts\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjItMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIGlzIGFuIGV4YW1wbGUgbGlicmFyeSBzY3JpcHQgd2l0aCBtZXRob2RzIHRoYXQgY2FuIGJlIHVzZWQgaW4gb3RoZXIgc2NyaXB0cy4KICogVG8gcmVmZXJlbmNlIGl0LCB1c2UgdGhlIGZvbGxvd2luZzoKICoKICogdmFyIGxpYnJhcnkgPSByZXF1aXJlKCJMaWJyYXJ5IFNjcmlwdCIpOwogKgogKiBsaWJyYXJ5LmxvZ0Vycm9yKGxvZ2dlciwgIkVycm9yIG1lc3NhZ2UiKTsKICogbGlicmFyeS5sb2dEZWJ1Zyhsb2dnZXIsICJEZWJ1ZyBtZXNzYWdlIik7CiAqLwoKZnVuY3Rpb24gbG9nRXJyb3IobG9nLCBlcnJvck1lc3NhZ2UpIHsKICBsb2cuZXJyb3IoZXJyb3JNZXNzYWdlKTsKfQoKZnVuY3Rpb24gbG9nV2FybmluZyhsb2csIHdhcm5pbmdNZXNzYWdlKSB7CiAgbG9nLndhcm4od2FybmluZ01lc3NhZ2UpOwp9CgpleHBvcnRzLmxvZ0Vycm9yID0gbG9nRXJyb3I7CmV4cG9ydHMubG9nV2FybmluZyA9IGxvZ1dhcm5pbmc7CgovLyBBbHRlcm5hdGl2ZWx5LCBleHBvcnRzIGNhbiBiZSBkZWNsYXJlZCB1c2luZyBhbiBpbmxpbmUgYXJyb3cgZnVuY3Rpb24KCmV4cG9ydHMubG9nSW5mbyA9IChsb2csIGluZm9NZXNzYWdlKSA9PiBsb2cuaW5mbyhpbmZvTWVzc2FnZSk7CmV4cG9ydHMubG9nRGVidWcgPSAobG9nLCBkZWJ1Z01lc3NhZ2UpID0+IGxvZy5kZWJ1ZyhkZWJ1Z01lc3NhZ2UpOw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org\",\"creationDate\":1433147666269,\"lastModifiedBy\":\"id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org\",\"lastModifiedDate\":1433147666269,\"evaluatorVersion\":\"2.0\"}],\"resultCount\":95,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -108,18 +112,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "transfer-encoding", + "value": "chunked" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:17 GMT" + "value": "Wed, 19 Jun 2024 21:28:22 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -127,20 +139,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 800, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:17.485Z", - "time": 90, + "startedDateTime": "2024-06-19T21:28:22.535Z", + "time": 103, "timings": { "blocked": -1, "connect": -1, @@ -148,11 +156,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 90 + "wait": 103 } }, { - "_id": "0b5bdd5efa8fa86e894e34cbb0737401", + "_id": "07d163ce19bcc152182b85d8f79a2690", "_order": 0, "cache": {}, "request": { @@ -164,16 +172,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -183,28 +191,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1625, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"FrodoTestScript3\"" + "value": "name eq \"wks-ReadUserName\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript3%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22wks-ReadUserName%22" }, "response": { - "bodySize": 1131, + "bodySize": 1500, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1131, - "text": "{\"result\":[{\"_id\":\"3b2f6836-184c-4ee9-8a1d-557cb01837a5\",\"name\":\"FrodoTestScript3\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1500, + "text": "{\"result\":[{\"_id\":\"bae52680-c1ea-4a4b-be80-25db364d822a\",\"name\":\"wks-ReadUserName\",\"description\":\"Reading userName from Query Parameter \",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKb3V0Y29tZSA9ICJmYWxzZSI7CmlmIChyZXF1ZXN0UGFyYW1ldGVycy5nZXQoInVzZXJOYW1lIikpIHsKICAgIHZhciB1c2VyTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChyZXF1ZXN0UGFyYW1ldGVycy5nZXQoInVzZXJOYW1lIikuZ2V0KDApKTsKICAgIHZhciBvYmplY3RBdHRyaWJ1dGVzID0gewogICAgICB1c2VyTmFtZTogdXNlck5hbWUKICAgIH0KICBzaGFyZWRTdGF0ZS5wdXQoIm9iamVjdEF0dHJpYnV0ZXMiLCBvYmplY3RBdHRyaWJ1dGVzKTsKICBvdXRjb21lID0gInRydWUiOwp9Ci8qCmlmIChyZXF1ZXN0UGFyYW1ldGVycy5nZXQoImVtYWlsIikpIHsKICAgIHZhciBleHRlcm5hbGVtYWlsID0gcmVxdWVzdFBhcmFtZXRlcnMuZ2V0KCJlbWFpbCIpLmdldCgwKTsKICAgIHZhciBkZWNvZGVkRW1haWwgPSBkZWNvZGVVUklDb21wb25lbnQoZXh0ZXJuYWxlbWFpbCk7CiAgICB2YXIgb2JqZWN0QXR0cmlidXRlcyA9IHsKICAgICAgZnJJbmRleGVkU3RyaW5nNTogZGVjb2RlZEVtYWlsCiAgICB9CiAgc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgb2JqZWN0QXR0cmlidXRlcyk7CiAgb3V0Y29tZSA9ICJ0cnVlIjsKfQoqLwoKCgoK\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -254,20 +266,24 @@ }, { "name": "content-length", - "value": "1131" + "value": "1500" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:17 GMT" + "value": "Wed, 19 Jun 2024 21:28:22 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -277,14 +293,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:17.582Z", - "time": 58, + "startedDateTime": "2024-06-19T21:28:22.644Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -292,11 +308,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 58 + "wait": 52 } }, { - "_id": "c896d9e1d12bcb7e3a5d3d01a7c0dbbc", + "_id": "306f5b3f9bae72de54660fbbffcb0b35", "_order": 0, "cache": {}, "request": { @@ -308,16 +324,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -327,28 +343,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1673, + "headersSize": 1666, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Social Identity Provider Profile Transformation Script\"" + "value": "name eq \"havePush.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Social%20Identity%20Provider%20Profile%20Transformation%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22havePush.js%22" }, "response": { - "bodySize": 1036, + "bodySize": 677, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1036, - "text": "{\"result\":[{\"_id\":\"1d475815-72cb-42eb-aafd-4026989d28a7\",\"name\":\"Social Identity Provider Profile Transformation Script\",\"description\":\"Default global script for Social Identity Provider Profile Transformation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyogRGVmYXVsdCBTb2NpYWwgSWRlbnRpdHkgUHJvdmlkZXIgUHJvZmlsZSBUcmFuc2Zvcm1hdGlvbiBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzICov\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 677, + "text": "{\"result\":[{\"_id\":\"0cc09f53-7183-4829-a93a-1b3308318ba9\",\"name\":\"havePush.js\",\"description\":\"null\",\"script\":\"dmFyIHB1c2hEZXZpY2VQcm9maWxlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKSwgInB1c2hEZXZpY2VQcm9maWxlcyIpOwppZihwdXNoRGV2aWNlUHJvZmlsZXMubGVuPjApIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7Cn0KZWxzZSB7CiAgb3V0Y29tZSA9ICJmYWxzZSI7Cgp9Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -398,20 +418,24 @@ }, { "name": "content-length", - "value": "1036" + "value": "677" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:17 GMT" + "value": "Wed, 19 Jun 2024 21:28:22 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -421,14 +445,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:17.648Z", - "time": 61, + "startedDateTime": "2024-06-19T21:28:22.702Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -436,11 +460,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 61 + "wait": 53 } }, { - "_id": "bdb484c0a5d4bad077537e0f972d3632", + "_id": "91ace92f5115d94b26cb380ff635ab0f", "_order": 0, "cache": {}, "request": { @@ -452,16 +476,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -471,28 +495,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1643, + "headersSize": 1728, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Facebook Profile Normalization\"" + "value": "name eq \"Alpha endUserUIClient OAuth2 Access Token Modification Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Facebook%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Alpha%20endUserUIClient%20OAuth2%20Access%20Token%20Modification%20Script%22" }, "response": { - "bodySize": 1504, + "bodySize": 1061, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1504, - "text": "{\"result\":[{\"_id\":\"bae1d54a-e97d-4997-aa5d-c027f21af82c\",\"name\":\"Facebook Profile Normalization\",\"description\":\"Normalizes raw profile data from Facebook\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1061, + "text": "{\"result\":[{\"_id\":\"e232cff3-2460-47cd-80b2-36c86c0d0f06\",\"name\":\"Alpha endUserUIClient OAuth2 Access Token Modification Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBpZiAoc2NvcGVzLmNvbnRhaW5zKCdmcjphdXRvYWNjZXNzOionKSB8fCBzY29wZXMuY29udGFpbnMoJ2ZyOmlnYToqJykgfHwgc2NvcGVzLmNvbnRhaW5zKCdmcjppZGM6YW5hbHl0aWNzOionKSkgewogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBjb20uc3VuLmlkZW50aXR5LmlkbS5JZFR5cGUKICAgICk7CiAgICB2YXIgZ3JvdXBzID0gW107CiAgICBpZGVudGl0eS5nZXRNZW1iZXJzaGlwcyhmci5JZFR5cGUuR1JPVVApLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkgewogICAgICBncm91cHMucHVzaChncm91cC5nZXRBdHRyaWJ1dGUoJ2NuJykudG9BcnJheSgpWzBdKTsKICAgIH0pOwogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ2dyb3VwcycsIGdyb3Vwcyk7CiAgfQp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -542,20 +570,24 @@ }, { "name": "content-length", - "value": "1504" + "value": "1061" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:17 GMT" + "value": "Wed, 19 Jun 2024 21:28:22 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -565,14 +597,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:17.718Z", - "time": 59, + "startedDateTime": "2024-06-19T21:28:22.762Z", + "time": 54, "timings": { "blocked": -1, "connect": -1, @@ -580,11 +612,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 59 + "wait": 54 } }, { - "_id": "d15d4354eec1219a37a90beaed3de432", + "_id": "fab0981ac687745158b06222a5c6fa65", "_order": 0, "cache": {}, "request": { @@ -596,16 +628,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -615,28 +647,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1638, + "headersSize": 1670, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"SAML2 SP Adapter Script\"" + "value": "name eq \"wks-NEO-Twillio\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22SAML2%20SP%20Adapter%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22wks-NEO-Twillio%22" }, "response": { - "bodySize": 10793, + "bodySize": 8417, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 10793, - "text": "{\"result\":[{\"_id\":\"69f06e63-128c-4e2f-af52-079a8a6f448b\",\"name\":\"SAML2 SP Adapter Script\",\"description\":\"Default global script for SAML2 SP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_SP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 8417, + "text": "{\"result\":[{\"_id\":\"6aa47a41-af3d-4df3-a7a1-b1766cfeaf6b\",\"name\":\"wks-NEO-Twillio\",\"description\":\"null\",\"script\":\"LyoqCiAqIEBmaWxlIFRoaXMgc2NyaXB0IGRlbGl2ZXJzIGEgbWVzc2FnZSB3aXRoIHZhbHVlcyBmcm9tIHNoYXJlZCBzdGF0ZSB2aWEgVHdpbGlvIFNNUywgdXNpbmcgdGhlIGN1cnJlbnQgdXNlcidzIHRlbGVwaG9uZU51bWJlcgogKiBAdmVyc2lvbiAwLjEuMQogKiBAa2V5d29yZHMgc21zIG90cCBtZmEgdHdpbGlvIAogKi8KCi8qKgogKiBFbnZpcm9ubWVudCBzcGVjaWZpYyBUd2lsaW8gY29uZmlnIAogKi8KCnZhciB0d2lsaW9BY2NvdW50U2lkID0gIjxzZWNyZXQ+IjsgICAKdmFyIHR3aWxpb0FwaUtleVNpZCA9ICI8c2VjcmV0PiI7CnZhciB0d2lsaW9BcGlLZXlTZWNyZXQgPSAiPHNlY3JldD4iOwp2YXIgdHdpbGlvTWVzc2FnaW5nU2VydmljZVNpZCA9ICI8c2VjcmV0PiI7CnZhciB0d2lsaW9QaG9uZU51bWJlckZyb20gPSAiPHNlY3JldD4iOyAgICAKCi8qKgogKiBGdWxsIENvbmZpZ3VyYXRpb24gCiAqLwoKdmFyIGNvbmZpZyA9IHsKICAgIGFjY291bnRTaWQ6IHR3aWxpb0FjY291bnRTaWQsICAgIAogICAgYXBpS2V5U2lkOiB0d2lsaW9BcGlLZXlTaWQsCiAgICBhcGlLZXlTZWNyZXQ6IHR3aWxpb0FwaUtleVNlY3JldCwKICAgIHBob25lTnVtYmVyRnJvbTogdHdpbGlvUGhvbmVOdW1iZXJGcm9tLCAKICAgIG1lc3NhZ2luZ1NlcnZpY2VTaWQ6IHR3aWxpb01lc3NhZ2luZ1NlcnZpY2VTaWQsIAogICAgYmFzZVVyaTogImh0dHBzOi8vYXBpLnR3aWxpby5jb20vMjAxMC0wNC0wMSIsCiAgICBzaGFyZWRTdGF0ZUlkRmllbGQ6ICJfaWQiLAogICAgcGhvbmVOdW1iZXJGaWVsZDogInRlbGVwaG9uZU51bWJlciIsCiAgICBtZXNzYWdlVGVtcGxhdGU6ICJZb3VyIHNlY3VyaXR5IGNvZGUgaXMge3tvbmVUaW1lUGFzc3dvcmR9fSIsCiAgICBub2RlTmFtZTogInR3aWxpb1NtcyIKfTsKCi8qKgogKiBOb2RlIG91dGNvbWVzCiAqLwoKIHZhciBOb2RlT3V0Y29tZSA9IHsKICAgIERFTElWRVJFRDogICJkZWxpdmVyZWQiLAogICAgQVVUSEZBSUxFRDogImF1dGhGYWlsZWQiLAogICAgTk9QSE9ORTogICAgIm5vUGhvbmUiLAogICAgRVJST1I6ICAgICAgImVycm9yIgp9OwoKLyoqCiAqIEV4dGVybmFsIGRlcGVuZGVuY2llcwogKi8KCnZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sudXRpbC5lbmNvZGUuQmFzZTY0LAogICAgamF2YS5sYW5nLlN0cmluZwopOwoKLyoqCiAqIEFkZCB0aGUgbm9kZSBpbmZvIHByZWZpeCB0byBhIGxvZyBtZXNzYWdlCiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gdGhlIG1lc3NhZ2UgYm9keQogKiBAcmV0dXJucyBhIHRhZ2dlZCB2ZXJzaW9uIG9mIHRoZSBtZXNzYWdlCiAqLwpmdW5jdGlvbiB0YWcobWVzc2FnZSkgewogICAgcmV0dXJuICIqKioiLmNvbmNhdChjb25maWcubm9kZU5hbWUpLmNvbmNhdCgiICIpLmNvbmNhdChtZXNzYWdlKTsKfQoKLyoqCiAqIExvZyBhbiBIVFRQIHJlc3BvbnNlCiAqIAogKiBAcGFyYW0ge1Jlc3BvbnNlfSBIVFRQIHJlc3BvbnNlIG9iamVjdAogKi8KZnVuY3Rpb24gbG9nUmVzcG9uc2UocmVzcG9uc2UpIHsKICAgIGxvZ2dlci5tZXNzYWdlKHRhZygiU2NyaXB0ZWQgTm9kZSBIVFRQIFJlc3BvbnNlOiAiICsgcmVzcG9uc2UuZ2V0U3RhdHVzKCkgKyAiLCBCb2R5OiAiICsgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpKTsKfQoKLyoqCiAqIFJlc29sdmUgaGFuZGxlYmFyIHBsYWNlaG9sZGVycyBmcm9tIHNoYXJlZCBzdGF0ZQogKiAKICogQHBhcmFtIHt0ZW1wbGF0ZX0gaGFuZGxlYmFyIHRlbXBsYXRlCiAqLwpmdW5jdGlvbiByZXNvbHZlUGxhY2Vob2xkZXJzKHRlbXBsYXRlKSB7CiAgY29uc3QgcmVnZXggPSAve3suKj99fS9nOwogIGNvbnN0IHZhcmlhYmxlcyA9IHRlbXBsYXRlLm1hdGNoKHJlZ2V4KTsKCiAgaWYgKCF2YXJpYWJsZXMpIHsKICAgIHJldHVybiB0ZW1wbGF0ZTsKICB9CiAgCiAgdmFyIHJlc3VsdCA9IHRlbXBsYXRlOwogIAogIHZhcmlhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIHN1YihlbGVtZW50KSB7IAogICAgdmFyIHZhck5hbWUgPSBlbGVtZW50LnJlcGxhY2UoL1t7fV0vZywiIik7CiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShlbGVtZW50LHNoYXJlZFN0YXRlLmdldCh2YXJOYW1lKSk7CiAgfSk7CiAgCiAgcmV0dXJuIHJlc3VsdDsKfQoKLyoqCiAqIFNlbmQgYW4gU01TIHZpYSBUd2lsaW8KICogCiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIHRleHQgb2YgdGhlIG1lc3NhZ2UgdG8gc2VuZAogKiBAcGFyYW0ge3N0cmluZ30gbnVtYmVyRnJvbSAtIFRoZSBvcmlnaW5hdGluZyBwaG9uZSBudW1iZXIvc2hvcnRjb2RlCiAqIEBwYXJhbSB7c3RyaW5nfSBudW1iZXJUbyAtIFRoZSBwaG9uZSBudW1iZXIgdG8gc2VuZCB0bwogKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnaW5nU2VydmljZVNpZCAtIFR3aWxpbyBtZXNzYWdpbmcgc2VydmljZSBTSUQKICogQHBhcmFtIHtzdHJpZ30gdXJpIC0gVGhlIFVSSSBvZiB0aGUgVHdpbGlvIEFQSSBlbmRwb2ludCAKICogQHBhcmFtIHtzdHJpbmd9IHNpZCAtIFRoZSBUd2lsaW8gYWNjb3VudCBvciBBUEkga2V5IFNJRAogKiBAcGFyYW0geyp9IHNlY3JldCAtIFRoZSBUd2lsaW8gYWNjb3VudCBhdXRoa2V5IG9yIEFQSSBrZXkgc2VjcmV0CiAqIEByZXR1cm5zIC0gQSBub2RlIG91dGNvbWUgCiAqLwpmdW5jdGlvbiBzZW5kU01TKG1lc3NhZ2UsIG51bWJlckZyb20sIG51bWJlclRvLCBtZXNzYWdpbmdTZXJ2aWNlU2lkLCB1cmksIHNpZCwgc2VjcmV0KSB7CgogICAgbG9nZ2VyLm1lc3NhZ2UodGFnKCJDYWxsaW5nIFR3aWxpbyBlbmRwb2ludCAiICsgdXJpKSk7CiAgICBsb2dnZXIubWVzc2FnZSh0YWcoIlNlbmRpbmcgdG8gIiArIG51bWJlclRvKSk7CgogICAgLy8gVHdpbGlvIHNlZW1zIG5vdCB0byBleHBlY3QgdGhlIGZvcm0gdmFsdWVzIHRvIGJlIFVSTCBlbmNvZGVkCgogICAgY29uc3QgcmVxdWVzdEJvZHkgPSAiQm9keT0iLmNvbmNhdChlbmNvZGVVUklDb21wb25lbnQobWVzc2FnZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoIiZGcm9tPSIpLmNvbmNhdChudW1iZXJGcm9tKSAgCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoIiZUbz0iKS5jb25jYXQobnVtYmVyVG8pCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoIiZNZXNzYWdpbmdTZXJ2aWNlU2lkPSIpLmNvbmNhdChtZXNzYWdpbmdTZXJ2aWNlU2lkKTsKICAKICAgIGxvZ2dlci5tZXNzYWdlKHRhZygiTWVzc2FnZSBib2R5ICIgKyByZXF1ZXN0Qm9keSkpOwoKICAgIGNvbnN0IGJhc2ljQXV0aCA9IGZyLkJhc2U2NC5lbmNvZGUoZnIuU3RyaW5nKHNpZC5jb25jYXQoIjoiKS5jb25jYXQoc2VjcmV0KSkuZ2V0Qnl0ZXMoKSk7CiAgICAKICAgIHZhciByZXNwb25zZTsKCiAgICB0cnkgewogICAgICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIlBPU1QiKTsKICAgICAgICByZXF1ZXN0LnNldFVyaSh1cmkpOwogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIgKyBiYXNpY0F1dGgpOwogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgcmVxdWVzdC5nZXRFbnRpdHkoKS5zZXRTdHJpbmcocmVxdWVzdEJvZHkpOwoKICAgICAgICByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIH0KICAgIGNhdGNoIChlKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKHRhZygiRXhjZXB0aW9uIGNhbGxpbmcgdHdpbGlvIGVuZHBvaW50ICIgKyBlKSk7CiAgICAgICAgcmV0dXJuIE5vZGVPdXRjb21lLkVSUk9SOwogICAgfQoKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLmdldFN0YXR1cygpLmdldENvZGUoKTsKCiAgICBpZiAoc3RhdHVzID09PSA0MDEpIHsKICAgICAgICBsb2dnZXIuZXJyb3IodGFnKCJUd2lsaW8gYXV0aGVudGljYXRpb24gZmFpbGVkIikpOwogICAgICAgIHJldHVybiBOb2RlT3V0Y29tZS5BVVRIRkFJTEVEOyAgICAKICAgIH0KCiAgICBpZiAoc3RhdHVzICE9PSAyMDEpIHsKICAgICAgICBsb2dnZXIuZXJyb3IodGFnKCJCYWQgSFRUUCByZXNwb25zZSBmcm9tIFR3aWxpbzogIiArIHN0YXR1cykpOwogICAgICAgIHJldHVybiBOb2RlT3V0Y29tZS5FUlJPUjsgICAgCiAgICB9CgogICAgdmFyIHJlc3BvbnNlSnNvbiA9IHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpOwoKICAgIGlmICghcmVzcG9uc2VKc29uKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKHRhZygiTm8gcmVzcG9uc2UgYm9keSIpKTsKICAgICAgICByZXR1cm4gTm9kZU91dGNvbWUuRVJST1I7ICAgIAogICAgfQoKICAgIHZhciByZXNwb25zZU9iaiA9IEpTT04ucGFyc2UocmVzcG9uc2VKc29uKTsKCiAgICBpZiAoIXJlc3BvbnNlT2JqKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKHRhZygiQ291bGRuJ3QgcGFyc2UgcmVzcG9uc2UgYm9keSIpKTsKICAgICAgICByZXR1cm4gTm9kZU91dGNvbWUuRVJST1I7ICAgIAogICAgfQoKICAgIGlmICghKHJlc3BvbnNlT2JqLmhhc093blByb3BlcnR5KCJzaWQiKSkpIHsKICAgICAgICBsb2dnZXIuZXJyb3IodGFnKCJObyBzaWQgcHJvcGVydHkgaW4gVHdpbGlvIHJlc3BvbnNlIikpOwogICAgICAgIHJldHVybiBOb2RlT3V0Y29tZS5FUlJPUjsKICAgIH0gIAoKICAgIGxvZ2dlci5tZXNzYWdlKHRhZygibWVzc2FnZSBkZWxpdmVyZWQgc3VjY2Vzc2Z1bGx5IikpOwogICAgcmV0dXJuIE5vZGVPdXRjb21lLkRFTElWRVJFRDsKfQoKLyoqCiAqIE5vZGUgZW50cnkgcG9pbnQKICovCgpsb2dnZXIubWVzc2FnZSh0YWcoIm5vZGUgZXhlY3V0aW5nIikpOwoKdmFyIGlkOwp2YXIgdGVsZXBob25lTnVtYmVyczsKdmFyIG51bWJlclRvOwoKaWYgKCEoaWQgPSBzaGFyZWRTdGF0ZS5nZXQoY29uZmlnLnNoYXJlZFN0YXRlSWRGaWVsZCkpKSB7CiAgICBsb2dnZXIuZXJyb3IodGFnKCJObyBpZCBpbiBzaGFyZWQgc3RhdGUiKSk7CiAgICBvdXRjb21lID0gTm9kZU91dGNvbWUuRVJST1I7Cn0KZWxzZSBpZiAoISh0ZWxlcGhvbmVOdW1iZXJzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShpZCwgY29uZmlnLnBob25lTnVtYmVyRmllbGQpKSkgewogICAgbG9nZ2VyLmVycm9yKHRhZygiTm8gcGhvbmUgbnVtYmVycyBmb3IgdXNlciIpKTsKICAgIG91dGNvbWUgPSBOb2RlT3V0Y29tZS5OT1BIT05FOwp9CmVsc2UgaWYgKCEobnVtYmVyVG8gPSB0ZWxlcGhvbmVOdW1iZXJzLnRvQXJyYXkoKVswXSkpIHsKICAgIGxvZ2dlci5lcnJvcih0YWcoIm5vIHRlbGVwaG9uZU51bWJlciIpKTsKICAgIG91dGNvbWUgPSBOb2RlT3V0Y29tZS5OT1BIT05FOwp9CmVsc2UgaWYgKG51bWJlclRvID09PSAiIikgewogICAgbG9nZ2VyLmVycm9yKHRhZygiYmxhbmsgdGVsZXBob25lTnVtYmVyIikpOwogICAgb3V0Y29tZSA9IE5vZGVPdXRjb21lLk5PUEhPTkU7Cn0KZWxzZSB7CiAgICB2YXIgbWVzc2FnZSA9IHJlc29sdmVQbGFjZWhvbGRlcnMoY29uZmlnLm1lc3NhZ2VUZW1wbGF0ZSk7CiAgICB2YXIgdHdpbGlvVXJpID0gY29uZmlnLmJhc2VVcmkuY29uY2F0KCIvQWNjb3VudHMvIikuY29uY2F0KGNvbmZpZy5hY2NvdW50U2lkKS5jb25jYXQoIi9NZXNzYWdlcy5qc29uIik7CiAgICBvdXRjb21lID0gc2VuZFNNUyhtZXNzYWdlLCBjb25maWcucGhvbmVOdW1iZXJGcm9tLCBudW1iZXJUbywgY29uZmlnLm1lc3NhZ2luZ1NlcnZpY2VTaWQsIHR3aWxpb1VyaSwgY29uZmlnLmFwaUtleVNpZCwgY29uZmlnLmFwaUtleVNlY3JldCk7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -684,18 +720,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "transfer-encoding", + "value": "chunked" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:17 GMT" + "value": "Wed, 19 Jun 2024 21:28:22 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -703,20 +747,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 800, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:17.788Z", - "time": 60, + "startedDateTime": "2024-06-19T21:28:22.821Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -724,11 +764,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 60 + "wait": 51 } }, { - "_id": "93c3ab20c379d63b813aeb250e58e7d5", + "_id": "a8164adca1e0bf44ebac017fc5d0f3eb", "_order": 0, "cache": {}, "request": { @@ -740,16 +780,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -759,28 +799,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1636, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"OAuth2 May Act Script\"" + "value": "name eq \"FrodoTestScript2\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20May%20Act%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript2%22" }, "response": { - "bodySize": 3523, + "bodySize": 1131, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 3523, - "text": "{\"result\":[{\"_id\":\"c735de08-f8f2-4e69-aa4a-2d8d3d438323\",\"name\":\"OAuth2 May Act Script\",\"description\":\"Default global script for OAuth2 May Act\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKiB0b2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gdG8gYmUgdXBkYXRlZC4gTXV0YWJsZSBvYmplY3QsIGFsbCBjaGFuZ2VzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gd2lsbCBiZSByZWZsZWN0ZWQuCiAqIGxvZ2dlciAtIGFsd2F5cyBwcmVzZW50LCBjb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIHNjcmlwdE5hbWUgLSBhbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0CiAqIHNlc3Npb24gLSBwcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdAogKiByZXF1ZXN0UHJvcGVydGllcyAtIGFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIHRoZSByZXF1ZXN0IFVSSQogKiAgICAgICAgICAgICAgICAgICAgIHJlYWxtIC0gdGhlIHJlYWxtIHRoYXQgdGhlIHJlcXVlc3QgcmVsYXRlcyB0bwogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBhIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLiBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IKICogICAgICAgICAgICAgICAgICAgICBtb3JlIHByb3BlcnRpZXMuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QKICogICAgICAgICAgICAgICAgICAgICBwcmFjdGljZXMuCiAqIGNsaWVudFByb3BlcnRpZXMgLSBwcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICBjbGllbnRJZCAtIHRoZSBjbGllbnQncyBVcmkgZm9yIHRoZSByZXF1ZXN0IGxvY2FsZQogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBsaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gbGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudAogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFNjb3BlcyAtIGxpc3Qgb2YgdGhlIGFsbG93ZWQgc2NvcGVzIGZvciB0aGUgY2xpZW50CiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzLCBlLmc6CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdE1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyB0ZXN0bWFwIC0+IEtleTEgLT4gVmFsdWUxCiAqCiAqIGlkZW50aXR5IC0gYWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIKICogc2NvcGVzIC0gYWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzCiAqLwovKgppbXBvcnQgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQoKdG9rZW4uc2V0TWF5QWN0KAogICAgSnNvblZhbHVlLmpzb24oSnNvblZhbHVlLm9iamVjdCgKICAgICAgICBKc29uVmFsdWUuZmllbGQoImNsaWVudF9pZCIsICJteUNsaWVudCIpLCAKICAgICAgICBKc29uVmFsdWUuZmllbGQoInN1YiIsICIodXNyIW15QWN0b3IpIikpKSkKKi8=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"OAUTH2_MAY_ACT\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1131, + "text": "{\"result\":[{\"_id\":\"b7259916-71ed-4675-8c5a-de86a80e4aed\",\"name\":\"FrodoTestScript2\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -830,20 +874,24 @@ }, { "name": "content-length", - "value": "3523" + "value": "1131" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:17 GMT" + "value": "Wed, 19 Jun 2024 21:28:22 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -853,14 +901,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:17.860Z", - "time": 58, + "startedDateTime": "2024-06-19T21:28:22.877Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -868,11 +916,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 58 + "wait": 53 } }, { - "_id": "c122e0c34632754298c1cf3d78d7a86f", + "_id": "b427b3c2ce2b156e6d63e4a2594eb9c4", "_order": 0, "cache": {}, "request": { @@ -884,16 +932,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -903,28 +951,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1644, + "headersSize": 1678, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"WordPress Profile Normalization\"" + "value": "name eq \"Save MFA Preference\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22WordPress%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Save%20MFA%20Preference%22" }, "response": { - "bodySize": 1382, + "bodySize": 1045, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1382, - "text": "{\"result\":[{\"_id\":\"91d197de-5916-4dca-83b5-9a4df26e7159\",\"name\":\"WordPress Profile Normalization\",\"description\":\"Normalizes raw profile data from WordPress\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJuYW1lKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5hdmF0YXJfVVJMKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1045, + "text": "{\"result\":[{\"_id\":\"39e615b2-898e-4178-ba30-f58bcc095797\",\"name\":\"Save MFA Preference\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkKKTsKd2l0aCAoZnIpIHsKICAKICB2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCiAgdmFyIG1mYVByZWZBdHRyaWJ1dGUgPSAiZnItYXR0ci1pbXVsdGkyIgogIHZhciBtZmFUeXBlID0gIiI7CiAgCiAgaWYgKHNoYXJlZFN0YXRlLmdldCgid2ViLWF1dGhuLWNoYWxsZW5nZSIpICE9IG51bGwpIHsKICAgIG1mYVR5cGUgPSAid2ViYXV0aG4iOwogIH0gZWxzZSBpZiAoc2hhcmVkU3RhdGUuZ2V0KCJwdXNoUmVnaXN0cmF0aW9uVGltZW91dCIpICE9IG51bGwpIHsKICAgICAgIG1mYVR5cGUgPSAicHVzaCIKICB9CiAgCiAgaWRSZXBvc2l0b3J5LmFkZEF0dHJpYnV0ZSh1c2VybmFtZSwgbWZhUHJlZkF0dHJpYnV0ZSwgW21mYVR5cGVdKTsKICAKICBvdXRjb21lID0gInRydWUiCn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -974,20 +1026,24 @@ }, { "name": "content-length", - "value": "1382" + "value": "1045" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:17 GMT" + "value": "Wed, 19 Jun 2024 21:28:22 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -997,14 +1053,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:17.922Z", - "time": 55, + "startedDateTime": "2024-06-19T21:28:22.935Z", + "time": 54, "timings": { "blocked": -1, "connect": -1, @@ -1012,11 +1068,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 55 + "wait": 54 } }, { - "_id": "36cf1b4232865b8ec590209687e762ee", + "_id": "6d3985b76be90a623421cf1f1dab241b", "_order": 0, "cache": {}, "request": { @@ -1028,16 +1084,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -1047,28 +1103,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1657, + "headersSize": 1696, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Alpha endUserUIClient OIDC Claims Script\"" + "value": "name eq \"ADFS Profile Normalization (JS)\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Alpha%20endUserUIClient%20OIDC%20Claims%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22ADFS%20Profile%20Normalization%20%28JS%29%22" }, "response": { - "bodySize": 41559, + "bodySize": 7358, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 41559, - "text": "{\"result\":[{\"_id\":\"e1db8a0a-0329-4962-a5bf-ecffaca376ae\",\"name\":\"Alpha endUserUIClient OIDC Claims Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 7358, + "text": "{\"result\":[{\"_id\":\"dbe0bf9a-72aa-49d5-8483-9db147985a47\",\"name\":\"ADFS Profile Normalization (JS)\",\"description\":\"Normalizes raw profile data from ADFS\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIHRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIKICogaW4gYSBzdGFuZGFyZCBmb3JtIGV4cGVjdGVkIGJ5IHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogcmF3UHJvZmlsZSAtIFRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvdmlkZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIuCiAqICAgICAgICAgICAgICBKc29uVmFsdWUgKDEpLgogKiBsb2dnZXIgLSBUaGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiByZWFsbSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqIHJlcXVlc3RIZWFkZXJzIC0gVHJlZU1hcCAoMikuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFjY2Vzc2luZyBoZWFkZXJzIGluIHRoZSBsb2dpbiByZXF1ZXN0OgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1yZXF1ZXN0SGVhZGVycy4KICogcmVxdWVzdFBhcmFtZXRlcnMgLSBUcmVlTWFwICgyKS4KICogICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFyYW1ldGVycy4KICogc2VsZWN0ZWRJZHAgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgVGhlIHNvY2lhbCBpZGVudGl0eSBwcm92aWRlciBuYW1lLiBGb3IgZXhhbXBsZTogZ29vZ2xlLgogKiBzaGFyZWRTdGF0ZSAtIExpbmtlZEhhc2hNYXAgKDMpLgogKiAgICAgICAgICAgICAgIFRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgc3RhdGUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRyZWUgYW5kIGFsbG93cyBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gdGhlIHN0YXRlbGVzcyBub2RlczoKICogICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoLW5vZGVzL2NvcmUtYWN0aW9uLmh0bWwjYWNjZXNzaW5nLXRyZWUtc3RhdGUuCiAqIHRyYW5zaWVudFN0YXRlIC0gTGlua2VkSGFzaE1hcCAoMykuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCBmb3Igc3RvcmluZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdGhhdCBtdXN0IG5vdCBsZWF2ZSB0aGUgc2VydmVyIHVuZW5jcnlwdGVkLAogKiAgICAgICAgICAgICAgICAgIGFuZCB0aGF0IG1heSBub3QgbmVlZCB0byBwZXJzaXN0IGJldHdlZW4gYXV0aGVudGljYXRpb24gcmVxdWVzdHMgZHVyaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBzZXNzaW9uOgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGgtbm9kZXMvY29yZS1hY3Rpb24uaHRtbCNhY2Nlc3NpbmctdHJlZS1zdGF0ZS4KICoKICogUmV0dXJuIC0gYSBKc29uVmFsdWUgKDEpLgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqCiAqICAgICAgICAgIFRoaXMgc2NyaXB0J3MgbGFzdCBzdGF0ZW1lbnQgc2hvdWxkIHJlc3VsdCBpbiBhIEpzb25WYWx1ZSAoMSkgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAqICAgICAgICAgIHsKICogICAgICAgICAgICAgIHsiZGlzcGxheU5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZW1haWwiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZmFtaWx5TmFtZSI6ICJjb3JyZXNwb25kaW5nLXNvY2lhbC1pZGVudGl0eS1wcm92aWRlci12YWx1ZSJ9LAogKiAgICAgICAgICAgICAgeyJnaXZlbk5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiaWQiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsibG9jYWxlIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InBob3RvVXJsIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InVzZXJuYW1lIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0KICogICAgICAgICAgfQogKgogKiAgICAgICAgICBUaGUgY29uc3VtZXIgb2YgdGhpcyBkYXRhIGRlZmluZXMgd2hpY2gga2V5cyBhcmUgcmVxdWlyZWQgYW5kIHdoaWNoIGFyZSBvcHRpb25hbC4KICogICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlIGFuZCwKICogICAgICAgICAgdWx0aW1hdGVseSwgdGhlIG1hbmFnZWQgb2JqZWN0IGNyZWF0ZWQvdXBkYXRlZCB3aXRoIHRoaXMgZGF0YQogKiAgICAgICAgICB3aWxsIGV4cGVjdCBjZXJ0YWluIGtleXMgdG8gYmUgcG9wdWxhdGVkLgogKiAgICAgICAgICBJbiBzb21lIGNvbW1vbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB0aGUgZm9sbG93aW5nIGtleXMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vdCBlbXB0eToKICogICAgICAgICAgdXNlcm5hbWUsIGdpdmVuTmFtZSwgZmFtaWx5TmFtZSwgZW1haWwuCiAqCiAqICAgICAgICAgIEZyb20gUkZDNDUxNzogQSB2YWx1ZSBvZiB0aGUgRGlyZWN0b3J5IFN0cmluZyBzeW50YXggaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKICogICAgICAgICAgYXJiaXRyYXJ5IGNoYXJhY3RlcnMgZnJvbSB0aGUgVW5pdmVyc2FsIENoYXJhY3RlciBTZXQgKFVDUykuCiAqICAgICAgICAgIEEgemVyby1sZW5ndGggY2hhcmFjdGVyIHN0cmluZyBpcyBub3QgcGVybWl0dGVkLgogKgogKiAoMSkgSnNvblZhbHVlIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2pzb24vSnNvblZhbHVlLmh0bWwuCiAqICgyKSBUcmVlTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9UcmVlTWFwLmh0bWwuCiAqICgzKSBMaW5rZWRIYXNoTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqLwoKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQogICAgKTsKCiAgICB2YXIgbm9ybWFsaXplZFByb2ZpbGVEYXRhID0gZnJKYXZhLkpzb25WYWx1ZS5qc29uKGZySmF2YS5Kc29uVmFsdWUub2JqZWN0KCkpOwogIAogICAgICAvL2xvZ2dlci5tZXNzYWdlKCdTZWd1aW4gcmF3UHJvZmlsZTogJytyYXdQcm9maWxlKTsKCiAgICBub3JtYWxpemVkUHJvZmlsZURhdGEucHV0KCdpZCcsIHJhd1Byb2ZpbGUuZ2V0KCdzdWInKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2Rpc3BsYXlOYW1lJywgcmF3UHJvZmlsZS5nZXQoJ2dpdmVuTmFtZScpLmFzU3RyaW5nKCkgKyAnICcgKyByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2VtYWlsJywgcmF3UHJvZmlsZS5nZXQoJ21haWwnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2dpdmVuTmFtZScsIHJhd1Byb2ZpbGUuZ2V0KCdnaXZlbk5hbWUnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2ZhbWlseU5hbWUnLCByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ3VzZXJuYW1lJywgcmF3UHJvZmlsZS5nZXQoJ3VwbicpLmFzU3RyaW5nKCkpOwogICAgbm9ybWFsaXplZFByb2ZpbGVEYXRhLnB1dCgncm9sZXMnLCByYXdQcm9maWxlLmdldCgncm9sZXMnKS5hc1N0cmluZygpKTsKICAKICAgICAgLy9sb2dnZXIubWVzc2FnZSgnU2VndWluIG5vcm1hbGl6ZWRQcm9maWxlRGF0YTogJytub3JtYWxpemVkUHJvZmlsZURhdGEpOwoKICAgIHJldHVybiBub3JtYWxpemVkUHJvZmlsZURhdGE7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -1116,18 +1176,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "content-length", + "value": "7358" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:17 GMT" + "value": "Wed, 19 Jun 2024 21:28:22 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -1135,20 +1203,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:17.984Z", - "time": 62, + "startedDateTime": "2024-06-19T21:28:22.994Z", + "time": 54, "timings": { "blocked": -1, "connect": -1, @@ -1156,11 +1220,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 62 + "wait": 54 } }, { - "_id": "000ff0f2b46c206e53f43f99849549df", + "_id": "3e120ffd0f3a240e12418e808b5ff1eb", "_order": 0, "cache": {}, "request": { @@ -1172,16 +1236,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -1191,28 +1255,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1645, + "headersSize": 1670, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Normalized Profile to Identity\"" + "value": "name eq \"MutilevelSelect\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Normalized%20Profile%20to%20Identity%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22MutilevelSelect%22" }, "response": { - "bodySize": 1648, + "bodySize": 7033, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1648, - "text": "{\"result\":[{\"_id\":\"ed685f9f-5909-4726-86e8-22bd38b47663\",\"name\":\"Normalized Profile to Identity\",\"description\":\"Converts a normalized social profile into an Identity\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgaWRlbnRpdHkgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgiY24iLCBub3JtYWxpemVkUHJvZmlsZS5kaXNwbGF5TmFtZSksCiAgICAgICAgZmllbGQoInVzZXJOYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUudXNlcm5hbWUpLAogICAgICAgIGZpZWxkKCJpcGxhbmV0LWFtLXVzZXItYWxpYXMtbGlzdCIsIHNlbGVjdGVkSWRwICsgJy0nICsgbm9ybWFsaXplZFByb2ZpbGUuaWQuYXNTdHJpbmcoKSkpKQoKcmV0dXJuIGlkZW50aXR5\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 7033, + "text": "{\"result\":[{\"_id\":\"cf63df8d-30e4-4839-b671-5b24006a3204\",\"name\":\"MutilevelSelect\",\"description\":\"null\",\"script\":\"Ly8gbGVnYWN5IC0gbXVsdGlwbGUgY2hvaWNlIGNhbGxiYWNrcwoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0LAogIG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXNwb25zZSwKICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLkNob2ljZUNhbGxiYWNrLAogIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ29uZmlybWF0aW9uQ2FsbGJhY2ssCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuSGlkZGVuVmFsdWVDYWxsYmFjaywKICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2ssCiAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0SW5wdXRDYWxsYmFjaywKICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuQm9vbGVhbkF0dHJpYnV0ZUlucHV0Q2FsbGJhY2sKKTsKCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogIHJldHVybiBmb3JtYXQucmVwbGFjZSgvW3hdL2csIGZ1bmN0aW9uKGMpIHsKICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpKjEwfDA7CiAgICAgIHZhciB2ID0gcjsKICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTApOwogIH0pOwp9CgpmdW5jdGlvbiBnZXRDb3VudHJpZXMoZGF0YSkgewogIHZhciBjID0gW107CiAgZGF0YS5mb3JFYWNoKGU9PmMucHVzaChlLm5hbWUpKTsKICByZXR1cm4gYzsKfQoKZnVuY3Rpb24gZ2V0U3RhdGVzKGRhdGEsIGMpIHsKICB2YXIgcyA9IFtdOwogIGRhdGFbY10uc3RhdGVzLmZvckVhY2goZT0+cy5wdXNoKGUubmFtZSkpOwogIHJldHVybiBzOwp9CgpmdW5jdGlvbiBnZXRDaXRpZXMoZGF0YSwgYywgcykgewogIHZhciBjaSA9IFtdOwogIGRhdGFbY10uc3RhdGVzW3NdLmNpdGllcy5mb3JFYWNoKGU9PmNpLnB1c2goZS5uYW1lKSk7CiAgcmV0dXJuIGNpOwp9CgpmdW5jdGlvbiBnZXREYXRhKCkgewogIHZhciByZXF1ZXN0VVJMID0gJ2h0dHBzOi8vZ2lzdC5naXRodWJ1c2VyY29udGVudC5jb20vYXRvbWljc2FtdXJhaS80OGM4OTFlOGE3OGU4YWEzNDBjMGZmZjk2ZDQ4MDZmNC9yYXcvOTk0NjFmZjdjZDNjYTFiMGI3YTU1MTk0MjkxNTM1N2UzYTQzOGFiNS9jb3VudHJ5LXN0YXRlLWNpdHkuanNvbic7CiAgdmFyIHJlcXVlc3QgPSBuZXcgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QoKTsKICByZXF1ZXN0LnNldFVyaShyZXF1ZXN0VVJMKTsKICByZXF1ZXN0LnNldE1ldGhvZCgnR0VUJyk7CiAgcmVxdWVzdC5nZXRIZWFkZXJzKCkuYWRkKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsnKTsKICAKICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7ICAKICB2YXIgcmVzcG9uc2VDb2RlID0gcmVzcG9uc2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpOwogIGlmIChyZXNwb25zZUNvZGUgPT09IDIwMCkgewogICAgcmV0dXJuIEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCihmdW5jdGlvbiAoKSB7CiAgdHJ5IHsKICAgIHZhciBhbmNob3IgPSBnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4Jyk7CiAgICB2YXIgZGF0YSA9IGdldERhdGEoKTsKICAgIHZhciBzdGF0ZXMgPSBbXTsKICAgIHZhciBjaXRpZXMgPSBbXTsKICAgIHZhciBzZWxlY3RlZENvdW50cnkgPSAwOwogICAgdmFyIHNlbGVjdGVkU3RhdGUgPSAwOwogICAgc2VsZWN0ZWRDb3VudHJ5ID0gc2hhcmVkU3RhdGUuZ2V0KCdzZWxlY3RlZENvdW50cnknKT9wYXJzZUludChub2RlU3RhdGUuZ2V0KCdzZWxlY3RlZENvdW50cnknKSk6MDsKICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogc2VsZWN0ZWQgY291bnRyeSB7fScsIHNlbGVjdGVkQ291bnRyeSk7CiAgICBzZWxlY3RlZFN0YXRlID0gc2hhcmVkU3RhdGUuZ2V0KCdzZWxlY3RlZFN0YXRlJyk/cGFyc2VJbnQobm9kZVN0YXRlLmdldCgnc2VsZWN0ZWRTdGF0ZScpKTowOwogICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOwogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgdmFyIGNiTGlzdCA9IFtdOwogICAgICB2YXIgY291bnRyeUNiID0gbmV3IGZyLkNob2ljZUNhbGxiYWNrKCdTZWxlY3QgY291bnRyeScsIGdldENvdW50cmllcyhkYXRhKSwgc2VsZWN0ZWRDb3VudHJ5LCBmYWxzZSk7CiAgICAgIGNvdW50cnlDYi5zZXRTZWxlY3RlZEluZGV4KHNlbGVjdGVkQ291bnRyeSk7CiAgICAgIGNiTGlzdC5wdXNoKGNvdW50cnlDYik7CiAgICAgIHN0YXRlcyA9IGdldFN0YXRlcyhkYXRhLCBzZWxlY3RlZENvdW50cnkpOwogICAgICB2YXIgc3RhdGVDYiA9IG5ldyBmci5DaG9pY2VDYWxsYmFjaygnU2VsZWN0IHN0YXRlJywgc3RhdGVzLCBzZWxlY3RlZFN0YXRlLCBmYWxzZSk7CiAgICAgIHN0YXRlQ2Iuc2V0U2VsZWN0ZWRJbmRleChzZWxlY3RlZFN0YXRlKTsKICAgICAgY2JMaXN0LnB1c2goc3RhdGVDYik7CiAgICAgIGNpdGllcyA9IGdldENpdGllcyhkYXRhLCBzZWxlY3RlZENvdW50cnksIHNlbGVjdGVkU3RhdGUpOwogICAgICBjYkxpc3QucHVzaChuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKDAsIGBMaXN0IG9mIGNpdGllcyBpbiAke3N0YXRlc1tzZWxlY3RlZFN0YXRlXX1gKSk7CiAgICAgIGNpdGllcy5mb3JFYWNoKGU9PnsKICAgICAgICBjYkxpc3QucHVzaChuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKDAsIGUpKTsKICAgICAgfSk7CgogICAgICB2YXIgc2NyaXB0ID0gYAogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygnc2NyaXB0IGVudGVyJyk7CiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtdWx0aXNlbGVjdF9fb3B0aW9uJykuZm9yRWFjaChmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBjb25zdCBodkNiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdGlvbkNoYW5nZWQnKTsKICAgICAgICAgICAgICBjb25zdCBldiA9IG5ldyBFdmVudCgiY2hhbmdlIik7CiAgICAgICAgICAgICAgaHZDYi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJ3RydWUnKTsKICAgICAgICAgICAgICBjb25zb2xlLmxvZygnaW52b2tpbmcgY2hhbmdlIG9uIGhpZGRlbiB2YWx1ZSBpbnB1dCcpOwogICAgICAgICAgICAgIGh2Q2IuZGlzcGF0Y2hFdmVudChldik7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3N1Ym1pdHRpbmcuLi4nKTsKICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9naW5CdXR0b25fMCcpLmNsaWNrKCk7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9KQogICAgICAgICAgfSkKICAgICAgICB9LCA1MCk7CiAgICAgIGA7CiAgICAgIGNiTGlzdC5wdXNoKG5ldyBmci5IaWRkZW5WYWx1ZUNhbGxiYWNrKCdzZWxlY3Rpb25DaGFuZ2VkJywgJ2ZhbHNlJykpOwogICAgICBjYkxpc3QucHVzaChuZXcgZnIuQ29uZmlybWF0aW9uQ2FsbGJhY2soMCwgWydGaW5pc2gnXSwgMCkpOwogICAgICBjYkxpc3QucHVzaChuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkpOwogICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZC5hcHBseShudWxsLCBjYkxpc3QpLmJ1aWxkKCk7CiAgICB9IGVsc2UgewogICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IGhpZGRlbiB0ZXh0IGlucHV0OiB7fScsIGNhbGxiYWNrcy5nZXQoY2FsbGJhY2tzLnNpemUoKS0zKS5nZXRWYWx1ZSgpKTsKICAgICAgaWYgKGNhbGxiYWNrcy5nZXQoY2FsbGJhY2tzLnNpemUoKS0zKS5nZXRWYWx1ZSgpID09ICd0cnVlJykgeyAvLyBjaGVjayB2YWx1ZSBvZiB0ZXh0IGlucHV0IGNhbGxiYWNrCiAgICAgICAgLy8gb25lIG9mIHRoZSBjYXRlZ29yeSBwaWNrZXJzIHdhcyBjaGFuZ2VkCiAgICAgICAgaWYoc2VsZWN0ZWRDb3VudHJ5ICE9IGNhbGxiYWNrcy5nZXQoMCkuZ2V0U2VsZWN0ZWRJbmRleGVzKClbMF0pIHsKICAgICAgICAgIHNlbGVjdGVkU3RhdGUgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZWxlY3RlZFN0YXRlID0gY2FsbGJhY2tzLmdldCgxKS5nZXRTZWxlY3RlZEluZGV4ZXMoKVswXTsKICAgICAgICB9CiAgICAgICAgc2VsZWN0ZWRDb3VudHJ5ID0gY2FsbGJhY2tzLmdldCgwKS5nZXRTZWxlY3RlZEluZGV4ZXMoKVswXTsKICAgICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNldCBzZWxlY3RlZCBjb3VudHJ5IHt9Jywgc2VsZWN0ZWRDb3VudHJ5KTsKICAgICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNldCBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOyAgCiAgICAgICAgc2hhcmVkU3RhdGUucHV0KCdzZWxlY3RlZENvdW50cnknLCBzZWxlY3RlZENvdW50cnkpOwogICAgICAgIHNoYXJlZFN0YXRlLnB1dCgnc2VsZWN0ZWRTdGF0ZScsIHNlbGVjdGVkU3RhdGUpOwogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKCd1cGRhdGUnKS5idWlsZCgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIHVzZXIgY2xpY2tlZCAiZmluaXNoIgogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKCdjb21wbGV0ZScpLmJ1aWxkKCk7CiAgICAgIH0KICAgIH0KICB9IGNhdGNoIChlKSB7CiAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IGVycm9yOiB7fSAnICsgZSwgZSk7CiAgICBvdXRjb21lID0gJ2Vycm9yJwogIH0KfSkoKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -1262,20 +1330,24 @@ }, { "name": "content-length", - "value": "1648" + "value": "7033" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:18 GMT" + "value": "Wed, 19 Jun 2024 21:28:22 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -1285,14 +1357,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:18.052Z", - "time": 59, + "startedDateTime": "2024-06-19T21:28:23.054Z", + "time": 55, "timings": { "blocked": -1, "connect": -1, @@ -1300,11 +1372,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 59 + "wait": 55 } }, { - "_id": "75d67cb54b1596db4dd7aef88161182c", + "_id": "363a71f39643a664381fab9835743d38", "_order": 0, "cache": {}, "request": { @@ -1316,16 +1388,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -1335,28 +1407,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1664, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Alpha OAuth2 Access Token Modification Script\"" + "value": "name eq \"Check Username\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Alpha%20OAuth2%20Access%20Token%20Modification%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Check%20Username%22" }, "response": { - "bodySize": 10105, + "bodySize": 1129, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 10105, - "text": "{\"result\":[{\"_id\":\"39c08084-1238-43e8-857f-2e11005eac49\",\"name\":\"Alpha OAuth2 Access Token Modification Script\",\"description\":\"Default alpha realm script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1129, + "text": "{\"result\":[{\"_id\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"name\":\"Check Username\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -1404,18 +1480,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "content-length", + "value": "1129" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:18 GMT" + "value": "Wed, 19 Jun 2024 21:28:22 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -1423,20 +1507,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:18.117Z", - "time": 70, + "startedDateTime": "2024-06-19T21:28:23.114Z", + "time": 65, "timings": { "blocked": -1, "connect": -1, @@ -1444,11 +1524,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 70 + "wait": 65 } }, { - "_id": "a8164adca1e0bf44ebac017fc5d0f3eb", + "_id": "1765289e6f5d93f97516bbad71fa265d", "_order": 0, "cache": {}, "request": { @@ -1460,16 +1540,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -1479,28 +1559,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1625, + "headersSize": 1669, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"FrodoTestScript2\"" + "value": "name eq \"FrodoSPAdapter\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript2%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoSPAdapter%22" }, "response": { - "bodySize": 1131, + "bodySize": 10747, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1131, - "text": "{\"result\":[{\"_id\":\"b7259916-71ed-4675-8c5a-de86a80e4aed\",\"name\":\"FrodoTestScript2\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 10747, + "text": "{\"result\":[{\"_id\":\"07ee6240-d106-4e25-a781-5fcabc477d22\",\"name\":\"FrodoSPAdapter\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_SP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -1549,21 +1633,25 @@ "value": "application/json;charset=UTF-8" }, { - "name": "content-length", - "value": "1131" + "name": "transfer-encoding", + "value": "chunked" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:18 GMT" + "value": "Wed, 19 Jun 2024 21:28:22 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -1573,14 +1661,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 800, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:18.201Z", - "time": 62, + "startedDateTime": "2024-06-19T21:28:23.183Z", + "time": 57, "timings": { "blocked": -1, "connect": -1, @@ -1588,11 +1676,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 62 + "wait": 57 } }, { - "_id": "c1c393209e95869bcd07a4e023ad042d", + "_id": "e7c65f07a991b9e8c707db71628693e6", "_order": 0, "cache": {}, "request": { @@ -1604,16 +1692,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -1623,28 +1711,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1643, + "headersSize": 1668, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Inactive Device Match Script\"" + "value": "name eq \"pwdlessSet.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Inactive%20Device%20Match%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22pwdlessSet.js%22" }, "response": { - "bodySize": 546, + "bodySize": 1467, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 546, - "text": "{\"result\":[{\"_id\":\"3bd13a46-61c4-4974-8efb-1700c80c64e3\",\"name\":\"Inactive Device Match Script\",\"description\":\"Inactive Device Match Script\",\"script\":\"LyoKICogSW5hY3RpdmUgRGV2aWNlIE1hdGNoIFNjcmlwdAogKi8KCm91dGNvbWUgPSAidHJ1ZSI7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1467, + "text": "{\"result\":[{\"_id\":\"f203173e-bceb-4e8e-8bde-52f2616b7278\",\"name\":\"pwdlessSet.js\",\"description\":\"null\",\"script\":\"aWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwpzZXRDdXN0b21BdHRyVmFsdWUoImN1c3RvbV9wYXNzd29yZGxlc3MiLCB0cnVlKTsKaWRSZXBvc2l0b3J5LnNldEF0dHJpYnV0ZShpZCwgImFzc2lnbmVkRGFzaGJvYXJkIixbInJlZ2lzdGVyV2ViQXV0aE5EZXZpY2UiLCJzZXRVc2VybmFtZUxlc3MiLCJwZWVyUmVjb3ZlcnlFbWFpbCIsInBlZXJSZWNvdmVyeTFGQSIsICJyZWdpc3RlclB1c2giXSk7CgoKICAgIApvdXRjb21lID0gInRydWUiOwoKZnVuY3Rpb24gc2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSxjdXN0b21BdHRyVmFsdWUpCnsKICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCAnZnItaWRtLWN1c3RvbS1hdHRycycpOwogIGlmIChmcklkbUN1c3RvbUF0dHJpYnV0ZXMpCiAgewogICAgdmFyIGZySWRtQ3VzdG9tQXR0cmlidXRlc09iamVjdCA9IEpTT04ucGFyc2UoU3RyaW5nKGZySWRtQ3VzdG9tQXR0cmlidXRlcy50b0FycmF5KClbMF0pKTsKICAgIGZySWRtQ3VzdG9tQXR0cmlidXRlc09iamVjdFtjdXN0b21BdHRyTmFtZV0gPSBjdXN0b21BdHRyVmFsdWU7CiAgICB2YXIganNvbl9zdHJpbmcgPSBKU09OLnN0cmluZ2lmeShmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QpOwogICAgaWRSZXBvc2l0b3J5LnNldEF0dHJpYnV0ZShpZCwgImZyLWlkbS1jdXN0b20tYXR0cnMiLFtqc29uX3N0cmluZ10pOwogIH0KfQo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -1694,20 +1786,24 @@ }, { "name": "content-length", - "value": "546" + "value": "1467" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:18 GMT" + "value": "Wed, 19 Jun 2024 21:28:22 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -1717,13 +1813,13 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 773, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:18.274Z", + "startedDateTime": "2024-06-19T21:28:23.244Z", "time": 59, "timings": { "blocked": -1, @@ -1736,7 +1832,7 @@ } }, { - "_id": "3061b032426771626e9bedd19872123e", + "_id": "6b041cdd91b1a940e2f050d4a2c575a6", "_order": 0, "cache": {}, "request": { @@ -1748,16 +1844,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -1767,28 +1863,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1625, + "headersSize": 1668, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"FrodoTestScript1\"" + "value": "name eq \"Test-Script-1\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript1%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Test-Script-1%22" }, "response": { - "bodySize": 1131, + "bodySize": 854, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1131, - "text": "{\"result\":[{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 854, + "text": "{\"result\":[{\"_id\":\"59f84396-71e4-4c1d-a6ae-c4fc624d9752\",\"name\":\"Test-Script-1\",\"description\":\"A test script that uses an environment variable and a secret variable\",\"script\":\"Ly8gQ2FsY3VsYXRlIEU9bWNeMiB1c2luZyBtID0gNDIKY29uc3QgYzIgPSBzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi50ZXN0LnZhcmlhYmxlLmxpZ2h0Iik7CmNvbnNvbGUubG9nKGBFID0gJHs0MiAqIGMyICogYzJ9YCk7Ci8vIENhbGN1bGF0ZSB0aGUgYXJlYSBvZiBhIGNpcmNsZSB3aXRoIHJhZGl1cyByID0gNDIKY29uc3QgcGkgPSBwYXJzZUZsb2F0KHN5c3RlbUVudi5nZXRQcm9wZXJ0eSgiZXN2LnRlc3Quc2VjcmV0LnBpIikpOwpjb25zb2xlLmxvZyhgQSA9ICR7cGkgKiA0MiAqIDQyfWApOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -1838,20 +1938,24 @@ }, { "name": "content-length", - "value": "1131" + "value": "854" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:18 GMT" + "value": "Wed, 19 Jun 2024 21:28:22 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -1861,14 +1965,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:18.348Z", - "time": 59, + "startedDateTime": "2024-06-19T21:28:23.307Z", + "time": 78, "timings": { "blocked": -1, "connect": -1, @@ -1876,11 +1980,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 59 + "wait": 78 } }, { - "_id": "e6f3f3e413e0a2b0675cbfd8f8cb066e", + "_id": "9ae5250c7c369e659926259583ec72fe", "_order": 0, "cache": {}, "request": { @@ -1892,16 +1996,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -1911,28 +2015,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1675, + "headersSize": 1669, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Device Profile Match Template - Decision Node Script\"" + "value": "name eq \"hasWebAuthN.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Device%20Profile%20Match%20Template%20-%20Decision%20Node%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22hasWebAuthN.js%22" }, "response": { - "bodySize": 4597, + "bodySize": 776, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 4597, - "text": "{\"result\":[{\"_id\":\"13e3f263-9cd3-4844-8d1c-040fd0dd02eb\",\"name\":\"Device Profile Match Template - Decision Node Script\",\"description\":\"Default global script template for Device Profile Match decision node script for Authentication Tree\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGEgc2ltcGxpZmllZCB0ZW1wbGF0ZSBmb3IgdW5kZXJzdGFuZGluZwogKiB0aGUgYmFzaWNzIG9mIGRldmljZSBtYXRjaGluZy4gX1RoaXMgaXMgbm90IGZ1bmN0aW9uYWxseSBjb21wbGV0ZS5fCiAqIEZvciBhIGZ1bmN0aW9uYWxseSBjb21wbGV0ZSBzY3JpcHQgYXMgd2VsbCBhcyBhIGRldmVsb3BtZW50IHRvb2xraXQsCiAqIHZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9Gb3JnZVJvY2svZm9yZ2Vyb2NrLWRldmljZS1tYXRjaC1zY3JpcHQuCiAqCiAqIEdsb2JhbCBub2RlIHZhcmlhYmxlcyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGlzIHNjb3BlOgogKiAxLiBgc2hhcmVkU3RhdGVgIHByb3ZpZGVzIGFjY2VzcyB0byBpbmNvbWluZyByZXF1ZXN0CiAqIDIuIGBkZXZpY2VQcm9maWxlc0Rhb2AgcHJvdmlkZXMgYWNjZXNzIHRvIHN0b3JlZCBwcm9maWxlcwogKiAzLiBgb3V0Y29tZWAgdmFyaWFibGUgbWFwcyB0byBhdXRoIHRyZWUgbm9kZSBvdXRjb21lczsgdmFsdWVzIGFyZQogKiAgICAndHJ1ZScsICdmYWxzZScsIG9yICd1bmtub3duRGV2aWNlJyAobm90aWNlIF9hbGxfIGFyZSBzdHJpbmdzKS4KICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgcmVxdWVzdCdzIGRldmljZSBwcm9maWxlLgogKiBSZXR1cm5zIHNlcmlhbGl6ZWQgSlNPTiAodHlwZSBzdHJpbmcpOyBwYXJzaW5nIHRoaXMgd2lsbCByZXN1bHQgYQogKiBuYXRpdmUgSlMgb2JqZWN0LgogKi8KdmFyIGluY29taW5nSnNvbiA9IHNoYXJlZFN0YXRlLmdldCgnZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlJykudG9TdHJpbmcoKTsKdmFyIGluY29taW5nID0gSlNPTi5wYXJzZShpbmNvbWluZ0pzb24pOwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgdXNlcidzIHVzZXJuYW1lIGFuZCByZWFsbS4KICogTm90aWNlIHRoZSB1c2Ugb2YgYC5hc1N0cmluZygpYC4KICovCnZhciB1c2VybmFtZSA9IHNoYXJlZFN0YXRlLmdldCgidXNlcm5hbWUiKS5hc1N0cmluZygpOwp2YXIgcmVhbG0gPSBzaGFyZWRTdGF0ZS5nZXQoInJlYWxtIikuYXNTdHJpbmcoKTsKCi8qKgogKiBHZXQgdGhlIHVzZXIncyBzdG9yZWQgcHJvZmlsZXMgZm9yIGFwcHJvcHJpYXRlIHJlYWxtLgogKiBSZXR1cm5zIGEgX3NwZWNpYWxfIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIHByb2ZpbGUgZGF0YQogKi8KdmFyIHN0b3JlZFByb2ZpbGVzID0gZGV2aWNlUHJvZmlsZXNEYW8uZ2V0RGV2aWNlUHJvZmlsZXModXNlcm5hbWUsIHJlYWxtKTsKCi8vIERlZmF1bHQgdG8gYG91dGNvbWVgIG9mICd1bmtub3duRGV2aWNlJwpvdXRjb21lID0gJ3Vua25vd25EZXZpY2UnOwoKaWYgKHN0b3JlZFByb2ZpbGVzKSB7CiAgICB2YXIgaSA9IDA7CiAgICAvLyBOT1RFOiBgLnNpemUoKWAgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBzdG9yZWQgcHJvZmlsZXMKICAgIHZhciBsZW4gPSBzdG9yZWRQcm9maWxlcy5zaXplKCk7CgogICAgZm9yIChpOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIHN0b3JlZCBwcm9maWxlLgogICAgICAgICAqIFJldHVybnMgc2VyaWFsaXplZCBKU09OICh0eXBlIHN0cmluZyk7IHBhcnNpbmcgdGhpcyB3aWxsIHJlc3VsdAogICAgICAgICAqIGEgbmF0aXZlIEpTIG9iamVjdC4KICAgICAgICAgKi8KICAgICAgICB2YXIgc3RvcmVkSnNvbiA9IHN0b3JlZFByb2ZpbGVzLmdldChpKTsKICAgICAgICB2YXIgc3RvcmVkID0gSlNPTi5wYXJzZShzdG9yZWRKc29uKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogRmluZCBhIHN0b3JlZCBwcm9maWxlIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllci4KICAgICAgICAgKi8KICAgICAgICBpZiAoaW5jb21pbmcuaWRlbnRpZmllciA9PT0gc3RvcmVkLmlkZW50aWZpZXIpIHsKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBOb3cgdGhhdCB5b3UndmUgZm91bmQgdGhlIGFwcHJvcHJpYXRlIHByb2ZpbGUsIHlvdSB3aWxsIHBlcmZvcm0KICAgICAgICAgICAgICogdGhlIGxvZ2ljIGhlcmUgdG8gbWF0Y2ggdGhlIHZhbHVlcyBvZiB0aGUgYGluY29taW5nYCBwcm9maWxlCiAgICAgICAgICAgICAqIHdpdGggdGhhdCBvZiB0aGUgYHN0b3JlZGAgcHJvZmlsZS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogVGhlIHJlc3VsdCBvZiB0aGUgbWF0Y2hpbmcgbG9naWMgaXMgYXNzaWduZWQgdG8gYG91dGNvbWVgLiBTaW5jZQogICAgICAgICAgICAgKiB3ZSBoYXZlIHByb2ZpbGVzIG9mIHRoZSBzYW1lIGlkZW50aWZpZXIsIHRoZSB2YWx1ZSAodHlwZSBzdHJpbmcpCiAgICAgICAgICAgICAqIHNob3VsZCBub3cgYmUgZWl0aGVyICd0cnVlJyBvciAnZmFsc2UnIChwcm9wZXJ0aWVzIG1hdGNoZWQgb3Igbm90KS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0b3BpYywgdmlzaXQgdGhpcyBHaXRodWIgcmVwbzoKICAgICAgICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL0ZvcmdlUm9jay9mb3JnZXJvY2stZGV2aWNlLW1hdGNoLXNjcmlwdAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgb3V0Y29tZSA9ICdmYWxzZSc7CiAgICAgICAgfQogICAgfQp9\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 776, + "text": "{\"result\":[{\"_id\":\"29be3f4a-cf40-4aca-8fe3-de40c9a801dd\",\"name\":\"hasWebAuthN.js\",\"description\":\"null\",\"script\":\"dmFyIHdlYmF1dGhuRGV2aWNlUHJvZmlsZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHNoYXJlZFN0YXRlLmdldCgiX2lkIiksICJ3ZWJhdXRobkRldmljZVByb2ZpbGVzIikudG9TdHJpbmcoKTsKc2hhcmVkU3RhdGUucHV0KCJkZWJ1ZyIsd2ViYXV0aG5EZXZpY2VQcm9maWxlcyk7CmlmKHdlYmF1dGhuRGV2aWNlUHJvZmlsZXMubGVuZ3RoPjIpIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7Cn0KZWxzZSB7CiAgb3V0Y29tZSA9ICJmYWxzZSI7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -1982,20 +2090,24 @@ }, { "name": "content-length", - "value": "4597" + "value": "776" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:18 GMT" + "value": "Wed, 19 Jun 2024 21:28:22 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -2005,14 +2117,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:18.413Z", - "time": 60, + "startedDateTime": "2024-06-19T21:28:23.390Z", + "time": 62, "timings": { "blocked": -1, "connect": -1, @@ -2020,11 +2132,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 60 + "wait": 62 } }, { - "_id": "60315e24f99439c8e4989ee6eb506111", + "_id": "0b5bdd5efa8fa86e894e34cbb0737401", "_order": 0, "cache": {}, "request": { @@ -2035,161 +2147,17 @@ "name": "accept", "value": "application/json, text/plain, */*" }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" - }, { "name": "content-type", "value": "application/json" }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1654, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "name eq \"Device Id (Match) - Server Side\"" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Device%20Id%20%28Match%29%20-%20Server%20Side%22" - }, - "response": { - "bodySize": 40318, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 40318, - "text": "{\"result\":[{\"_id\":\"703dab1a-1921-4981-98dd-b8e5349d8548\",\"name\":\"Device Id (Match) - Server Side\",\"description\":\"Default global script for server side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAyMyBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIFNjYWxhckNvbXBhcmF0b3IgPSB7fSwgU2NyZWVuQ29tcGFyYXRvciA9IHt9LCBNdWx0aVZhbHVlQ29tcGFyYXRvciA9IHt9LCBVc2VyQWdlbnRDb21wYXJhdG9yID0ge30sIEdlb2xvY2F0aW9uQ29tcGFyYXRvciA9IHt9OwoKdmFyIGNvbmZpZyA9IHsKICAgIHByb2ZpbGVFeHBpcmF0aW9uOiAzMCwgICAgICAgICAgICAgIC8vaW4gZGF5cwogICAgbWF4UHJvZmlsZXNBbGxvd2VkOiA1LAogICAgbWF4UGVuYWx0eVBvaW50czogMCwKICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBzY3JlZW46IHsKICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICAgIGNvbXBhcmF0b3I6IFNjcmVlbkNvbXBhcmF0b3IsCiAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDUwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHBsdWdpbnM6IHsKICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2luczogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmb250czogewogICAgICAgICAgICBpbnN0YWxsZWRGb250czogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogU2NhbGFyQ29tcGFyYXRvciwKICAgICAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdXNlckFnZW50OiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgICBjb21wYXJhdG9yOiBVc2VyQWdlbnRDb21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBpZ25vcmVWZXJzaW9uOiB0cnVlLAogICAgICAgICAgICAgICAgcGVuYWx0eVBvaW50czogMTAwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdlb2xvY2F0aW9uOiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSwKICAgICAgICAgICAgY29tcGFyYXRvcjogR2VvbG9jYXRpb25Db21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBhbGxvd2VkUmFuZ2U6IDEwMCwgICAgICAgICAgICAvL2luIG1pbGVzCiAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJhdG9yIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCgp2YXIgYWxsLCBhbnksIGNhbGN1bGF0ZURpc3RhbmNlLCBjYWxjdWxhdGVJbnRlcnNlY3Rpb24sIGNhbGN1bGF0ZVBlcmNlbnRhZ2UsIG51bGxPclVuZGVmaW5lZCwgc3BsaXRBbmRUcmltLAogICAgdW5kZWZpbmVkTG9jYXRpb247CgovLyBDb21wYXJpc29uUmVzdWx0CgovKioKICogQ29uc3RydWN0cyBhbiBpbnN0YW5jZSBvZiBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gcGVuYWx0eSBwb2ludHMuCiAqCiAqIEBwYXJhbSBwZW5hbHR5UG9pbnRzIChOdW1iZXIpIFRoZSBwZW5hbHR5IHBvaW50cyBmb3IgdGhlIGNvbXBhcmlzb24gKGRlZmF1bHRzIHRvIDApLgogKiBAcGFyYW0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSAoYm9vbGVhbikgV2hldGhlciB0aGUgY3VycmVudCB2YWx1ZSBjb250YWlucyBtb3JlIGluZm9ybWF0aW9uCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIHRoZSBzdG9yZWQgdmFsdWUgKGRlZmF1bHRzIHRvIGZhbHNlKS4KICovCmZ1bmN0aW9uIENvbXBhcmlzb25SZXN1bHQoKSB7CgogICAgdmFyIHBlbmFsdHlQb2ludHMgPSAwLAogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBmYWxzZTsKCiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQpIHsKICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBhcmd1bWVudHNbMV07CiAgICB9CgogICAgaWYgKGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkICYmIGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgaWYgKHR5cGVvZihhcmd1bWVudHNbMF0pID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSA9IGFyZ3VtZW50c1swXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIH0KICAgIH0KCiAgICB0aGlzLnBlbmFsdHlQb2ludHMgPSBwZW5hbHR5UG9pbnRzOwogICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZTsKCn0KCkNvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUyA9IG5ldyBDb21wYXJpc29uUmVzdWx0KDApOwoKLyoqCiAqIFN0YXRpYyBtZXRob2QgZm9yIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcuCiAqCiAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkuCiAqLwpDb21wYXJpc29uUmVzdWx0LmlzU3VjY2Vzc2Z1bCA9ICBmdW5jdGlvbihjb21wYXJpc29uUmVzdWx0KSB7CiAgICByZXR1cm4gY29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKTsKfTsKCgovKioKICogU3RhdGljIG1ldGhvZCBmb3IgZnVuY3Rpb25hbCBwcm9ncmFtbWluZy4KICoKICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gIGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHJldHVybiBjb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU7Cn07CgovKioKICogQ29tcGFyaXNvbiBmdW5jdGlvbiB0aGF0IGNhbiBiZSBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCB0byBhcnJheS5zb3J0CiAqLwpDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUgPSBmdW5jdGlvbihmaXJzdCwgc2Vjb25kKSB7CiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGZpcnN0KSAmJiBudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAwOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoZmlyc3QpKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAxOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoZmlyc3QucGVuYWx0eVBvaW50cyAhPT0gc2Vjb25kLnBlbmFsdHlQb2ludHMpIHsKICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnBlbmFsdHlQb2ludHMgLSBzZWNvbmQucGVuYWx0eVBvaW50czsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gKGZpcnN0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCkgLSAoc2Vjb25kLmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCk7CiAgICAgICAgfQogICAgfQp9OwoKLyoqCiAqIEFtYWxnYW1hdGVzIHRoZSBnaXZlbiBDb21wYXJpc29uUmVzdWx0IGludG8gdGhpcyBDb21wYXJpc29uUmVzdWx0LgogKgogKiBAcGFyYW0gY29tcGFyaXNvblJlc3VsdCBUaGUgQ29tcGFyaXNvblJlc3VsdCB0byBpbmNsdWRlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5wcm90b3R5cGUuYWRkQ29tcGFyaXNvblJlc3VsdCA9IGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHRoaXMucGVuYWx0eVBvaW50cyArPSBjb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHM7CiAgICBpZiAoY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKSB7CiAgICAgICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlOwogICAgfQp9OwoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBubyBwZW5hbHR5IHBvaW50cyBoYXZlIGJlZW4gYXNzaWduZWQgZm9yIHRoZSBjb21wYXJpc29uLgogKgogKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgY29tcGFyaXNvbiB3YXMgc3VjY2Vzc2Z1bC4KICovCkNvbXBhcmlzb25SZXN1bHQucHJvdG90eXBlLmlzU3VjY2Vzc2Z1bCA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZCh0aGlzLnBlbmFsdHlQb2ludHMpIHx8IHRoaXMucGVuYWx0eVBvaW50cyA9PT0gMDsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gc2ltcGxlIG9iamVjdHMgKFN0cmluZ3xOdW1iZXIpIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybwogKiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIGN1cnJlbnQgdmFsdWUuCiAqIEBwYXJhbSBzdG9yZWRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIHN0b3JlZCB2YWx1ZS4KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0LgogKi8KU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlID0gZnVuY3Rpb24gKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUsIGNvbmZpZykgewogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlN0cmluZ0NvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOnN0b3JlZFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoc3RvcmVkVmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOmNvbmZpZzogIiArIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpOwogICAgfQogICAgaWYgKGNvbmZpZy5wZW5hbHR5UG9pbnRzID09PSAwKSB7CiAgICAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUzsKICAgIH0KCiAgICBpZiAoIW51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgfHwgY3VycmVudFZhbHVlICE9PSBzdG9yZWRWYWx1ZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoIW51bGxPclVuZGVmaW5lZChjdXJyZW50VmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KHRydWUpOwogICAgfQoKICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7Cn07CgovKioKICogQ29tcGFyZXMgdHdvIHNjcmVlbnMgYW5kIGlmIHRoZXkgYXJlIGVxdWFsIHRoZW4gcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB6ZXJvIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLAogKiBvdGhlcndpc2UgcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiB7CiAqICAgICAgICAgICAgInNjcmVlbldpZHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBoZWlnaHQuCiAqICAgICAgICAgICAgInNjcmVlbkNvbG91ckRlcHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBjb2xvdXIgZGVwdGguCiAqICAgICAgICB9CiAqIEBwYXJhbSBzdG9yZWRWYWx1ZTogewogKiAgICAgICAgICAgICJzY3JlZW5XaWR0aCI6IChOdW1iZXIpIFRoZSBzdG9yZWQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIHN0b3JlZCBjbGllbnQgc2NyZWVuIGhlaWdodC4KICogICAgICAgICAgICAic2NyZWVuQ29sb3VyRGVwdGgiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGNsaWVudCBzY3JlZW4gY29sb3VyIGRlcHRoLgogKiAgICAgICAgfQogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgInBlbmFsdHlQb2ludHMiOiAoTnVtYmVyKSBUaGUgbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzLgogKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovClNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTY3JlZW5Db21wYXJhdG9yLmNvbXBhcmU6Y3VycmVudFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICBjdXJyZW50VmFsdWUgPSB7c2NyZWVuV2lkdGg6IG51bGwsIHNjcmVlbkhlaWdodDogbnVsbCwgc2NyZWVuQ29sb3VyRGVwdGg6IG51bGx9OwogICAgfQogICAgaWYgKG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBzdG9yZWRWYWx1ZSA9IHtzY3JlZW5XaWR0aDogbnVsbCwgc2NyZWVuSGVpZ2h0OiBudWxsLCBzY3JlZW5Db2xvdXJEZXB0aDogbnVsbH07CiAgICB9CgogICAgdmFyIGNvbXBhcmlzb25SZXN1bHRzID0gWwogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuV2lkdGgsIHN0b3JlZFZhbHVlLnNjcmVlbldpZHRoLCBjb25maWcpLAogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuSGVpZ2h0LCBzdG9yZWRWYWx1ZS5zY3JlZW5IZWlnaHQsIGNvbmZpZyksCiAgICAgICAgU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlKGN1cnJlbnRWYWx1ZS5zY3JlZW5Db2xvdXJEZXB0aCwgc3RvcmVkVmFsdWUuc2NyZWVuQ29sb3VyRGVwdGgsIGNvbmZpZyldOwoKICAgIGlmIChhbGwoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKSkgewogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChhbnkoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSkpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgfQp9OwoKLyoqCiAqIFNwbGl0cyBib3RoIHZhbHVlcyB1c2luZyBkZWxpbWl0ZXIsIHRyaW1zIGV2ZXJ5IHZhbHVlIGFuZCBjb21wYXJlcyBjb2xsZWN0aW9ucyBvZiB2YWx1ZXMuCiAqIFJldHVybnMgemVyby1yZXN1bHQgZm9yIHNhbWUgbXVsdGktdmFsdWUgYXR0cmlidXRlcy4KICoKICogSWYgY29sbGVjdGlvbnMgYXJlIG5vdCBzYW1lIGNoZWNrcyBpZiBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaXMgbGVzcyBvciBlcXVhbCBtYXhEaWZmZXJlbmNlcyBvcgogKiBwZXJjZW50YWdlIG9mIGRpZmZlcmVuY2UgaXMgbGVzcyBvciBlcXVhbCBtYXhQZXJjZW50YWdlRGlmZmVyZW5jZS4KICoKICogSWYgeWVzIHRoZW4gcmV0dXJucyB6ZXJvLXJlc3VsdCB3aXRoIGFkZGl0aW9uYWwgaW5mbywgZWxzZSByZXR1cm5zIHBlbmFsdHlQb2ludHMtcmVzdWx0LgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlOiAoU3RyaW5nKSBUaGUgc3RvcmVkIHZhbHVlLgogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgIm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlIjogKE51bWJlcikgVGhlIG1heCBkaWZmZXJlbmNlIHBlcmNlbnRhZ2UgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgaXMgYXNzaWduZWQuCiAqICAgICAgICAgICAgIm1heERpZmZlcmVuY2VzIjogKE51bWJlcikgVGhlIG1heCBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgcG9pbnRzIGFyZSBhc3NpZ25lZC4KICogICAgICAgICAgICAicGVuYWx0eVBvaW50cyI6IChOdW1iZXIpIFRoZSBudW1iZXIgb2YgcGVuYWx0eSBwb2ludHMuCiAgKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovCk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgdmFyIGRlbGltaXRlciA9ICI7IiwKICAgICAgICBjdXJyZW50VmFsdWVzID0gc3BsaXRBbmRUcmltKGN1cnJlbnRWYWx1ZSwgZGVsaW1pdGVyKSwKICAgICAgICBzdG9yZWRWYWx1ZXMgPSBzcGxpdEFuZFRyaW0oc3RvcmVkVmFsdWUsIGRlbGltaXRlciksCiAgICAgICAgbWF4TnVtYmVyT2ZFbGVtZW50cyA9IE1hdGgubWF4KGN1cnJlbnRWYWx1ZXMubGVuZ3RoLCBzdG9yZWRWYWx1ZXMubGVuZ3RoKSwKICAgICAgICBudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9IGNhbGN1bGF0ZUludGVyc2VjdGlvbihjdXJyZW50VmFsdWVzLCBzdG9yZWRWYWx1ZXMpLmxlbmd0aCwKICAgICAgICBudW1iZXJPZkRpZmZlcmVuY2VzID0gbWF4TnVtYmVyT2ZFbGVtZW50cyAtIG51bWJlck9mVGhlU2FtZUVsZW1lbnRzLAogICAgICAgIHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzID0gY2FsY3VsYXRlUGVyY2VudGFnZShudW1iZXJPZkRpZmZlcmVuY2VzLCBtYXhOdW1iZXJPZkVsZW1lbnRzKTsKCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKHN0b3JlZFZhbHVlKSAmJiAhbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UobnVtYmVyT2ZUaGVTYW1lRWxlbWVudHMgKyAiIG9mICIgKyBtYXhOdW1iZXJPZkVsZW1lbnRzICsgIiBhcmUgc2FtZSIpOwogICAgfQoKICAgIGlmIChtYXhOdW1iZXJPZkVsZW1lbnRzID09PSAwKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBubyBhdHRyaWJ1dGVzIGZvdW5kIGluIGJvdGggcHJvZmlsZXMiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9PT0gbWF4TnVtYmVyT2ZFbGVtZW50cykgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJJZ25vcmVkIGJlY2F1c2UgYWxsIGF0dHJpYnV0ZXMgYXJlIHNhbWUiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZkRpZmZlcmVuY2VzID4gY29uZmlnLm1heERpZmZlcmVuY2VzKSB7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJXb3VsZCBiZSBpZ25vcmVkIGlmIG5vdCBtb3JlIHRoYW4gIiArIGNvbmZpZy5tYXhEaWZmZXJlbmNlcyArICIgZGlmZmVyZW5jZXMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KCiAgICBpZiAocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgPiBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgKyAiIHBlcmNlbnRzIGFyZSBkaWZmZXJlbnQiKTsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIldvdWxkIGJlIGlnbm9yZWQgaWYgbm90IG1vcmUgdGhhbiAiICsgY29uZmlnLm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlICsgIiBwZXJjZW50Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChjb25maWcucGVuYWx0eVBvaW50cyk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBudW1iZXIgb2YgZGlmZmVyZW5jZXMoIiArIG51bWJlck9mRGlmZmVyZW5jZXMgKyAiKSBub3QgbW9yZSB0aGFuICIKICAgICAgICAgICAgKyBjb25maWcubWF4RGlmZmVyZW5jZXMpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzICsgIiBwZXJjZW50cyBhcmUgZGlmZmVyZW50Iik7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBub3QgbW9yZSB0aGFuICIgKyBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UgKyAiIHBlcmNlbnQiKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdCh0cnVlKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gVXNlciBBZ2VudCBTdHJpbmdzIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybyBwZW5hbHR5CiAqIHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlIChTdHJpbmcpIFRoZSBzdG9yZWQgdmFsdWUuCiAqIEBwYXJhbSBjb25maWc6IHsKICogICAgICAgICAgICAiaWdub3JlVmVyc2lvbiI6IChib29sZWFuKSBJZiB0aGUgdmVyc2lvbiBudW1iZXJzIGluIHRoZSBVc2VyIEFnZW50IFN0cmluZ3Mgc2hvdWxkIGJlIGlnbm9yZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb21wYXJpc29uLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBBIENvbXBhcmlzb25SZXN1bHQuCiAqLwpVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiVXNlckFnZW50Q29tcGFyYXRvci5jb21wYXJlOmN1cnJlbnRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgaWYgKGNvbmZpZy5pZ25vcmVWZXJzaW9uKSB7CiAgICAgICAgLy8gcmVtb3ZlIHZlcnNpb24gbnVtYmVyCiAgICAgICAgY3VycmVudFZhbHVlID0gbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgPyBudWxsIDogY3VycmVudFZhbHVlLnJlcGxhY2UoL1tcZFwuXSsvZywgIiIpLnRyaW0oKTsKICAgICAgICBzdG9yZWRWYWx1ZSA9IG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkgPyBudWxsIDogc3RvcmVkVmFsdWUucmVwbGFjZSgvW1xkXC5dKy9nLCAiIikudHJpbSgpOwogICAgfQoKICAgIHJldHVybiBTY2FsYXJDb21wYXJhdG9yLmNvbXBhcmUoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gbG9jYXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50IGEgZGVncmVlIG9mIGRpZmZlcmVuY2UuCiAqCiAqIEBwYXJhbSBjdXJyZW50VmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgY3VycmVudCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGN1cnJlbnQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcGFyYW0gc3RvcmVkVmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxhdGl0dWRlLgogKiAgICAgICAgICAgICJsb25naXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJhbGxvd2VkUmFuZ2UiOiAoTnVtYmVyKSBUaGUgbWF4IGRpZmZlcmVuY2UgYWxsb3dlZCBpbiB0aGUgdHdvIGxvY2F0aW9ucywgYmVmb3JlIHRoZSBwZW5hbHR5IGlzIGFzc2lnbmVkLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KKiAgICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0CiAqLwpHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiR2VvbG9jYXRpb25Db21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICAvLyBDaGVjayBmb3IgdW5kZWZpbmVkIHN0b3JlZCBvciBjdXJyZW50IGxvY2F0aW9ucwoKICAgIGlmICh1bmRlZmluZWRMb2NhdGlvbihjdXJyZW50VmFsdWUpICYmIHVuZGVmaW5lZExvY2F0aW9uKHN0b3JlZFZhbHVlKSkgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CiAgICBpZiAodW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiAhdW5kZWZpbmVkTG9jYXRpb24oc3RvcmVkVmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KICAgIGlmICghdW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiB1bmRlZmluZWRMb2NhdGlvbihzdG9yZWRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgLy8gQm90aCBsb2NhdGlvbnMgZGVmaW5lZCwgdGhlcmVmb3JlIHBlcmZvcm0gY29tcGFyaXNvbgoKICAgIHZhciBkaXN0YW5jZSA9IGNhbGN1bGF0ZURpc3RhbmNlKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUpOwoKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJEaXN0YW5jZSBiZXR3ZWVuICgiICsgY3VycmVudFZhbHVlLmxhdGl0dWRlICsgIiwiICsgY3VycmVudFZhbHVlLmxvbmdpdHVkZSArICIpIGFuZCAoIiArCiAgICAgICAgICAgIHN0b3JlZFZhbHVlLmxhdGl0dWRlICsgIiwiICsgc3RvcmVkVmFsdWUubG9uZ2l0dWRlICsgIikgaXMgIiArIGRpc3RhbmNlICsgIiBtaWxlcyIpOwogICAgfQoKICAgIGlmIChwYXJzZUZsb2F0KGRpc3RhbmNlLnRvUHJlY2lzaW9uKDUpKSA9PT0gMCkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJMb2NhdGlvbiBpcyB0aGUgc2FtZSIpOwogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CgogICAgaWYgKGRpc3RhbmNlIDw9IGNvbmZpZy5hbGxvd2VkUmFuZ2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlRvbGVyYXRlZCBiZWNhdXNlIGRpc3RhbmNlIG5vdCBtb3JlIHRoZW4gIiArIGNvbmZpZy5hbGxvd2VkUmFuZ2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiV291bGQgYmUgaWdub3JlZCBpZiBkaXN0YW5jZSBub3QgbW9yZSB0aGVuICIgKyBjb25maWcuYWxsb3dlZFJhbmdlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KfTsKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi8vICAgICAgICAgICAgICAgICAgICBEZXZpY2UgUHJpbnQgTG9naWMgLSBETyBOT1QgTU9ESUZZICAgICAgICAgICAgICAgICAgICAgLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwoKLy8gVXRpbGl0eSBmdW5jdGlvbnMKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgZXZhbHVhdGluZyBmdW5jdGlvbiBmIG9uIGVhY2ggZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYWxsID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn07CgovKioKICogUmV0dXJucyB0cnVlIGlmIGV2YWx1YXRpbmcgZnVuY3Rpb24gZiBvbiBhbnkgZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYW55ID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGxvY2F0aW9uIGlzIG51bGwgb3IgaGFzIHVuZGVmaW5lZCBsb25naXR1ZGUgb3IgbGF0aXR1ZGUgdmFsdWVzLgogKgogKiBAcGFyYW0gbG9jYXRpb246IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBsb25naXR1ZGUuCiAqICAgICAgICB9CiAqIEByZXR1cm4gYm9vbGVhbgogKi8KdW5kZWZpbmVkTG9jYXRpb24gPSBmdW5jdGlvbihsb2NhdGlvbikgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZChsb2NhdGlvbikgfHwgbnVsbE9yVW5kZWZpbmVkKGxvY2F0aW9uLmxhdGl0dWRlKSB8fCBudWxsT3JVbmRlZmluZWQobG9jYXRpb24ubG9uZ2l0dWRlKTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLgogKgogKiBAcGFyYW0gdmFsdWU6IGEgdmFsdWUgb2YgYW55IHR5cGUKICogQHJldHVybiBib29sZWFuCiAqLwpudWxsT3JVbmRlZmluZWQgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7Cn07CgovKioKICogQ2FsY3VsYXRlcyB0aGUgZGlzdGFuY2VzIGJldHdlZW4gdGhlIHR3byBsb2NhdGlvbnMuCiAqCiAqIEBwYXJhbSBmaXJzdDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBmaXJzdCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGZpcnN0IGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIHNlY29uZDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcmV0dXJuIE51bWJlciBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdHdvIGxvY2F0aW9ucy4KICovCmNhbGN1bGF0ZURpc3RhbmNlID0gZnVuY3Rpb24oZmlyc3QsIHNlY29uZCkgewogICAgdmFyIGZhY3RvciA9IChNYXRoLlBJIC8gMTgwKSwKICAgICAgICB0aGV0YSwKICAgICAgICBkaXN0OwogICAgZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkZWdyZWVzKSB7CiAgICAgICAgcmV0dXJuIGRlZ3JlZXMgKiBmYWN0b3I7CiAgICB9CiAgICBmdW5jdGlvbiByYWRpYW5zVG9EZWdyZWVzKHJhZGlhbnMpIHsKICAgICAgICByZXR1cm4gcmFkaWFucyAvIGZhY3RvcjsKICAgIH0KICAgIHRoZXRhID0gZmlyc3QubG9uZ2l0dWRlIC0gc2Vjb25kLmxvbmdpdHVkZTsKICAgIGRpc3QgPSBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKyBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHRoZXRhKSk7CiAgICBkaXN0ID0gTWF0aC5hY29zKGRpc3QpOwogICAgZGlzdCA9IHJhZGlhbnNUb0RlZ3JlZXMoZGlzdCk7CiAgICBkaXN0ID0gZGlzdCAqIDYwICogMS4xNTE1OwogICAgcmV0dXJuIGRpc3Q7Cn07CgovKioKICogQ29udmVydHMgYSBTdHJpbmcgaG9sZGluZyBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMgaW50byBhbiBhcnJheS4KICoKICogQHBhcmFtIHRleHQgKFN0cmluZykgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMuCiAqIEBwYXJhbSBkZWxpbWl0ZXIgKFN0cmluZykgVGhlIGNoYXJhY3RlciBkZWxpbWl0aW5nIHZhbHVlcyB3aXRoaW4gdGhlIHRleHQgU3RyaW5nLgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMuCiAqLwpzcGxpdEFuZFRyaW0gPSBmdW5jdGlvbih0ZXh0LCBkZWxpbWl0ZXIpIHsKCiAgICB2YXIgcmVzdWx0cyA9IFtdLAogICAgICAgIGksCiAgICAgICAgdmFsdWVzLAogICAgICAgIHZhbHVlOwogICAgaWYgKHRleHQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KCiAgICB2YWx1ZXMgPSB0ZXh0LnNwbGl0KGRlbGltaXRlcik7CiAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFsdWUgPSB2YWx1ZXNbaV0udHJpbSgpOwogICAgICAgIGlmICh2YWx1ZSAhPT0gIiIpIHsKICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdHM7Cn07CgovKioKICogQ29udmVydHMgdmFsdWUgdG8gYSBwZXJjZW50YWdlIG9mIHJhbmdlLgogKgogKiBAcGFyYW0gdmFsdWUgKE51bWJlcikgVGhlIGFjdHVhbCBudW1iZXIgdG8gYmUgY29udmVydGVkIHRvIGEgcGVyY2VudGFnZS4KICogQHBhcmFtIHJhbmdlIChOdW1iZXIpIFRoZSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzIChpLmUuIHJlcHJlc2VudHMgMTAwJSkuCiAqIEByZXR1cm4gKE51bWJlcikgVGhlIHBlcmNlbnRhZ2UuCiAqLwpjYWxjdWxhdGVQZXJjZW50YWdlID0gZnVuY3Rpb24odmFsdWUsIHJhbmdlKSB7CiAgICBpZiAocmFuZ2UgPT09IDApIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBwYXJzZUZsb2F0KCh2YWx1ZSAvIHJhbmdlKS50b1ByZWNpc2lvbigyKSkgKiAxMDA7Cn07CgovKioKICogQ3JlYXRlcyBhIG5ldyBhcnJheSBjb250YWluaW5nIG9ubHkgdGhvc2UgZWxlbWVudHMgZm91bmQgaW4gYm90aCBhcnJheXMgcmVjZWl2ZWQgYXMgYXJndW1lbnRzLgogKgogKiBAcGFyYW0gZmlyc3QgKEFycmF5KSBUaGUgZmlyc3QgYXJyYXkuCiAqIEBwYXJhbSBzZWNvbmQgKEFycmF5KSBUaGUgc2Vjb25kIGFycmF5LgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGVsZW1lbnRzIHRoYXQgZm91bmQgaW4gZmlyc3QgYW5kIHNlY29uZC4KICovCmNhbGN1bGF0ZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGZpcnN0LCBzZWNvbmQpIHsKICAgIHJldHVybiBmaXJzdC5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgIHJldHVybiBzZWNvbmQuaW5kZXhPZihlbGVtZW50KSAhPT0gLTE7CiAgICB9KTsKfTsKCmZ1bmN0aW9uIGdldFZhbHVlKG9iaiwgYXR0cmlidXRlUGF0aCkgewogICAgdmFyIHZhbHVlID0gb2JqLAogICAgICAgIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cmlidXRlUGF0aC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICB2YWx1ZSA9IHZhbHVlW2F0dHJpYnV0ZVBhdGhbaV1dOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwp9CgoKZnVuY3Rpb24gaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWcpIHsKICAgIHJldHVybiBhdHRyaWJ1dGVDb25maWcuY29tcGFyYXRvciAhPT0gdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcsIGF0dHJpYnV0ZVBhdGgpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBbXSwKICAgICAgICBhdHRyaWJ1dGVOYW1lLAogICAgICAgIGF0dHJQYXRocywKICAgICAgICBhdHRyUGF0aCwKICAgICAgICBpOwoKICAgIGZvciAoYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVDb25maWcpIHsKICAgICAgICBpZiAoYXR0cmlidXRlQ29uZmlnLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZU5hbWUpKSB7CgogICAgICAgICAgICBpZiAoaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWdbYXR0cmlidXRlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBhdHRyUGF0aCA9IGF0dHJpYnV0ZVBhdGguc2xpY2UoKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRoLnB1c2goYXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVQYXRocy5wdXNoKGF0dHJQYXRoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJQYXRoID0gYXR0cmlidXRlUGF0aC5zbGljZSgpOwogICAgICAgICAgICAgICAgYXR0clBhdGgucHVzaChhdHRyaWJ1dGVOYW1lKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRocyA9IGdldEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZ1thdHRyaWJ1dGVOYW1lXSwgYXR0clBhdGgpOwogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGF0dHJQYXRocy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVBhdGhzLnB1c2goYXR0clBhdGhzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYXR0cmlidXRlUGF0aHM7Cn0KCmZ1bmN0aW9uIGdldERldmljZVByaW50QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnKSB7CiAgICByZXR1cm4gZ2V0QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnLCBbXSk7Cn0KCmZ1bmN0aW9uIGhhc1JlcXVpcmVkQXR0cmlidXRlcyhkZXZpY2VQcmludCwgYXR0cmlidXRlQ29uZmlnKSB7CgogICAgdmFyIGF0dHJpYnV0ZVBhdGhzID0gZ2V0RGV2aWNlUHJpbnRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcpLAogICAgICAgIGksCiAgICAgICAgYXR0clZhbHVlLAogICAgICAgIGF0dHJDb25maWc7CgogICAgZm9yIChpID0gMDsgaSA8IGF0dHJpYnV0ZVBhdGhzLmxlbmd0aDsgaSsrKSB7CgogICAgICAgIGF0dHJWYWx1ZSA9IGdldFZhbHVlKGRldmljZVByaW50LCBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICBpZiAoYXR0ckNvbmZpZy5yZXF1aXJlZCAmJiBhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBsb2dnZXIud2FybmluZygiRGV2aWNlIFByaW50IHByb2ZpbGUgbWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUsICIgKyBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZSBwcmludCBoYXMgcmVxdWlyZWQgYXR0cmlidXRlcyIpOwogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGF0dHJpYnV0ZUNvbmZpZywgZGV2aWNlUHJpbnQsIGRldmljZVByaW50UHJvZmlsZXMsIG1heFBlbmFsdHlQb2ludHMpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBnZXREZXZpY2VQcmludEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZyksCiAgICAgICAgZGFvID0gc2hhcmVkU3RhdGUuZ2V0KCdfRGV2aWNlSWREYW8nKSwKICAgICAgICByZXN1bHRzLAogICAgICAgIGosCiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQsCiAgICAgICAgaSwKICAgICAgICBjdXJyZW50VmFsdWUsCiAgICAgICAgc3RvcmVkVmFsdWUsCiAgICAgICAgYXR0ckNvbmZpZywKICAgICAgICBjb21wYXJpc29uUmVzdWx0LAogICAgICAgIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICBzZWxlY3RlZFByb2ZpbGUsCiAgICAgICAgY3VyRGV2aWNlUHJpbnRQcm9maWxlLAogICAgICAgIHZhbHM7CgogICAgcmVzdWx0cyA9IFtdOwogICAgZm9yIChqID0gMDsgaiA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBjdXJEZXZpY2VQcmludFByb2ZpbGUgPSBKU09OLnBhcnNlKG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvbihkZXZpY2VQcmludFByb2ZpbGVzW2pdKSk7CiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQgPSBuZXcgQ29tcGFyaXNvblJlc3VsdCgpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdHRyaWJ1dGVQYXRocy5sZW5ndGg7IGkrKykgewoKICAgICAgICAgICAgY3VycmVudFZhbHVlID0gZ2V0VmFsdWUoZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgc3RvcmVkVmFsdWUgPSBnZXRWYWx1ZShjdXJEZXZpY2VQcmludFByb2ZpbGUuZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICAgICAgaWYgKHN0b3JlZFZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb21wYXJpc29uUmVzdWx0ID0gbmV3IENvbXBhcmlzb25SZXN1bHQoYXR0ckNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbXBhcmlzb25SZXN1bHQgPSBhdHRyQ29uZmlnLmNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBhdHRyQ29uZmlnLmFyZ3MpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJDb21wYXJpbmcgYXR0cmlidXRlIHBhdGg6ICIgKyBhdHRyaWJ1dGVQYXRoc1tpXQogICAgICAgICAgICAgICAgICAgICsgIiwgQ29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkgKyAiLCBwZW5hbHR5UG9pbnRzPSIKICAgICAgICAgICAgICAgICAgICArIGNvbXBhcmlzb25SZXN1bHQucGVuYWx0eVBvaW50cyArICIsIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU9IgogICAgICAgICAgICAgICAgICAgICsgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5hZGRDb21wYXJpc29uUmVzdWx0KGNvbXBhcmlzb25SZXN1bHQpOwogICAgICAgIH0KICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIkFnZ3JlZ2F0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKSArICIsIHBlbmFsdHlQb2ludHM9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICAgICArIGFnZ3JlZ2F0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmVzdWx0cy5wdXNoKHsKICAgICAgICAgICAga2V5OiBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICAgICAgdmFsdWU6IGRldmljZVByaW50UHJvZmlsZXNbal0KICAgICAgICB9KTsKICAgIH0KCiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXN1bHRzLnNvcnQoZnVuY3Rpb24oYSwgYikgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUoYS5rZXksIGIua2V5KTsKICAgIH0pOwogICAgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0ID0gcmVzdWx0c1swXS5rZXk7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU2VsZWN0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKQogICAgICAgICAgICArICIsIHBlbmFsdHlQb2ludHM9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgfQoKICAgIHNlbGVjdGVkUHJvZmlsZSA9IG51bGw7CiAgICBpZiAoc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgPD0gbWF4UGVuYWx0eVBvaW50cykgewogICAgICAgIHNlbGVjdGVkUHJvZmlsZSA9IHJlc3VsdHNbMF0udmFsdWU7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTZWxlY3RlZCBwcm9maWxlOiAiICsgc2VsZWN0ZWRQcm9maWxlICsKICAgICAgICAgICAgICAgICIgd2l0aCAiICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgKyAiIHBlbmFsdHkgcG9pbnRzIik7CiAgICAgICAgfQogICAgfQoKICAgIGlmIChzZWxlY3RlZFByb2ZpbGUgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyogdXBkYXRlIHByb2ZpbGUgKi8KICAgIHNlbGVjdGVkUHJvZmlsZS5wdXQoInNlbGVjdGlvbkNvdW50ZXIiLAogICAgICAgIGphdmEubGFuZy5JbnRlZ2VyLnZhbHVlT2YocGFyc2VJbnQoc2VsZWN0ZWRQcm9maWxlLmdldCgic2VsZWN0aW9uQ291bnRlciIpLCAxMCkgKyAxKSk7CiAgICBzZWxlY3RlZFByb2ZpbGUucHV0KCJsYXN0U2VsZWN0ZWREYXRlIiwgamF2YS5sYW5nLkxvbmcudmFsdWVPZihuZXcgRGF0ZSgpLmdldFRpbWUoKSkpOwogICAgc2VsZWN0ZWRQcm9maWxlLnB1dCgiZGV2aWNlUHJpbnQiLCBkZXZpY2VQcmludCk7CgogICAgdmFscyA9IFtdOwogICAgZm9yIChpID0gMDsgaSA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YWxzLnB1c2gob3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uKGRldmljZVByaW50UHJvZmlsZXNbaV0pKTsKICAgIH0KCiAgICBkYW8uc2F2ZURldmljZVByb2ZpbGVzKHVzZXJuYW1lLCByZWFsbSwgdmFscyk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIG1hdGNoRGV2aWNlUHJpbnQoKSB7CgogICAgaWYgKCF1c2VybmFtZSkgewogICAgICAgIGxvZ2dlci5lcnJvcigiVXNlcm5hbWUgbm90IHNldC4gQ2Fubm90IGNvbXBhcmUgdXNlcidzIGRldmljZSBwcmludCBwcm9maWxlcy4iKTsKICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICB9IGVsc2UgewoKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImNsaWVudCBkZXZpY2VQcmludDogIiArIGNsaWVudFNjcmlwdE91dHB1dERhdGEpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGdldFByb2ZpbGVzID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRXhwaXJlZFByb2ZpbGUoZGV2aWNlUHJpbnRQcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cGlyYXRpb25EYXRlID0gbmV3IERhdGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNlbGVjdGVkRGF0ZTsKICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uRGF0ZS5zZXREYXRlKGV4cGlyYXRpb25EYXRlLmdldERhdGUoKSAtIGNvbmZpZy5wcm9maWxlRXhwaXJhdGlvbik7CgogICAgICAgICAgICAgICAgICAgIGxhc3RTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShkZXZpY2VQcmludFByb2ZpbGUubGFzdFNlbGVjdGVkRGF0ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0U2VsZWN0ZWREYXRlIDwgZXhwaXJhdGlvbkRhdGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICBkYW8gPSBzaGFyZWRTdGF0ZS5nZXQoJ19EZXZpY2VJZERhbycpLAogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVzLAogICAgICAgICAgICAgICAgICAgICAgICBpdGVyOwoKICAgICAgICAgICAgICAgICAgICBwcm9maWxlcyA9IGRhby5nZXREZXZpY2VQcm9maWxlcyh1c2VybmFtZSwgcmVhbG0pOwoKICAgICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaXRlciA9IHByb2ZpbGVzLml0ZXJhdG9yKCk7CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgPSBpdGVyLm5leHQoKS5nZXRPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFeHBpcmVkUHJvZmlsZShwcm9maWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChwcm9maWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoInN0b3JlZCBub24tZXhwaXJlZCBwcm9maWxlczogIiArIHJlc3VsdHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRldmljZVByaW50ID0gSlNPTi5wYXJzZShjbGllbnRTY3JpcHRPdXRwdXREYXRhKSwKICAgICAgICAgICAgZGV2aWNlUHJpbnRQcm9maWxlcyA9IGdldFByb2ZpbGVzKCk7CgogICAgICAgIGlmICghaGFzUmVxdWlyZWRBdHRyaWJ1dGVzKGRldmljZVByaW50LCBjb25maWcuYXR0cmlidXRlcykpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZVByaW50Lmhhc1JlcXVpcmVkQXR0cmlidXRlczogZmFsc2UiKTsKICAgICAgICAgICAgLy8gV2lsbCBmYWlsIHRoaXMgbW9kdWxlIGJ1dCBmYWxsLXRocm91Z2ggdG8gbmV4dCBtb2R1bGUuIFdoaWNoIHNob3VsZCBiZSBPVFAuCiAgICAgICAgICAgIGF1dGhTdGF0ZSA9IEZBSUxFRDsKICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGNvbmZpZy5hdHRyaWJ1dGVzLCBkZXZpY2VQcmludCwgZGV2aWNlUHJpbnRQcm9maWxlcywgY29uZmlnLm1heFBlbmFsdHlQb2ludHMpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJkZXZpY2VQcmludC5oYXNWYWxpZFByb2ZpbGU6IHRydWUiKTsKICAgICAgICAgICAgYXV0aFN0YXRlID0gU1VDQ0VTUzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiZGV2aWNlUHJpbnQuaGFzVmFsaWRQcm9maWxlOiBmYWxzZSIpOwogICAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoJ2RldmljZVByaW50UHJvZmlsZScsIEpTT04uc3RyaW5naWZ5KGRldmljZVByaW50KSk7CiAgICAgICAgICAgIC8vIFdpbGwgZmFpbCB0aGlzIG1vZHVsZSBidXQgZmFsbC10aHJvdWdoIHRvIG5leHQgbW9kdWxlLiBXaGljaCBzaG91bGQgYmUgT1RQLgogICAgICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICAgICAgfQogICAgfQp9CgptYXRjaERldmljZVByaW50KCk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=2.0,resource=1.1, resource=1.1" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "date", - "value": "Thu, 04 Jan 2024 15:48:18 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 780, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-01-04T15:48:18.479Z", - "time": 61, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 61 - } - }, - { - "_id": "5e9aaa7940499ae88cb8e5c5b2d83090", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" - }, - { - "name": "content-type", - "value": "application/json" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -2199,28 +2167,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1625, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"FrodoTestScript4\"" + "value": "name eq \"FrodoTestScript3\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript4%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript3%22" }, "response": { "bodySize": 1131, "content": { "mimeType": "application/json;charset=UTF-8", "size": 1131, - "text": "{\"result\":[{\"_id\":\"10643e95-873a-4ec0-b713-a7f56760d179\",\"name\":\"FrodoTestScript4\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "text": "{\"result\":[{\"_id\":\"3b2f6836-184c-4ee9-8a1d-557cb01837a5\",\"name\":\"FrodoTestScript3\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -2274,16 +2246,20 @@ }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:18 GMT" + "value": "Wed, 19 Jun 2024 21:28:22 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -2293,14 +2269,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:18.550Z", - "time": 63, + "startedDateTime": "2024-06-19T21:28:23.458Z", + "time": 55, "timings": { "blocked": -1, "connect": -1, @@ -2308,11 +2284,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 63 + "wait": 55 } }, { - "_id": "c5cda9fdad2bde1459bbb88c54fff9e7", + "_id": "5b160758e77e5641a3f36258878baa00", "_order": 0, "cache": {}, "request": { @@ -2323,161 +2299,17 @@ "name": "accept", "value": "application/json, text/plain, */*" }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" - }, { "name": "content-type", "value": "application/json" }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1654, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "name eq \"Device Id (Match) - Client Side\"" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Device%20Id%20%28Match%29%20-%20Client%20Side%22" - }, - "response": { - "bodySize": 13210, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13210, - "text": "{\"result\":[{\"_id\":\"157298c0-7d31-4059-a95b-eeb08473b7e5\",\"name\":\"Device Id (Match) - Client Side\",\"description\":\"Default global script for client side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGZvbnREZXRlY3RvciA9IChmdW5jdGlvbiAoKSB7CiAgICAvKioKICAgICAqIEphdmFTY3JpcHQgY29kZSB0byBkZXRlY3QgYXZhaWxhYmxlIGF2YWlsYWJpbGl0eSBvZiBhCiAgICAgKiBwYXJ0aWN1bGFyIGZvbnQgaW4gYSBicm93c2VyIHVzaW5nIEphdmFTY3JpcHQgYW5kIENTUy4KICAgICAqCiAgICAgKiBBdXRob3IgOiBMYWxpdCBQYXRlbAogICAgICogV2Vic2l0ZTogaHR0cDovL3d3dy5sYWxpdC5vcmcvbGFiL2phdmFzY3JpcHQtY3NzLWZvbnQtZGV0ZWN0LwogICAgICogTGljZW5zZTogQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wCiAgICAgKiAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAgICAqIFZlcnNpb246IDAuMTUgKDIxIFNlcCAyMDA5KQogICAgICogICAgICAgICAgQ2hhbmdlZCBjb21wYXJpc2lvbiBmb250IHRvIGRlZmF1bHQgZnJvbSBzYW5zLWRlZmF1bHQtZGVmYXVsdCwKICAgICAqICAgICAgICAgIGFzIGluIEZGMy4wIGZvbnQgb2YgY2hpbGQgZWxlbWVudCBkaWRuJ3QgZmFsbGJhY2sKICAgICAqICAgICAgICAgIHRvIHBhcmVudCBlbGVtZW50IGlmIHRoZSBmb250IGlzIG1pc3NpbmcuCiAgICAgKiBWZXJzaW9uOiAwLjIgKDA0IE1hciAyMDEyKQogICAgICogICAgICAgICAgQ29tcGFyaW5nIGZvbnQgYWdhaW5zdCBhbGwgdGhlIDMgZ2VuZXJpYyBmb250IGZhbWlsaWVzIGllLAogICAgICogICAgICAgICAgJ21vbm9zcGFjZScsICdzYW5zLXNlcmlmJyBhbmQgJ3NhbnMnLiBJZiBpdCBkb2Vzbid0IG1hdGNoIGFsbCAzCiAgICAgKiAgICAgICAgICB0aGVuIHRoYXQgZm9udCBpcyAxMDAlIG5vdCBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbQogICAgICogVmVyc2lvbjogMC4zICgyNCBNYXIgMjAxMikKICAgICAqICAgICAgICAgIFJlcGxhY2VkIHNhbnMgd2l0aCBzZXJpZiBpbiB0aGUgbGlzdCBvZiBiYXNlRm9udHMKICAgICAqLwogICAgLyoKICAgICAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMgRm9yZ2VSb2NrIEFTLgogICAgICovCiAgICB2YXIgZGV0ZWN0b3IgPSB7fSwgYmFzZUZvbnRzLCB0ZXN0U3RyaW5nLCB0ZXN0U2l6ZSwgaCwgcywgZGVmYXVsdFdpZHRoID0ge30sIGRlZmF1bHRIZWlnaHQgPSB7fSwgaW5kZXg7CgogICAgLy8gYSBmb250IHdpbGwgYmUgY29tcGFyZWQgYWdhaW5zdCBhbGwgdGhlIHRocmVlIGRlZmF1bHQgZm9udHMuCiAgICAvLyBhbmQgaWYgaXQgZG9lc24ndCBtYXRjaCBhbGwgMyB0aGVuIHRoYXQgZm9udCBpcyBub3QgYXZhaWxhYmxlLgogICAgYmFzZUZvbnRzID0gWydtb25vc3BhY2UnLCAnc2Fucy1zZXJpZicsICdzZXJpZiddOwoKICAgIC8vd2UgdXNlIG0gb3IgdyBiZWNhdXNlIHRoZXNlIHR3byBjaGFyYWN0ZXJzIHRha2UgdXAgdGhlIG1heGltdW0gd2lkdGguCiAgICAvLyBBbmQgd2UgdXNlIGEgTExpIHNvIHRoYXQgdGhlIHNhbWUgbWF0Y2hpbmcgZm9udHMgY2FuIGdldCBzZXBhcmF0ZWQKICAgIHRlc3RTdHJpbmcgPSAibW1tbW1tbW1tbWxsaSI7CgogICAgLy93ZSB0ZXN0IHVzaW5nIDcycHggZm9udCBzaXplLCB3ZSBtYXkgdXNlIGFueSBzaXplLiBJIGd1ZXNzIGxhcmdlciB0aGUgYmV0dGVyLgogICAgdGVzdFNpemUgPSAnNzJweCc7CgogICAgaCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07CgogICAgLy8gY3JlYXRlIGEgU1BBTiBpbiB0aGUgZG9jdW1lbnQgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgdGV4dCB3ZSB1c2UgdG8gdGVzdAogICAgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIHMuc3R5bGUuZm9udFNpemUgPSB0ZXN0U2l6ZTsKICAgIHMuaW5uZXJIVE1MID0gdGVzdFN0cmluZzsKICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHQgd2lkdGggZm9yIHRoZSB0aHJlZSBiYXNlIGZvbnRzCiAgICAgICAgcy5zdHlsZS5mb250RmFtaWx5ID0gYmFzZUZvbnRzW2luZGV4XTsKICAgICAgICBoLmFwcGVuZENoaWxkKHMpOwogICAgICAgIGRlZmF1bHRXaWR0aFtiYXNlRm9udHNbaW5kZXhdXSA9IHMub2Zmc2V0V2lkdGg7IC8vd2lkdGggZm9yIHRoZSBkZWZhdWx0IGZvbnQKICAgICAgICBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dID0gcy5vZmZzZXRIZWlnaHQ7IC8vaGVpZ2h0IGZvciB0aGUgZGVmdWFsdCBmb250CiAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgIH0KCiAgICBkZXRlY3Rvci5kZXRlY3QgPSBmdW5jdGlvbihmb250KSB7CiAgICAgICAgdmFyIGRldGVjdGVkID0gZmFsc2UsIGluZGV4LCBtYXRjaGVkOwogICAgICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgICAgIHMuc3R5bGUuZm9udEZhbWlseSA9IGZvbnQgKyAnLCcgKyBiYXNlRm9udHNbaW5kZXhdOyAvLyBuYW1lIG9mIHRoZSBmb250IGFsb25nIHdpdGggdGhlIGJhc2UgZm9udCBmb3IgZmFsbGJhY2suCiAgICAgICAgICAgIGguYXBwZW5kQ2hpbGQocyk7CiAgICAgICAgICAgIG1hdGNoZWQgPSAocy5vZmZzZXRXaWR0aCAhPT0gZGVmYXVsdFdpZHRoW2Jhc2VGb250c1tpbmRleF1dIHx8IHMub2Zmc2V0SGVpZ2h0ICE9PSBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dKTsKICAgICAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgICAgICAgICAgZGV0ZWN0ZWQgPSBkZXRlY3RlZCB8fCBtYXRjaGVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGV0ZWN0ZWQ7CiAgICB9OwoKICAgIHJldHVybiBkZXRlY3RvcjsKfSgpKTsKLyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAxNCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGNvbGxlY3RTY3JlZW5JbmZvID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBzY3JlZW5JbmZvID0ge307CiAgICAgICAgaWYgKHNjcmVlbikgewogICAgICAgICAgICBpZiAoc2NyZWVuLndpZHRoKSB7CiAgICAgICAgICAgICAgICBzY3JlZW5JbmZvLnNjcmVlbldpZHRoID0gc2NyZWVuLndpZHRoOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLmhlaWdodCkgewogICAgICAgICAgICAgICAgc2NyZWVuSW5mby5zY3JlZW5IZWlnaHQgPSBzY3JlZW4uaGVpZ2h0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLnBpeGVsRGVwdGgpIHsKICAgICAgICAgICAgICAgIHNjcmVlbkluZm8uc2NyZWVuQ29sb3VyRGVwdGggPSBzY3JlZW4ucGl4ZWxEZXB0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3Qgc2NyZWVuIGluZm9ybWF0aW9uLiBzY3JlZW4gaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzY3JlZW5JbmZvOwogICAgfSwKICAgIGNvbGxlY3RUaW1lem9uZUluZm8gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHRpbWV6b25lSW5mbyA9ICB7fSwgb2Zmc2V0ID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOwoKICAgICAgICBpZiAob2Zmc2V0KSB7CiAgICAgICAgICAgIHRpbWV6b25lSW5mby50aW1lem9uZSA9IG9mZnNldDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbm5vdCBjb2xsZWN0IHRpbWV6b25lIGluZm9ybWF0aW9uLiB0aW1lem9uZSBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aW1lem9uZUluZm87CiAgICB9LAogICAgY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbyA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgaWYgKG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IucGx1Z2lucykgewogICAgICAgICAgICB2YXIgcGx1Z2luc0luZm8gPSB7fSwgaSwgcGx1Z2lucyA9IG5hdmlnYXRvci5wbHVnaW5zOwogICAgICAgICAgICBwbHVnaW5zSW5mby5pbnN0YWxsZWRQbHVnaW5zID0gIiI7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGx1Z2luc0luZm8uaW5zdGFsbGVkUGx1Z2lucyA9IHBsdWdpbnNJbmZvLmluc3RhbGxlZFBsdWdpbnMgKyBwbHVnaW5zW2ldLmZpbGVuYW1lICsgIjsiOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcGx1Z2luc0luZm87CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBicm93c2VyIHBsdWdpbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLnBsdWdpbnMgaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgICAgIHJldHVybiB7fTsKICAgICAgICB9CgogICAgfSwKLy8gR2V0dGluZyBnZW9sb2NhdGlvbiB0YWtlcyBzb21lIHRpbWUgYW5kIGlzIGRvbmUgYXN5bmNocm9ub3VzbHksIGhlbmNlIG5lZWQgYSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgb25jZSBnZW9sb2NhdGlvbiBpcyByZXRyaWV2ZWQuCiAgICBjb2xsZWN0R2VvbG9jYXRpb25JbmZvID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIGdlb2xvY2F0aW9uSW5mbyA9IHt9LAogICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgICAgICAgICAgZ2VvbG9jYXRpb25JbmZvLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGU7CiAgICAgICAgICAgICAgICBnZW9sb2NhdGlvbkluZm8ubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGU7CiAgICAgICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgICAgICB9LCBlcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3QgZ2VvbG9jYXRpb24gaW5mb3JtYXRpb24uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVycm9yLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgY2FsbGJhY2soZ2VvbG9jYXRpb25JbmZvKTsKICAgICAgICAgICAgfTsKICAgICAgICBpZiAobmF2aWdhdG9yICYmIG5hdmlnYXRvci5nZW9sb2NhdGlvbikgewogICAgICAgICAgICAvLyBOQjogSWYgdXNlciBjaG9vc2VzICdOb3Qgbm93JyBvbiBGaXJlZm94IG5laXRoZXIgY2FsbGJhY2sgZ2V0cyBjYWxsZWQKICAgICAgICAgICAgLy8gICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NTUzMwogICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBnZW9sb2NhdGlvbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgIH0KICAgIH0sCiAgICBjb2xsZWN0QnJvd3NlckZvbnRzSW5mbyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZm9udHNJbmZvID0ge30sIGksIGZvbnRzTGlzdCA9IFsiY3Vyc2l2ZSIsIm1vbm9zcGFjZSIsInNlcmlmIiwic2Fucy1zZXJpZiIsImZhbnRhc3kiLCJkZWZhdWx0IiwiQXJpYWwiLCJBcmlhbCBCbGFjayIsCiAgICAgICAgICAgICJBcmlhbCBOYXJyb3ciLCJBcmlhbCBSb3VuZGVkIE1UIEJvbGQiLCJCb29rbWFuIE9sZCBTdHlsZSIsIkJyYWRsZXkgSGFuZCBJVEMiLCJDZW50dXJ5IiwiQ2VudHVyeSBHb3RoaWMiLAogICAgICAgICAgICAiQ29taWMgU2FucyBNUyIsIkNvdXJpZXIiLCJDb3VyaWVyIE5ldyIsIkdlb3JnaWEiLCJHZW50aXVtIiwiSW1wYWN0IiwiS2luZyIsIkx1Y2lkYSBDb25zb2xlIiwiTGFsaXQiLAogICAgICAgICAgICAiTW9kZW5hIiwiTW9ub3R5cGUgQ29yc2l2YSIsIlBhcHlydXMiLCJUYWhvbWEiLCJUZVgiLCJUaW1lcyIsIlRpbWVzIE5ldyBSb21hbiIsIlRyZWJ1Y2hldCBNUyIsIlZlcmRhbmEiLAogICAgICAgICAgICAiVmVyb25hIl07CiAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gIiI7CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBmb250c0xpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGZvbnREZXRlY3Rvci5kZXRlY3QoZm9udHNMaXN0W2ldKSkgewogICAgICAgICAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzICsgZm9udHNMaXN0W2ldICsgIjsiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb250c0luZm87CiAgICB9LAogICAgZGV2aWNlUHJpbnQgPSB7fTsKCmRldmljZVByaW50LnNjcmVlbiA9IGNvbGxlY3RTY3JlZW5JbmZvKCk7CmRldmljZVByaW50LnRpbWV6b25lID0gY29sbGVjdFRpbWV6b25lSW5mbygpOwpkZXZpY2VQcmludC5wbHVnaW5zID0gY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbygpOwpkZXZpY2VQcmludC5mb250cyA9IGNvbGxlY3RCcm93c2VyRm9udHNJbmZvKCk7CgppZiAobmF2aWdhdG9yLnVzZXJBZ2VudCkgewogICAgZGV2aWNlUHJpbnQudXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKfQppZiAobmF2aWdhdG9yLmFwcE5hbWUpIHsKICAgIGRldmljZVByaW50LmFwcE5hbWUgPSBuYXZpZ2F0b3IuYXBwTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcENvZGVOYW1lKSB7CiAgICBkZXZpY2VQcmludC5hcHBDb2RlTmFtZSA9IG5hdmlnYXRvci5hcHBDb2RlTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcFZlcnNpb24pIHsKICAgIGRldmljZVByaW50LmFwcFZlcnNpb24gPSBuYXZpZ2F0b3IuYXBwVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbikgewogICAgZGV2aWNlUHJpbnQuYXBwTWlub3JWZXJzaW9uID0gbmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmJ1aWxkSUQpIHsKICAgIGRldmljZVByaW50LmJ1aWxkSUQgPSBuYXZpZ2F0b3IuYnVpbGRJRDsKfQppZiAobmF2aWdhdG9yLnBsYXRmb3JtKSB7CiAgICBkZXZpY2VQcmludC5wbGF0Zm9ybSA9IG5hdmlnYXRvci5wbGF0Zm9ybTsKfQppZiAobmF2aWdhdG9yLmNwdUNsYXNzKSB7CiAgICBkZXZpY2VQcmludC5jcHVDbGFzcyA9IG5hdmlnYXRvci5jcHVDbGFzczsKfQppZiAobmF2aWdhdG9yLm9zY3B1KSB7CiAgICBkZXZpY2VQcmludC5vc2NwdSA9IG5hdmlnYXRvci5vc2NwdTsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3QpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3QgPSBuYXZpZ2F0b3IucHJvZHVjdDsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3RTdWIpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3RTdWIgPSBuYXZpZ2F0b3IucHJvZHVjdFN1YjsKfQppZiAobmF2aWdhdG9yLnZlbmRvcikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yID0gbmF2aWdhdG9yLnZlbmRvcjsKfQppZiAobmF2aWdhdG9yLnZlbmRvclN1YikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yU3ViID0gbmF2aWdhdG9yLnZlbmRvclN1YjsKfQppZiAobmF2aWdhdG9yLmxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5sYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnVzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQudXNlckxhbmd1YWdlID0gbmF2aWdhdG9yLnVzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQuYnJvd3Nlckxhbmd1YWdlID0gbmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnN5c3RlbUxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5zeXN0ZW1MYW5ndWFnZSA9IG5hdmlnYXRvci5zeXN0ZW1MYW5ndWFnZTsKfQoKLy8gQXR0ZW1wdCB0byBjb2xsZWN0IGdlby1sb2NhdGlvbiBpbmZvcm1hdGlvbiBhbmQgcmV0dXJuIHRoaXMgd2l0aCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgovLyBPdGhlcndpc2UsIGlmIGdlby1sb2NhdGlvbiBmYWlscyBvciB0YWtlcyBsb25nZXIgdGhhbiAzMCBzZWNvbmRzLCBhdXRvLXN1Ym1pdCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgphdXRvU3VibWl0RGVsYXkgPSAzMDAwMDsKb3V0cHV0LnZhbHVlID0gSlNPTi5zdHJpbmdpZnkoZGV2aWNlUHJpbnQpOwpjb2xsZWN0R2VvbG9jYXRpb25JbmZvKGZ1bmN0aW9uKGdlb2xvY2F0aW9uSW5mbykgewogICAgZGV2aWNlUHJpbnQuZ2VvbG9jYXRpb24gPSBnZW9sb2NhdGlvbkluZm87CiAgICBvdXRwdXQudmFsdWUgPSBKU09OLnN0cmluZ2lmeShkZXZpY2VQcmludCk7CiAgICBzdWJtaXQoKTsKfSk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=2.0,resource=1.1, resource=1.1" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "date", - "value": "Thu, 04 Jan 2024 15:48:18 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 780, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-01-04T15:48:18.623Z", - "time": 61, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 61 - } - }, - { - "_id": "e81a7568b2f332dd73d17af7613483cf", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" - }, - { - "name": "content-type", - "value": "application/json" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -2487,28 +2319,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1645, + "headersSize": 1669, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Salesforce Profile Normalization\"" + "value": "name eq \"timerButton.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Salesforce%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22timerButton.js%22" }, "response": { - "bodySize": 1564, + "bodySize": 3752, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1564, - "text": "{\"result\":[{\"_id\":\"312e951f-70c5-49d2-a9ae-93aef909d5df\",\"name\":\"Salesforce Profile Normalization\",\"description\":\"Normalizes raw profile data from Salesforce\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZ2l2ZW5fbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmZhbWlseV9uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnBpY3R1cmUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJsb2NhbGUiLCByYXdQcm9maWxlLnpvbmVJbmZvKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 3752, + "text": "{\"result\":[{\"_id\":\"13aaf8de-cd8c-4b0e-9167-39ca1fb590a4\",\"name\":\"timerButton.js\",\"description\":\"null\",\"script\":\"Ly8gVGltZXIgQnV0dG9uIG5vZGUKLy8gT3V0Y29tZXM6IFsgInRydWUiLCAidGltZXIiIF0KCgpERUxBWT0xMDsKTUVTU0FHRT0iU2tpcCB0byB5b3VyIHByZWZlcnJlZCBtZXRob2QuLi4gIjsKQlVUVE9OVEVYVD0iU2VsZWN0IGFub3RoZXIgbG9naW4gbWV0aG9kIjsKCnZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5OYW1lQ2FsbGJhY2ssCiAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKKQoKZnVuY3Rpb24gY3JlYXRlU2NyaXB0KCkgewogICAgcmV0dXJuIFN0cmluZygiIFxuXAogICAgICAgIHZhciBDT1VOVCA9ICIgKyBERUxBWSArICI7IFxuXAogICAgICAgIGZ1bmN0aW9uIGdvKG9icykgeyBcblwKICAgICAgICAgICAgY29uc3QgcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtdnYtYXM9XCJEVU1NWVwiXScpWzBdOyBcblwKICAgICAgICAgICAgaWYgKHApIHsgXG5cCiAgICAgICAgICAgICAgICBwLmhpZGRlbiA9IHRydWU7IFxuXAogICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbGFiZWxbZm9yPScgKyBwLmlkICsgJ10nKS5oaWRkZW4gPSB0cnVlOyBcblwKICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignYnV0dG9uW3R5cGU9c3VibWl0XScpLmlubmVyVGV4dCA9ICciICsgQlVUVE9OVEVYVCArICInOyBcblwKICAgICAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IFxuXAogICAgICAgICAgICAgICAgYi5jbGFzc0xpc3QuYWRkKFwiYnRuXCIsIFwibXQtM1wiLCBcImJ0bi1zZWNvbmRhcnlcIik7IFxuXAogICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSAnIiArIE1FU1NBR0UgKyAiJyArIENPVU5UICsgJ3MnOyBcblwKICAgICAgICAgICAgICAgIGIub25jbGljayA9IGZ1bmN0aW9uKCkgeyBwLnZhbHVlPSdfX19USU1FX19fJzsgcC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnKSk7IH07IFxuXAogICAgICAgICAgICAgICAgcC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShiLCBwLm5leHRTaWJsaW5nKTsgXG5cCiAgICAgICAgICAgICAgICB2YXIgdCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgeyBcblwKICAgICAgICAgICAgICAgICAgICBpZiAoQ09VTlQgPT0gMSkgeyBcblwKICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0KTsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgIHAudmFsdWU9J19fX1RJTUVfX18nOyBwLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcpKTsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dpbkJ1dHRvbl8wJykuY2xpY2soKTsgfSwgMjAwKTsgXG5cCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgIENPVU5ULS07IFxuXAogICAgICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9ICciICsgTUVTU0FHRSArICInICsgQ09VTlQgKyAncyc7IFxuXAogICAgICAgICAgICAgICAgICAgIH0gXG5cCiAgICAgICAgICAgICAgICB9LCAxMDAwICk7IFxuXAogICAgICAgICAgICAgICAgaWYgKG9icykgb2JzLmRpc2Nvbm5lY3QoKTsgXG5cCiAgICAgICAgICAgICAgICByZXR1cm47IFxuXAogICAgICAgICAgICB9IFxuXAogICAgICAgIH0gXG5cCiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtdnYtYXM9XCJEVU1NWVwiXScpWzBdKSBnbygpOyBcblwKICAgICAgICBlbHNlIHsgXG5cCiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucywgb2JzKSA9PiB7IGdvKG9icyk7IH0pOyBcblwKICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7IFxuXAogICAgICAgIH0gXG5cCiAgICAiKTsKfQoKCmlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKGNyZWF0ZVNjcmlwdCgpKSwKICAgICAgICBuZXcgZnIuTmFtZUNhbGxiYWNrKCJEVU1NWSIpCiAgICApLmJ1aWxkKCkKfSBlbHNlIHsKICAgIHZhciBjYiA9IGNhbGxiYWNrcy5nZXQoMSkuZ2V0TmFtZSgpOwogICAgaWYgKGNiID09PSAiX19fVElNRV9fXyIpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidGltZXIiKS5idWlsZCgpOwogICAgfSBlbHNlIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7CiAgICB9Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -2558,20 +2394,24 @@ }, { "name": "content-length", - "value": "1564" + "value": "3752" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:18 GMT" + "value": "Wed, 19 Jun 2024 21:28:22 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -2581,14 +2421,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:18.691Z", - "time": 57, + "startedDateTime": "2024-06-19T21:28:23.519Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -2596,11 +2436,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 57 + "wait": 53 } }, { - "_id": "d8b36e9647bacb5fb5169afeae53598f", + "_id": "196330af484d2bef6f816b5f21b41a08", "_order": 0, "cache": {}, "request": { @@ -2611,161 +2451,17 @@ "name": "accept", "value": "application/json, text/plain, */*" }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" - }, { "name": "content-type", "value": "application/json" }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1615, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "name eq \"shared\"" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22shared%22" - }, - "response": { - "bodySize": 814, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 814, - "text": "{\"result\":[{\"_id\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"name\":\"shared\",\"description\":\"set the same shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdzaGFyZWRWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzaGFyZWQgYWNyb3NzIGFsbCBuZXN0ZWQgam91cm5leXMuIEl0IGNvbnRhaW5zIGFuIGluZGljYXRvciBpbiB3aGljaCBsZXZlbCBpdCB3YXMgbGFzdCBzZXQuJyk7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=2.0,resource=1.1, resource=1.1" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "814" - }, - { - "name": "date", - "value": "Thu, 04 Jan 2024 15:48:18 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 773, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-01-04T15:48:18.758Z", - "time": 62, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 62 - } - }, - { - "_id": "d03f9e8a49c3663717f6f44885052a82", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" - }, - { - "name": "content-type", - "value": "application/json" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -2775,28 +2471,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1639, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Okta Profile Normalization\"" + "value": "name eq \"MultilevelSelect\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Okta%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22MultilevelSelect%22" }, "response": { - "bodySize": 1579, + "bodySize": 4634, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1579, - "text": "{\"result\":[{\"_id\":\"6325cf19-a49b-471e-8d26-7e4df76df0e2\",\"name\":\"Okta Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJPa3RhIHJhd1Byb2ZpbGU6ICIrcmF3UHJvZmlsZSkKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5wcmVmZXJyZWRfdXNlcm5hbWUpKSk=\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 4634, + "text": "{\"result\":[{\"_id\":\"95143d29-e417-49a8-a86c-a3b4cf8fd8ed\",\"name\":\"MultilevelSelect\",\"description\":\"null\",\"script\":\"CmZ1bmN0aW9uIGdldENvdW50cmllcyhkYXRhKSB7CiAgdmFyIGMgPSBbXTsKICBkYXRhLmZvckVhY2goZT0+Yy5wdXNoKGUubmFtZSkpOwogIHJldHVybiBjOwp9CgpmdW5jdGlvbiBnZXRTdGF0ZXMoZGF0YSwgYykgewogIHZhciBzID0gW107CiAgZGF0YVtjXS5zdGF0ZXMuZm9yRWFjaChlPT5zLnB1c2goZS5uYW1lKSk7CiAgcmV0dXJuIHM7Cn0KCmZ1bmN0aW9uIGdldENpdGllcyhkYXRhLCBjLCBzKSB7CiAgdmFyIGNpID0gW107CiAgZGF0YVtjXS5zdGF0ZXNbc10uY2l0aWVzLmZvckVhY2goZT0+Y2kucHVzaChlLm5hbWUpKTsKICByZXR1cm4gY2k7Cn0KCmZ1bmN0aW9uIGdldERhdGEoKSB7CiAgdmFyIHJlcXVlc3RPcHRpb25zID0gewogICAgbWV0aG9kOiAnR0VUJywKICB9CgogIHZhciByZXF1ZXN0VVJMID0gJ2h0dHBzOi8vZ2lzdC5naXRodWJ1c2VyY29udGVudC5jb20vYXRvbWljc2FtdXJhaS80OGM4OTFlOGE3OGU4YWEzNDBjMGZmZjk2ZDQ4MDZmNC9yYXcvOTk0NjFmZjdjZDNjYTFiMGI3YTU1MTk0MjkxNTM1N2UzYTQzOGFiNS9jb3VudHJ5LXN0YXRlLWNpdHkuanNvbic7CiAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3RVUkwsIHJlcXVlc3RPcHRpb25zKS5nZXQoKTsKCiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7CiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXNwb25zZS50ZXh0KCkpOwogIH0gZWxzZSB7CiAgICBudWxsOwogIH0KfQoKKGZ1bmN0aW9uICgpIHsKICB0cnkgewogICAgdmFyIGRhdGEgPSBnZXREYXRhKCk7CiAgICB2YXIgc3RhdGVzID0gW107CiAgICB2YXIgY2l0aWVzID0gW107CiAgICB2YXIgc2VsZWN0ZWRDb3VudHJ5ID0gMDsKICAgIHZhciBzZWxlY3RlZFN0YXRlID0gMDsKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIHNlbGVjdGVkQ291bnRyeSA9IG5vZGVTdGF0ZS5nZXQoJ3NlbGVjdGVkQ291bnRyeScpP3BhcnNlSW50KG5vZGVTdGF0ZS5nZXQoJ3NlbGVjdGVkQ291bnRyeScpKTowOwogICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNlbGVjdGVkIGNvdW50cnkge30nLCBzZWxlY3RlZENvdW50cnkpOwogICAgICBzZWxlY3RlZFN0YXRlID0gbm9kZVN0YXRlLmdldCgnc2VsZWN0ZWRTdGF0ZScpP3BhcnNlSW50KG5vZGVTdGF0ZS5nZXQoJ3NlbGVjdGVkU3RhdGUnKSk6MDsKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOwogICAgICBjYWxsYmFja3NCdWlsZGVyLmNob2ljZUNhbGxiYWNrKCdTZWxlY3QgY291bnRyeScsIGdldENvdW50cmllcyhkYXRhKSwgc2VsZWN0ZWRDb3VudHJ5LCBmYWxzZSk7CiAgICAgIHN0YXRlcyA9IGdldFN0YXRlcyhkYXRhLCBzZWxlY3RlZENvdW50cnkpOwogICAgICBjYWxsYmFja3NCdWlsZGVyLmNob2ljZUNhbGxiYWNrKCdTZWxlY3Qgc3RhdGUnLCBzdGF0ZXMsIHNlbGVjdGVkU3RhdGUsIGZhbHNlKTsKICAgICAgY2l0aWVzID0gZ2V0Q2l0aWVzKGRhdGEsIHNlbGVjdGVkQ291bnRyeSwgc2VsZWN0ZWRTdGF0ZSk7CiAgICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogaGVyZSAxJyk7CiAgICAgIGNpdGllcy5mb3JFYWNoKGU9PnsKICAgICAgICBjYWxsYmFja3NCdWlsZGVyLnRleHRPdXRwdXRDYWxsYmFjaygwLCBlKTsKICAgICAgfSk7CiAgICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogaGVyZSAyJyk7CiAgICAgIGNhbGxiYWNrc0J1aWxkZXIuY29uZmlybWF0aW9uQ2FsbGJhY2soMCwgWydVcGRhdGUnLCAnQ29tcGxldGUnXSwgMCk7CiAgICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogaGVyZSAzOiB7fScsIGNhbGxiYWNrcy5nZXRDaG9pY2VDYWxsYmFja3MoKS5zaXplKCkpOwogICAgICBjYWxsYmFja3MuZ2V0Q2hvaWNlQ2FsbGJhY2tzKCkuZ2V0KDApLnNldFNlbGVjdGVkSW5kZXgoc2VsZWN0ZWRDb3VudHJ5KTsKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBoZXJlIDQnKTsKICAgICAgY2FsbGJhY2tzLmdldENob2ljZUNhbGxiYWNrcygpLmdldCgxKS5zZXRTZWxlY3RlZEluZGV4KHNlbGVjdGVkU3RhdGUpOwoKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBoZXJlIDUnKTsKICAgICAgdmFyIHNjcmlwdCA9IGAKICAgICAgICAgIGZ1bmN0aW9uIHNob3dPcmdEZXRhaWxzKCkgewogICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3cmFwcGVyJyk7CiAgICAgICAgICAgIHdyYXBwZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmViZWdpbicsICc8ZGl2PnRlc3Q8L2Rpdj4nKTsKICAgICAgICAgIH0KICAgICAgICAgIHNldFRpbWVvdXQoc2hvd09yZ0RldGFpbHMsIDEwMCk7CiAgICAgICAgICBgOwogICAgICAvLyBjYWxsYmFja3NCdWlsZGVyLnNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpOwogICAgICAvLyBjYWxsYmFja3NCdWlsZGVyLmhpZGRlblZhbHVlQ2FsbGJhY2soJ3NlbGVjdGlvbkNoYW5nZWQnLCAnZmFsc2UnKQogICAgfSBlbHNlIHsKICAgICAgc2VsZWN0ZWRDb3VudHJ5ID0gY2FsbGJhY2tzLmdldENob2ljZUNhbGxiYWNrcygpLmdldCgwKVswXTsKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBzZXQgc2VsZWN0ZWQgY291bnRyeSB7fScsIHNlbGVjdGVkQ291bnRyeSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ3NlbGVjdGVkQ291bnRyeScsIHNlbGVjdGVkQ291bnRyeSk7CiAgICAgIHNlbGVjdGVkU3RhdGUgPSBjYWxsYmFja3MuZ2V0Q2hvaWNlQ2FsbGJhY2tzKCkuZ2V0KDEpWzBdOwogICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNldCBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOwogICAgICBub2RlU3RhdGUucHV0U2hhcmVkKCdzZWxlY3RlZFN0YXRlJywgc2VsZWN0ZWRTdGF0ZSk7CiAgICAgIGlmIChjYWxsYmFja3MuZ2V0Q29uZmlybWF0aW9uQ2FsbGJhY2tzKCkuZ2V0KDApID09IDApIHsKICAgICAgICBvdXRjb21lID0gJ3VwZGF0ZSc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3V0Y29tZSA9ICdjb21wbGV0ZSc7CiAgICAgIH0KICAgIH0KICB9IGNhdGNoIChlKSB7CiAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IGVycm9yOiB7fSAnICsgZSwgZSk7CiAgICBvdXRjb21lID0gJ2Vycm9yJwogIH0KfSkoKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -2846,20 +2546,24 @@ }, { "name": "content-length", - "value": "1579" + "value": "4634" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:18 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -2869,14 +2573,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:18.829Z", - "time": 59, + "startedDateTime": "2024-06-19T21:28:23.578Z", + "time": 58, "timings": { "blocked": -1, "connect": -1, @@ -2884,11 +2588,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 59 + "wait": 58 } }, { - "_id": "528d8c0c709e13fdba334c9c6a84a810", + "_id": "1a05176e811af286cab7cd2351a67f5d", "_order": 0, "cache": {}, "request": { @@ -2900,16 +2604,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -2919,28 +2623,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1651, + "headersSize": 1698, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Normalized Profile to Managed User\"" + "value": "name eq \"GitHub Profile Normalization (VS)\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Normalized%20Profile%20to%20Managed%20User%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22GitHub%20Profile%20Normalization%20%28VS%29%22" }, "response": { - "bodySize": 3150, + "bodySize": 1570, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 3150, - "text": "{\"result\":[{\"_id\":\"58c824ae-84ed-4724-82cd-db128fc3f6c\",\"name\":\"Normalized Profile to Managed User\",\"description\":\"Converts a normalized social profile into a managed user\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgbWFuYWdlZFVzZXIgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlck5hbWUiLCBub3JtYWxpemVkUHJvZmlsZS51c2VybmFtZSkpKQoKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgicG9zdGFsQWRkcmVzcyIsIG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MpCmlmIChub3JtYWxpemVkUHJvZmlsZS5hZGRyZXNzTG9jYWxpdHkuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgiY2l0eSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NMb2NhbGl0eSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24uaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgic3RhdGVQcm92aW5jZSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24pCmlmIChub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInBvc3RhbENvZGUiLCBub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlKQppZiAobm9ybWFsaXplZFByb2ZpbGUuY291bnRyeS5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KCJjb3VudHJ5Iiwgbm9ybWFsaXplZFByb2ZpbGUuY291bnRyeSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBob25lLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInRlbGVwaG9uZU51bWJlciIsIG5vcm1hbGl6ZWRQcm9maWxlLnBob25lKQoKLy8gaWYgdGhlIGdpdmVuTmFtZSBhbmQgZmFtaWx5TmFtZSBpcyBudWxsIG9yIGVtcHR5Ci8vIHRoZW4gYWRkIGEgYm9vbGVhbiBmbGFnIHRvIHRoZSBzaGFyZWQgc3RhdGUgdG8gaW5kaWNhdGUgbmFtZXMgYXJlIG5vdCBwcmVzZW50Ci8vIHRoaXMgY291bGQgYmUgdXNlZCBlbHNld2hlcmUKLy8gZm9yIGVnLiB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gYSBzY3JpcHRlZCBkZWNpc2lvbiBub2RlIHRvIGJ5LXBhc3MgcGF0Y2hpbmcKLy8gdGhlIHVzZXIgb2JqZWN0IHdpdGggYmxhbmsgdmFsdWVzIHdoZW4gZ2l2ZW5OYW1lICBhbmQgZmFtaWx5TmFtZSBpcyBub3QgcHJlc2VudApib29sZWFuIG5vR2l2ZW5OYW1lID0gbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmFzU3RyaW5nKCk/LnRyaW0oKSkKYm9vbGVhbiBub0ZhbWlseU5hbWUgPSBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZmFtaWx5TmFtZS5hc1N0cmluZygpPy50cmltKCkpCnNoYXJlZFN0YXRlLnB1dCgibmFtZUVtcHR5T3JOdWxsIiwgbm9HaXZlbk5hbWUgJiYgbm9GYW1pbHlOYW1lKQoKcmV0dXJuIG1hbmFnZWRVc2VyCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1570, + "text": "{\"result\":[{\"_id\":\"23143919-6b78-40c3-b25e-beca19b229e0\",\"name\":\"GitHub Profile Normalization (VS)\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJHaXRIdWIgcmF3UHJvZmlsZTogIityYXdQcm9maWxlKQoKcmV0dXJuIGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZmlyc3RfbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3RfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5waWN0dXJlLmRhdGEudXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLmVtYWlsKSkp\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -2990,20 +2698,24 @@ }, { "name": "content-length", - "value": "3150" + "value": "1570" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:18 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -3013,14 +2725,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:18.893Z", - "time": 61, + "startedDateTime": "2024-06-19T21:28:23.641Z", + "time": 56, "timings": { "blocked": -1, "connect": -1, @@ -3028,11 +2740,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 61 + "wait": 56 } }, { - "_id": "1e5d993ae7967c35c67920283d9c1839", + "_id": "14aafb5a130f24e5f2a8a21ebc2a8630", "_order": 0, "cache": {}, "request": { @@ -3044,16 +2756,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -3063,28 +2775,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1613, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"mode\"" + "value": "name eq \"resetPushBomb.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22mode%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22resetPushBomb.js%22" }, "response": { - "bodySize": 2093, + "bodySize": 614, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 2093, - "text": "{\"result\":[{\"_id\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"name\":\"mode\",\"description\":\"Check if mode has already been set.\",\"script\":\"LyogbW9kZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDb2xsZWN0IG1vZGUgaWYgbm90IGFscmVhZHkgc2V0IGFuZCBzZXQgb3V0Y29tZSB0byBtb2RlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSAnc2hhcmVkIGFuZCBsZXZlbCcKICogLSAnc2hhcmVkIG9ubHknCiAqIC0gJ2xldmVsIG9ubHknCiAqIC0gJ25vbmUnCiAqLwooZnVuY3Rpb24gKCkgewogIHZhciBtb2RlID0gbm9kZVN0YXRlLmdldCgnbW9kZScpOwogIGlmIChtb2RlKSB7CiAgICBvdXRjb21lID0gbW9kZS5hc1N0cmluZygpOwogICAgdmFyIGxldmVsID0gbm9kZVN0YXRlLmdldCgnbGV2ZWwnKS5hc0ludGVnZXIoKSArIDE7CiAgICBsb2dnZXIuZXJyb3IoJ21vZGU6IG1vZGU9JyArIG1vZGUuYXNTdHJpbmcoKSArICcsIGxldmVsPScgKyBsZXZlbCk7CiAgICBzaGFyZWRTdGF0ZS5wdXQoJ2xldmVsJywgbGV2ZWwpOwogIH0KICBlbHNlIHsKICAgIHZhciBjaG9pY2VzID0gWydzaGFyZWQgYW5kIGxldmVsJywgJ3NoYXJlZCBvbmx5JywgJ2xldmVsIG9ubHknLCAnbm9uZSddOwogIAogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DaG9pY2VDYWxsYmFjawogICAgKQoKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKFsKICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soJ0Nob29zZSB0ZXN0IG1vZGUnLCBjaG9pY2VzLCAwLCBmYWxzZSkKICAgICAgXSkuYnVpbGQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBjaG9pY2UgPSBwYXJzZUludChjYWxsYmFja3MuZ2V0KDApLmdldFNlbGVjdGVkSW5kZXhlcygpWzBdKTsKICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgnbW9kZScsIGNob2ljZXNbY2hvaWNlXSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2xldmVsJywgMCk7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKGNob2ljZXNbY2hvaWNlXSkuYnVpbGQoKTsKICAgIH0KICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 614, + "text": "{\"result\":[{\"_id\":\"e387c5d7-ceb8-459e-87e6-d09eca512385\",\"name\":\"resetPushBomb.js\",\"description\":\"null\",\"script\":\"dmFyIF9pZCA9IHNoYXJlZFN0YXRlLmdldCgiX2lkIik7CnZhciBhdHRyaWJ1dGUgPSAiZnItYXR0ci1zdHIyIjsKCmlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoX2lkLCBhdHRyaWJ1dGUsWyIiXSk7CgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -3134,20 +2850,24 @@ }, { "name": "content-length", - "value": "2093" + "value": "614" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:18 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -3157,14 +2877,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:18.960Z", - "time": 63, + "startedDateTime": "2024-06-19T21:28:23.701Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -3172,11 +2892,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 63 + "wait": 52 } }, { - "_id": "97e365ada37a9af61562e96f36b8cb1a", + "_id": "52794446c8f3a5d849b464d74d5ec188", "_order": 0, "cache": {}, "request": { @@ -3188,16 +2908,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -3207,28 +2927,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1631, + "headersSize": 1673, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"OIDC Claims Script\"" + "value": "name eq \"selectFavFactor.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OIDC%20Claims%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22selectFavFactor.js%22" }, "response": { - "bodySize": 41550, + "bodySize": 4348, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 41550, - "text": "{\"result\":[{\"_id\":\"36863ffb-40ec-48b9-94b1-9a99f71cc3b5\",\"name\":\"OIDC Claims Script\",\"description\":\"Default global script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 4348, + "text": "{\"result\":[{\"_id\":\"3c9d3b4a-b38c-4c77-a8d7-4b937e48f62f\",\"name\":\"selectFavFactor.js\",\"description\":\"null\",\"script\":\"Ly8gRGlzcGxheXMgTUZBIG9wdGlvbnMgZmlsdGVyZWQgYnkgdXNlcnMgcHJlZmVyZW5jZXMKdmFyIHdlYmF1dGhuRGV2aWNlUHJvZmlsZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHNoYXJlZFN0YXRlLmdldCgiX2lkIiksICJ3ZWJhdXRobkRldmljZVByb2ZpbGVzIikudG9TdHJpbmcoKTsKdmFyIHB1c2hEZXZpY2VQcm9maWxlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKSwgInB1c2hEZXZpY2VQcm9maWxlcyIpLnRvU3RyaW5nKCk7Cgp2YXIgaGFzV2ViQXV0aE49ZmFsc2U7CnZhciBoYXNQdXNoPWZhbHNlOwoKaWYod2ViYXV0aG5EZXZpY2VQcm9maWxlcy5sZW5ndGg+MikgewogICAgaGFzV2ViQXV0aE4gPSB0cnVlOwp9CmlmKHB1c2hEZXZpY2VQcm9maWxlcy5sZW5ndGg+MikgewogICAgaGFzUHVzaCA9IHRydWU7Cn0KCgptZmFzID0geyAKICAgICAgICAgICJQdXNoIjogIlB1c2ggbm90aWZpY2F0aW9uIHZpYSBhdXRoZW50aWNhdG9yIGFwcCIsIAogICAgICAgICAiV2ViQXV0aE4iOiAiU2VjdXJpdHkgS2V5L1RvdWNoSUQvV2luZG93c0hlbGxvL1Bhc3NLZXkiLCAKICAgICAgICAgICAvLyJRUiIgOiAiUVIgQ29kZSBDYXNjYWRlZCBDb250ZXh0IChXZWJBdXRoTikiLAogICAgICAgICAgICJTTVMiIDogIlNNUyBDYXNjYWRlZCBDb250ZXh0IChXZWJBdXRoTikiLAogICAgICAgICAgLy8iRW1haWwiIDogIkUtbWFpbCBDYXNjYWRlZCBDb250ZXh0IChXZWJBdXRoTikiLAogICAgICAgICAgLy8gIlNNU01MIiA6ICJTTVMgTWFnaWMgTGluayIKICAgICAgIH07CgoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ2hvaWNlQ2FsbGJhY2sKKQoKdmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKCi8vIEFkZCBlbnRyeSB0byBtdWx0aSB2YWx1ZQp2YXIgY2hvaWNlcyA9IFtdOwppZihoYXNQdXNoPT10cnVlKXsKICAgICAgY2hvaWNlcy5wdXNoKG1mYXMuUHVzaCk7Cn0KaWYoaGFzV2ViQXV0aE49PXRydWUpewogICAgICBjaG9pY2VzLnB1c2gobWZhcy5XZWJBdXRoTik7CiAgICAgIC8vY2hvaWNlcy5wdXNoKG1mYXMuUVIpOwogICAgICAvL2Nob2ljZXMucHVzaChtZmFzLlNNUyk7CiAgICAvL2Nob2ljZXMucHVzaChtZmFzLkVtYWlsKTsKCn0KLy9jaG9pY2VzLnB1c2gobWZhcy5TTVNNTCk7CmZ1bmN0aW9uIHNldEN1c3RvbUF0dHJWYWx1ZSAoY3VzdG9tQXR0ck5hbWUsY3VzdG9tQXR0clZhbHVlKQp7CiAgdmFyIGlkID0gc2hhcmVkU3RhdGUuZ2V0KCdfaWQnKTsKICB2YXIgZnJJZG1DdXN0b21BdHRyaWJ1dGVzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShpZCwgJ2ZyLWlkbS1jdXN0b20tYXR0cnMnKTsKICBpZiAoZnJJZG1DdXN0b21BdHRyaWJ1dGVzKQogIHsKICAgIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QgPSBKU09OLnBhcnNlKFN0cmluZyhmcklkbUN1c3RvbUF0dHJpYnV0ZXMudG9BcnJheSgpWzBdKSk7CiAgICBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdID0gY3VzdG9tQXR0clZhbHVlOwogICAgdmFyIGpzb25fc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0KTsKICAgIGlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoaWQsICJmci1pZG0tY3VzdG9tLWF0dHJzIixbanNvbl9zdHJpbmddKTsKICB9Cn0KCgovL0NhbGxiYWNrIHRvIHByZXNlbnQgYW5kIHJldHJpZXZlIHNlbGVjdGVkIG9yZyBhbmQgc2V0Ci8vc2VsZWN0ZWQgdGhlbWUgZm9yIHNldHRpbmcgaW4gdGhlIG5leHQgbm9kZQoKCgp3aXRoIChmcikgewogICAgICBpZiAoY2hvaWNlcy5sZW5ndGggPCAyKSBhY3Rpb24gPSBBY3Rpb24uZ29UbyhvdXRjb21lKS5idWlsZCgpOwogICAgZWxzZSB7CiAgICAgICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soCiAgICAgICAgICAgICAgICAgICAgICAiU3Ryb25nIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkLiBQbGVhc2Ugc2VsZWN0IHlvdXIgcHJlZmVycmVkIGZvcm0gb2Ygc3Ryb25nIGF1dGhlbnRpY2F0aW9uIGZyb20gdGhlIGxpc3QgYmVsb3cuIiwKICAgICAgICAgICAgICAgICAgY2hvaWNlcywKICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgZmFsc2UKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApLndpdGhTdGFnZShKU09OLnN0cmluZ2lmeSh7ICJDaG9pY2VDYWxsYmFjayI6IFsgeyAiZGlzcGxheVR5cGUiOiJyYWRpbyIgfSBdIH0pKS53aXRoSGVhZGVyKCJDaG9vc2UgTWV0aG9kIikuYnVpbGQoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBzZWxlY3RlZEluZGV4ID0gY2FsbGJhY2tzLmdldCgwKS5nZXRTZWxlY3RlZEluZGV4ZXMoKVswXTsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkTmFtZTsKICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1mYXMpIGlmIChjaG9pY2VzW3NlbGVjdGVkSW5kZXhdID09IG1mYXNba2V5XSkgc2VsZWN0ZWROYW1lID0ga2V5OwogICAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoInNlbGVjdGVkTmFtZSIsIHNlbGVjdGVkTmFtZSk7CiAgICAgICAgICAgICAgc2V0Q3VzdG9tQXR0clZhbHVlICgiY3VzdG9tX2Zhdm91cml0ZUZhY3RvciIsc2VsZWN0ZWROYW1lKTsKICAgICAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8oc2VsZWN0ZWROYW1lKS5idWlsZCgpOwogICAgICAgIH0gICAKICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -3276,18 +3000,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "content-length", + "value": "4348" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:18 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -3295,20 +3027,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:19.037Z", - "time": 64, + "startedDateTime": "2024-06-19T21:28:23.757Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -3316,11 +3044,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 64 + "wait": 52 } }, { - "_id": "edf9e88ab9f0d37cfef8cabce82b3b72", + "_id": "193c3c2054d3f1715bf9afab6efb5428", "_order": 0, "cache": {}, "request": { @@ -3332,16 +3060,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -3351,28 +3079,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1640, + "headersSize": 1674, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Itsme Profile Normalization\"" + "value": "name eq \"CheckIfValidSession\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Itsme%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22CheckIfValidSession%22" }, "response": { - "bodySize": 1530, + "bodySize": 616, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1530, - "text": "{\"result\":[{\"_id\":\"3d97c436-42c0-4dd0-a571-ea6f34f752b3\",\"name\":\"Itsme Profile Normalization\",\"description\":\"Normalizes raw profile data from Itsme\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKaW1wb3J0IG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUKCkpzb25WYWx1ZSBtYW5hZ2VkVXNlciA9IGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuc3ViKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmdpdmVuX25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5mYW1pbHlfbmFtZSksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQpyZXR1cm4gbWFuYWdlZFVzZXI=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 616, + "text": "{\"result\":[{\"_id\":\"3b7c5bbe-5a80-4ba1-8918-6a3e2ef891c4\",\"name\":\"CheckIfValidSession\",\"description\":\"Check if a valid session already exists\",\"script\":\"aWYgKHR5cGVvZiBleGlzdGluZ1Nlc3Npb24gIT09ICd1bmRlZmluZWQnKQp7CiAgb3V0Y29tZSA9ICJoYXNTZXNzaW9uIjsKfQplbHNlCnsKICBvdXRjb21lID0gIm5vU2Vzc2lvbiI7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -3422,20 +3154,24 @@ }, { "name": "content-length", - "value": "1530" + "value": "616" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:19 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -3445,14 +3181,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:19.109Z", - "time": 61, + "startedDateTime": "2024-06-19T21:28:23.813Z", + "time": 50, "timings": { "blocked": -1, "connect": -1, @@ -3460,11 +3196,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 61 + "wait": 50 } }, { - "_id": "4bc9120f25a9243849c85a20a60e3c33", + "_id": "3061b032426771626e9bedd19872123e", "_order": 0, "cache": {}, "request": { @@ -3476,16 +3212,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -3495,28 +3231,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1682, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"ForgeRock Internal: OAuth2 Access Token Modification Script\"" + "value": "name eq \"FrodoTestScript1\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22ForgeRock%20Internal%3A%20OAuth2%20Access%20Token%20Modification%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript1%22" }, "response": { - "bodySize": 921, + "bodySize": 1131, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 921, - "text": "{\"result\":[{\"_id\":\"c234ba0b-58a1-4cfd-9567-09edde980745\",\"name\":\"ForgeRock Internal: OAuth2 Access Token Modification Script\",\"description\":\"Internal token modification script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwovLyBTY3JpcHQgaXMgaW50ZW50aW9uYWxseSBlbXB0eQo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":1433147666269,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1131, + "text": "{\"result\":[{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -3566,20 +3306,24 @@ }, { "name": "content-length", - "value": "921" + "value": "1131" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:19 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -3589,14 +3333,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 773, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:19.185Z", - "time": 73, + "startedDateTime": "2024-06-19T21:28:23.866Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -3604,11 +3348,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 73 + "wait": 51 } }, { - "_id": "343bec8da4c8829e19f0445d0c0c21af", + "_id": "48a4e51decbcd68b9b96980ee4cf93b3", "_order": 0, "cache": {}, "request": { @@ -3620,16 +3364,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -3639,28 +3383,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1643, + "headersSize": 1683, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"OAuth2 Validate Scope Script\"" + "value": "name eq \"Demo - Journey Chooser\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20Validate%20Scope%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Demo%20-%20Journey%20Chooser%22" }, "response": { - "bodySize": 4642, + "bodySize": 6552, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 4642, - "text": "{\"result\":[{\"_id\":\"25e6c06d-cf70-473b-bd28-26931edc476b\",\"name\":\"OAuth2 Validate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Validation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgdmFsaWRhdGVzIHRoZSByZXF1ZXN0ZWQgc2NvcGVzIGFnYWluc3QgdGhlIGFsbG93ZWQgc2NvcGVzLgogKiBJZiBubyBzY29wZXMgYXJlIHJlcXVlc3RlZCwgZGVmYXVsdCBzY29wZXMgYXJlIGFzc3VtZWQuCiAqIFRoZSBzY3JpcHQgaGFzIGZvdXIgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgZGlmZmVyZW50IE9BdXRoMiBmbG93czoKICogICAgICAtIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlCiAqICAgICAgLSB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUKICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHJlcXVlc3RlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgVGhlIHNldCBvZiByZXF1ZXN0ZWQgc2NvcGVzLgogKiBkZWZhdWx0U2NvcGVzIC0gU2V0PFN0cmluZz4gKDEpLgogKiAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBkZWZhdWx0IHNjb3Blcy4KICogYWxsb3dlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgYWxsb3dlZCBzY29wZXMuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIGRlYnVnIGxvZ2dlciBpbnN0YW5jZToKICogICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgICAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9BVVRIMl9WQUxJREFURV9TQ09QRQogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKgogKiBUaHJvd3MgSW52YWxpZFNjb3BlRXhjZXB0aW9uOgogKiAgICAgIC0gaWYgdGhlcmUgYXJlIG5vIHNjb3BlcyByZXF1ZXN0ZWQgYW5kIGRlZmF1bHQgc2NvcGVzIGFyZSBlbXB0eQogKiAgICAgIC0gaWYgYSByZXF1ZXN0ZWQgc2NvcGUgaXMgbm90IGFsbG93ZWQKICoKICogUmV0dXJuIC0gYSBTZXQ8U3RyaW5nPiBvZiB2YWxpZGF0ZWQgc2NvcGVzICgxKS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICgyKSBDbGllbnQgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svaHR0cC9DbGllbnQuaHRtbC4KICovCgovKioKICogRGVmYXVsdCB2YWxpZGF0ZSBzY29wZSBzY3JpcHQuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZVNjb3BlcyAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkU2NvcGVFeGNlcHRpb24KICAgICk7CgogICAgdmFyIHNjb3BlczsKICAgIGlmIChyZXF1ZXN0ZWRTY29wZXMgPT0gbnVsbCB8fCByZXF1ZXN0ZWRTY29wZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgc2NvcGVzID0gZGVmYXVsdFNjb3BlczsKICAgIH0gZWxzZSB7CiAgICAgICAgc2NvcGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KGFsbG93ZWRTY29wZXMpOwogICAgICAgIHNjb3Blcy5yZXRhaW5BbGwocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICBpZiAocmVxdWVzdGVkU2NvcGVzLnNpemUoKSA+IHNjb3Blcy5zaXplKCkpIHsKICAgICAgICAgICAgdmFyIGludmFsaWRTY29wZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICAgICAgaW52YWxpZFNjb3Blcy5yZW1vdmVBbGwoYWxsb3dlZFNjb3Blcyk7CiAgICAgICAgICAgIHRocm93IG5ldyBmckphdmEuSW52YWxpZFNjb3BlRXhjZXB0aW9uKCdVbmtub3duL2ludmFsaWQgc2NvcGUocyknKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKHNjb3BlcyA9PSBudWxsIHx8IHNjb3Blcy5pc0VtcHR5KCkpIHsKICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRTY29wZUV4Y2VwdGlvbignTm8gc2NvcGUgcmVxdWVzdGVkIGFuZCBubyBkZWZhdWx0IHNjb3BlIGNvbmZpZ3VyZWQnKTsKICAgIH0KICAgIHJldHVybiBzY29wZXM7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlICgpIHsKICAgIHJldHVybiB2YWxpZGF0ZVNjb3BlcygpOwp9CgpmdW5jdGlvbiB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_VALIDATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 6552, + "text": "{\"result\":[{\"_id\":\"320012d2-ad02-401a-871e-3973db81a3d7\",\"name\":\"Demo - Journey Chooser\",\"description\":\"null\",\"script\":\"Ly8gRGlzcGxheSBjaG9pY2Ugb2Ygam91cm5leXMKLy8gU2VlIGh0dHBzOi8vY2RuLWljb25zLXBuZy5mbGF0aWNvbi5jb20gZm9yIGV4YW1wbGUgaWNvbnMKdmFyIGpvdXJuZXlzID0gWwogIC8veyAibmFtZSI6ICJMZWdhY3kgTG9naW4iLCAidXJsIjogIkxvZ2luIiwgImljb24iOiAiMTI4LzYzMTcvNjMxNzU3Ny5wbmciIH0sCiAgeyAibmFtZSI6ICJMb2dpbiIsICJ1cmwiOiAiUGFzc3dvcmRsZXNzLU1hc3RlciIsICJpY29uIjogIjEyOC85Njk5Lzk2OTk1ODIucG5nIiB9LAogIC8veyAibmFtZSI6ICJSZWdpc3RlciIsICJ1cmwiOiAiRGVtby1Qd2RsZXNzLU5ldy1Vc2VyICIsICJpY29uIjogIjEyOC8xNjk4LzE2OTg1NzIucG5nIiB9LAogIC8veyAibmFtZSI6ICJRUiBMb2dpbiIsICJ1cmwiOiAiRGVtby1Qd2RMZXNzLVFSIiwgImljb24iOiAiMTI4LzEyODcvMTI4NzU1OC5wbmciIH0sCiAgLy97ICJuYW1lIjogIlNNUyBXZWJBdXRoTiIsICJ1cmwiOiAiRGVtby1Qd2RMZXNzLVNNUyIsICJpY29uIjogIjEyOC8yNzA0LzI3MDQxNjcucG5nIiB9LAogIC8veyAibmFtZSI6ICJTTVMgTWFnaWMgTGluayIsICJ1cmwiOiAiRGVtby1Qd2RMZXNzLVNNUy1TaW1wbGUiLCAiaWNvbiI6ICIxMjgvMjcwNC8yNzA0MTY3LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiSUQgUHJvb2ZpbmciLCAidXJsIjogIkRlbW8tT25GaWRvIiwgImljb24iOiAiMTI4LzYwNjEvNjA2MTM5Ni5wbmciIH0sCiAgLy97ICJuYW1lIjogIlJlZ2lzdGVyK0lEVi1MaXZlIiwgInVybCI6ICJEZW1vLVNlbGZSZWdpc3RyYXRpb24iLCAiaWNvbiI6ICIxMjgvMTY5OC8xNjk4NTcyLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUmVnaXN0ZXIrSURWLVNhbmRib3giLCAidXJsIjogIkRlbW8tU2VsZlJlZ2lzdHJhdGlvblNhbmRib3giLCAiaWNvbiI6ICIxMjgvMTY5OC8xNjk4NTcyLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUmVtZW1iZXIgVXNlcm5hbWVzIiwgInVybCI6ICJEZW1vLVJlbWVtYmVyTXlVc2VybmFtZSIsICJpY29uIjogIjEyOC84ODkvODg5NjY4LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUGVlciBSZWNvdmVyeSIsICJ1cmwiOiAiRGVtby1SZWNvdmVyeSIsICJpY29uIjogIjEyOC8yNTk3LzI1OTcxNDMucG5nIiB9LAogIC8veyAibmFtZSI6ICJGaW5nZXJwcmludEpTIiwgInVybCI6ICJGaW5nZXJwcmludEpTIiwgImljb24iOiAiLzEyOC84MzM3LzgzMzc3MDIucG5nIiB9LAogIC8veyAibmFtZSI6ICJGaW5nZXJwcmludEpTIFBybyIsICJ1cmwiOiAiRmluZ2VycHJpbnRQcm9KUyIsICJpY29uIjogIi8xMjgvODMzNy84MzM3NzAyLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUmVzZXQgUGFzc3dvcmQiLCAidXJsIjogIlJlc2V0UGFzc3dvcmQiLCAiaWNvbiI6ICIxMjgvMTAwMC8xMDAwOTMzLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiU29jaWFsIExvZ2luIiwgInVybCI6ICJEZW1vLVNvY2lhbCIsICJpY29uIjogIjEyOC8zMDAvMzAwMjIxLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiU0FNTCIsICJ1cmwiOiAiRGVtby1TQU1MIiwgImljb24iOiAiMTI4LzI5LzI5NjExLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiTUZBLU9BVEgiLCAidXJsIjogIkRlbW8tTUZBLU9BVEgiLCAiaWNvbiI6ICIxMjgvNzQ3Ni83NDc2Nzk2LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiTUZBLVB1c2giLCAidXJsIjogIkRlbW8tTUZBLVB1c2giLCAiaWNvbiI6ICIxMjgvNzQ3Ni83NDc2Nzk2LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUGFzc3dvcmRsZXNzIiwgInVybCI6ICJEZW1vLU1GQS1QYXNzd2RsZXNzIiwgImljb24iOiAiMTI4LzI3NjcvMjc2NzE0Ni5wbmciIH0sICAKICAvL3sgIm5hbWUiOiAiTUZBLUNob2ljZSIsICJ1cmwiOiAiRGVtby1NRkEtQ2hvaWNlIiwgImljb24iOiAiMTI4Lzc0NzYvNzQ3Njc5Ni5wbmciIH0sCiAgLy97ICJuYW1lIjogIlByb2dyZXNzaXZlIFByb2ZpbGUiLCAidXJsIjogIlByb2dyZXNzaXZlUHJvZmlsZSIsICJpY29uIjogIjEyOC83MzE5LzczMTk1MDkucG5nIiB9LAogIC8veyAibmFtZSI6ICJBZ2UtQmFzZWQgTG9naW4iLCAidXJsIjogIkRlbW8tQWdlQmFzZWRMb2dpbiIsICJpY29uIjogIjEyOC8zMDgxLzMwODE5NjkucG5nIiB9LAogIC8veyAibmFtZSI6ICJNdWx0aSBCcmFuZCIsICJ1cmwiOiAiRGVtby1NdWx0aUJyYW5kIiwgImljb24iOiAiMTI4LzY5ODAvNjk4MDczNS5wbmciIH0sCiAgLy97ICJuYW1lIjogIkFudGkgRnJhdWQiLCAidXJsIjogIjEtRGVtby1DaG9vc2VyLUF1dG9BY2Nlc3MiLCAiaWNvbiI6ICIxMjgvMjg2Ny8yODY3NzI1LnBuZyIgfSwKICAKICAKXQoKCnZhciBJQ09OUyA9ICJodHRwczovL2Nkbi1pY29ucy1wbmcuZmxhdGljb24uY29tLyIKdmFyIFNJWkUgPSAiMjQiOwoKdmFyIGNzcyA9ICIqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfSAgLmNvbHVtbiB7IGZsb2F0OiBsZWZ0OyB3aWR0aDogNTAlOyBwYWRkaW5nOiAxMHB4OyB0ZXh0LWFsaWduOmxlZnQ7IH0gLnJvdzphZnRlciB7IGNvbnRlbnQ6IFwiXCI7IGRpc3BsYXk6IHRhYmxlOyBjbGVhcjogYm90aDsgfSAuYm94IHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgIGhlaWdodDogNjBweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBwYWRkaW5nOiAwIDEwcHg7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsgY29sb3I6IHJnYigwLCAwLCAwKTsgYm9yZGVyLWNvbG9yOiByZ2IoMCwgMCwgMCk7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDoxcHg7IG1hcmdpbi1ib3R0b206IDJweDsgIH0gLmljb24geyBoZWlnaHQ6IDMycHg7IG1pbi13aWR0aDogMzJweDsgbWFyZ2luLXJpZ2h0OiAxMHB4OyB9IGE6aG92ZXIgeyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0iOwoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKKQoKCndpdGgoZnIpIHsKICAgIHZhciBzY3JpcHQ7CiAgICBmdW5jdGlvbiBjcmVhdGVTY3JpcHQoKSB7CiAgICAgICAgICB2YXIgbGVmdCA9ICIiOwogICAgICAgIHZhciByaWdodCA9ICIiOwogICAgICAgICAgZm9yIChpIGluIGpvdXJuZXlzKSB7CiAgICAgICAgICAgIHZhciBlbGVtID0gJzxhIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tYmxvY2sgYm94XCIgaHJlZj1cImh0dHBzOi8vb3BlbmFtLXZvbGtlci1kZW1vLmZvcmdlYmxvY2tzLmNvbS9hbS9YVUk/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPScgKyBqb3VybmV5c1tpXVsidXJsIl0gKyAnXCI+PGltZyBjbGFzcz1cImljb25cIiBzcmM9XCInICsgSUNPTlMgKyBqb3VybmV5c1tpXVsiaWNvbiJdICsgJ1wiPjxzcGFuPicgKyBqb3VybmV5c1tpXVsibmFtZSJdICsgJzwvc3Bhbj48L2E+JzsKICAgICAgICAgICAgICBpZiAoaSAlIDIgPT0gMCkgCiAgICAgICAgICAgICAgICAgIGxlZnQgKz0gZWxlbTsKICAgICAgICAgICAgICBlbHNlIAogICAgICAgICAgICAgICAgICByaWdodCArPSBlbGVtOwogICAgICAgIH0KICAgICAgICByZXR1cm4gU3RyaW5nKCJkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSkuaW5uZXJIVE1MID0gJyIgKyBjc3MgKyAiJyBcblwKICAgICAgICAgICAgdmFyIGNob29zZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgXG5cCiAgICAgICAgICAgIGNob29zZXIuaWQgPSAnY2hvb3Nlcic7IFxuXAogICAgICAgICAgICB2YXIgY2IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FsbGJhY2tzUGFuZWwnKTsgXG5cCiAgICAgICAgICAgIGNiLmluc2VydEJlZm9yZShjaG9vc2VyLCBjYi5maXJzdENoaWxkKTsgXG5cCiAgICAgICAgICAgIGNob29zZXIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJyb3dcIj48ZGl2IGNsYXNzPVwiY29sdW1uXCI+IitsZWZ0KyI8L2Rpdj48ZGl2IGNsYXNzPVwiY29sdW1uXCI+IityaWdodCsiPC9kaXY+PC9kaXY+JyBcblwKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignYnV0dG9uW3R5cGU9c3VibWl0XScpKSB7IFxuXAogICAgICAgICAgICAgICAgdmFyIGIgPSBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvblt0eXBlPXN1Ym1pdF0nKTsgXG5cCiAgICAgICAgICAgICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbigpIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nob29zZXInKS5yZW1vdmUoKTsgIH0pOyBcblwKICAgICAgICAgICAgfSBcblwKICAgICAgICAiKTsKICAgIH0gIAogIAogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBBY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IFNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhjcmVhdGVTY3JpcHQoKSkKICAgICAgICApLmJ1aWxkKCkKICAgIH0gZWxzZSBhY3Rpb24gPSBBY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -3710,20 +3458,24 @@ }, { "name": "content-length", - "value": "4642" + "value": "6552" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:19 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -3733,14 +3485,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:19.267Z", - "time": 61, + "startedDateTime": "2024-06-19T21:28:23.921Z", + "time": 54, "timings": { "blocked": -1, "connect": -1, @@ -3748,11 +3500,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 61 + "wait": 54 } }, { - "_id": "cdb6bf47cf4e63bb698595aa7700365d", + "_id": "bc60b63002c1eecace0496edd0cf81dd", "_order": 0, "cache": {}, "request": { @@ -3764,16 +3516,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -3783,28 +3535,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1642, + "headersSize": 1674, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Twitter Profile Normalization\"" + "value": "name eq \"wks-DisplayUserName\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Twitter%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22wks-DisplayUserName%22" }, "response": { - "bodySize": 1378, + "bodySize": 3288, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1378, - "text": "{\"result\":[{\"_id\":\"8e298710-b55e-4085-a464-88a375a4004b\",\"name\":\"Twitter Profile Normalization\",\"description\":\"Normalizes raw profile data from Twitter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkX3N0ciksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnByb2ZpbGVfaW1hZ2VfdXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnNjcmVlbl9uYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 3288, + "text": "{\"result\":[{\"_id\":\"0ab1dc10-a54f-476f-ad07-2a04915cd443\",\"name\":\"wks-DisplayUserName\",\"description\":\"DisplayUserName\",\"script\":\"LyogRGlzcGxheSBVc2VybmFtZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBEaXNwbGF5IHRoZSB1c2VybmFtZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICB0cnkgewogICAgdmFyIG91dGNvbWUgPSAndHJ1ZSc7CiAgICB2YXIgdXNlcm5hbWUgPSBub2RlU3RhdGUuZ2V0KCd1c2VybmFtZScpLmFzU3RyaW5nKCk7CgogICAgLy8gU3BlY2lmeSB0aGUgbWVzc2FnZSB5b3Ugd2FudCB0byBkaXNwbGF5LiBZb3UgbWF5IHVzZSBIVE1MIGZvciBmb3JtYXR0aW5nLiBBdm9pZCBsaW5lIGJyZWFrcyEgVXNlIDxicj4gaW5zdGVhZC4KICAgIHZhciBtZXNzYWdlID0gJ1lvdXIgRW5jb3JlIHVzZXJuYW1lIGlzOjxoMyBzdHlsZT0iY29sb3I6IzI5NDhBNzsiPicrdXNlcm5hbWUrJzwvaDM+JzsKCiAgICB2YXIgYW5jaG9yID0gJ2FuY2hvci0nK2dlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKTsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4gXAogICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiBcCiAgICAgIGZ1bmN0aW9uIChlKSB7XG4gXAogICAgICAgIHZhciBtZXNzYWdlID0gZS5maXJzdEVsZW1lbnRDaGlsZDtcbiBcCiAgICAgICAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIithbmNob3IrIicpIHtcbiBcCiAgICAgICAgICBtZXNzYWdlLmlubmVySFRNTCA9ICciK21lc3NhZ2UrIic7XG4gXAogICAgICAgIH1cbiBcCiAgICAgIH0pIjsKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgICAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKICAgICkKICAgIGlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICAgIG5ldyBmci5UZXh0T3V0cHV0Q2FsbGJhY2soCiAgICAgICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgICAgICBhbmNob3IKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9CiAgICBlbHNlIHsKICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgIH0KICB9IGNhdGNoIChlcnJvcikgewogICAgbG9nZ2VyLmVycm9yKCdFcnJvcjogJyArIGVycm9yKTsKICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2Vycm9yJywgZXJyb3IubWVzc2FnZSk7CiAgfQoKICAgLyoKICAgICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAgICogCiAgICAqIEV4YW1wbGU6CiAgICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICAqLwogIGZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbihjKSB7CiAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkqMTB8MDsKICAgICAgICAgIHZhciB2ID0gcjsKICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDEwKTsKICAgICAgfSk7CiAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -3854,20 +3610,24 @@ }, { "name": "content-length", - "value": "1378" + "value": "3288" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:19 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -3877,14 +3637,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:19.340Z", - "time": 60, + "startedDateTime": "2024-06-19T21:28:23.979Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -3892,11 +3652,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 60 + "wait": 53 } }, { - "_id": "3137a01335cedaf6a0d12265a00efda2", + "_id": "cdfe982399a02cf5e2c34a763a4473ef", "_order": 0, "cache": {}, "request": { @@ -3908,16 +3668,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -3927,28 +3687,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1646, + "headersSize": 1680, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Saml2 IDP Adapter Always Auth\"" + "value": "name eq \"Get esv admin token\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Saml2%20IDP%20Adapter%20Always%20Auth%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Get%20esv%20admin%20token%22" }, "response": { - "bodySize": 7583, + "bodySize": 844, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 7583, - "text": "{\"result\":[{\"_id\":\"85523e71-2d77-4577-b078-6f9674cc54e2\",\"name\":\"Saml2 IDP Adapter Always Auth\",\"description\":\"Always redirect browser pre-auth\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4yL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL1NBTUwySWRlbnRpdHlQcm92aWRlckFkYXB0ZXIuaHRtbAogKiBOb3RlIHRoYXQgdGhlIGluaXRpYWxpemUgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIHNjcmlwdHMuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzLiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMgZm9yIHRoZSB2YXJpYWJsZXMgYXZhaWxhYmxlIHRvIGl0LgogKgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZwogKiAgICAgRW50aXR5IElEIGZvciB0aGUgaG9zdGVkIElEUAogKiByZWFsbSAtIFN0cmluZwogKiAgICAgUmVhbG0gb2YgdGhlIGhvc3RlZCBJRFAKICogaWRwQWRhcHRlclNjcmlwdEhlbHBlciAtIElkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEpCiAqICAgICBBbiBpbnN0YW5jZSBvZiBJZHBBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIHJlcXVlc3QgLSBIdHRwU2VydmxldFJlcXVlc3QgKDIpCiAqICAgICBTZXJ2bGV0IHJlcXVlc3Qgb2JqZWN0CiAqIHJlc3BvbnNlIC0gSHR0cFNlcnZsZXRSZXNwb25zZSAoMykKICogICAgIFNlcnZsZXQgcmVzcG9uc2Ugb2JqZWN0CiAqIGF1dGhuUmVxdWVzdCAtIEF1dGhuUmVxdWVzdCAoNCkKICogICAgIFRoZSBvcmlnaW5hbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHNlbnQgZnJvbSBTUAogKiByZXFJZCAtIFN0cmluZwogKiAgICAgVGhlIGlkIHRvIHVzZSBmb3IgY29udGludWF0aW9uIG9mIHByb2Nlc3NpbmcgaWYgdGhlIGFkYXB0ZXIgcmVkaXJlY3RzCiAqIHJlcyAtIFJlc3BvbnNlICg1KQogKiAgICAgVGhlIFNBTUwgUmVzcG9uc2UKICogc2Vzc2lvbiAtIFNTT1Rva2VuICg2KQogKiAgICAgVGhlIHNpbmdsZSBzaWduLW9uIHNlc3Npb24uIFRoZSByZWZlcmVuY2UgdHlwZSBvZiB0aGlzIGlzIE9iamVjdCBhbmQgd291bGQgbmVlZCB0byBiZSBjYXN0ZWQgdG8gU1NPVG9rZW4uCiAqIHJlbGF5U3RhdGUgLSBTdHJpbmcKICogICAgIFRoZSByZWxheVN0YXRlIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSByZWRpcmVjdAogKiBmYXVsdENvZGUgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBjb2RlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgU0FNTCByZXNwb25zZQogKiBmYXVsdERldGFpbCAtIFN0cmluZwogKiAgICAgdGhlIGZhdWx0IGRldGFpbCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogbG9nZ2VyIC0gTG9nZ2VyIGluc3RhbmNlCiAqICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLjxzY3JpcHQgbmFtZT4KICoKICogVGhyb3dzIFNBTUwyRXhjZXB0aW9uICg3KToKICogICAgIGZvciBhbnkgZXhjZXB0aW9ucyBvY2N1cnJpbmcgaW4gdGhlIGFkYXB0ZXIuIFRoZSBmZWRlcmF0aW9uIHByb2Nlc3Mgd2lsbCBjb250aW51ZQogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBpZHBBZGFwdGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL1Jlc3BvbnNlLmh0bWwuCiAqICg2KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvY29tbW9uL1NBTUwyRXhjZXB0aW9uLmh0bWwuCiAqLwoKLyoKICogVGVtcGxhdGUvZGVmYXVsdCBzY3JpcHQgZm9yIFNBTUwyIElEUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTaW5nbGVTaWduT24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNpbmdsZVNpZ25PbiIpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZUF1dGhlbnRpY2F0aW9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlQXV0aGVudGljYXRpb24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZUF1dGhlbnRpY2F0aW9uIik7CiAgICByZXR1cm4gdHJ1ZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZFJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBoYXBwZW5lZCBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTZW5kUmVzcG9uc2UgKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNlbmRSZXNwb25zZSIpOwogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IGF1dGhuUmVxdWVzdDogIithdXRoblJlcXVlc3QpOwogICAgICByZXNwb25zZS5zZW5kUmVkaXJlY3QoImh0dHBzOi8vaWRjLnNjaGV1YmVyLmlvL2FtL1hVSS8/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPURpc3BhdGNoZXImRm9yY2VBdXRoPXRydWUmZ290bz0iK3JlbGF5U3RhdGUpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpZ25SZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICByZXMKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2lnblJlc3BvbnNlICgpIHsKICAgICAgbG9nZ2VyLmVycm9yKCJDaGljYWdvOiBwcmVTaWduUmVzcG9uc2UiKTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZEZhaWx1cmVSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGZhdWx0Q29kZQogKiAgICAgZmF1bHREZXRhaWwKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2VuZEZhaWx1cmVSZXNwb25zZSAoKSB7CiAgICAgIGxvZ2dlci5lcnJvcigiQ2hpY2FnbzogcHJlU2VuZEZhaWx1cmVSZXNwb25zZSIpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 844, + "text": "{\"result\":[{\"_id\":\"9674f7d1-7448-4544-879e-91587bb04f46\",\"name\":\"Get esv admin token\",\"description\":\"Get esc admin token\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwp2YXIgYWRtaW5Ub2tlbiA9ICBzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi5hZG1pbi50b2tlbiIpOwpzaGFyZWRTdGF0ZS5wdXQoJ2FkbWluVG9rZW4nLCBhZG1pblRva2VuKTsKb3V0Y29tZSA9ICJ0cnVlIjs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -3998,20 +3762,24 @@ }, { "name": "content-length", - "value": "7583" + "value": "844" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:19 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -4021,14 +3789,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:19.405Z", - "time": 58, + "startedDateTime": "2024-06-19T21:28:24.036Z", + "time": 56, "timings": { "blocked": -1, "connect": -1, @@ -4036,11 +3804,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 58 + "wait": 56 } }, { - "_id": "383132fe28b74d67e177962008c53d13", + "_id": "de7aeea45f0d5f5bc11451a836edabc8", "_order": 0, "cache": {}, "request": { @@ -4052,16 +3820,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -4071,28 +3839,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1614, + "headersSize": 1663, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"level\"" + "value": "name eq \"FR-Debug\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22level%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FR-Debug%22" }, "response": { - "bodySize": 834, + "bodySize": 16721, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 834, - "text": "{\"result\":[{\"_id\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"name\":\"level\",\"description\":\"set per level shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdsZXZlbCcgKyBsZXZlbCArICdWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzZXQgYXQgZWFjaCBsZXZlbCBvZiB0aGUgbmVzdGVkIGpvdXJuZXlzLiBJdCBjb250YWlucyBhbiBpbmRpY2F0b3IgaW4gd2hpY2ggbGV2ZWwgaXQgd2FzIHNldC4nKTsKfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 16721, + "text": "{\"result\":[{\"_id\":\"c0413dae-fdd1-45b7-9302-61d6ae02b194\",\"name\":\"FR-Debug\",\"description\":\"Debug to show AM States\",\"script\":\"LyogRElTQ0xBSU1FUjogVGhpcyBjb2RlIGlzIHByb3ZpZGVkIHRvIHlvdSBleHByZXNzbHkgYXMgYW4gZXhhbXBsZSAgKOKAnFNhbXBsZSBDb2Rl4oCdKS4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBpbmRpdmlkdWFsIHJlY2lwaWVudCB1c2VyLCBpbiBoaXMvaGVyIHNvbGUgZGlzY3JldGlvbiwgdG8gZGlsaWdlbmNlIHN1Y2ggU2FtcGxlIENvZGUgZm9yIGFjY3VyYWN5LCBjb21wbGV0ZW5lc3MsIHNlY3VyaXR5LCBhbmQgZmluYWwgZGV0ZXJtaW5hdGlvbiBmb3IgYXBwcm9wcmlhdGVuZXNzIG9mIHVzZS4gCiAqIEFOWSBTQU1QTEUgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiDigJxBUyBJU+KAnSBJUyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gRk9SR0VST0NLIEFORCBJVFMgTElDRU5TT1JTIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUywgIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCwgT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTICBPRiBNRVJDSEFOVEFCSUxJVFksIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogKiBGT1JHRVJPQ0sgU0hBTEwgTk9UIEhBVkUgQU5ZIExJQUJJTElUWSBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBBTlkgVVNFLCBJTVBMRU1FTlRBVElPTiwgSU5URUdSQVRJT04sIE9SIENPTkZJR1VSQVRJT04gT0YgQU5ZIFNBTVBMRSBDT0RFIElOIEFOWSBQUk9EVUNUSU9OIEVOVklST05NRU5UIE9SIEZPUiBBTlkgQ09NTUVSQ0lBTCBERVBMT1lNRU5UKFMpLgogKgogKiBTY3JpcHQgTmFtZTogQU0gSm91cm5leSBUZW1wbGF0ZQogKgogKiBBdXRob3JzOiBzZUBmb3JnZXJvY2suY29tCiAqIAogKiBUaGlzIHNjcmlwdCBzaG93cyBhIGRlZmF1bHQgdGVtcGxhdGUgb24gaG93IHlvdXIgU2NyaXB0aW5nIERlY2lzaW9uIE5vZGUgc2NyaXB0cyBzaG91bGQgYmUgd3JpdHRlbi4KICogSXQgc2hvd3MgeW91IGhvdyB0byB3b3JrIHdpdGggc2hhcmVkU3RhdGUsIHRyYW5zaWVudFN0YXRlLCBzZWN1cmVTdGF0ZS4KICogVGhpcyBpcyBhIGdyZWF0IGRlYnVnIHNjcmlwdCB0byB1c2UgaW4gYW5kIG9mIGl0c2VsZiBhcyBpdCB3aWxsIGRpc3BsYXkgYWxsIHRocmVlIHN0YXRlcyBtZW50aW9uZWQgYWJvdmUgaW4gYSBmb3JtYXR0ZWQgdGFibGUKICogCiAqIFRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCBub3Qgd29yayBwcm9wZXJseSBhcyBpcy4gCiAqIEl0IHJlcXVpcmVzIHNvbWUgbm9kZXMgdGhhdCBzZXQgYXQgbGVhc3Qgc2hhcmVkU3RhdGUgYmVmb3JlIGl0IGNhbiBvcGVyYXRlLgogKiBGb3IgZXhhbXBsZSwgc2V0IGEgcGFnZSBub2RlIHdpdGggUGxhdGZvcm0gVXNlcm5hbWUgYW5kIFBsYXRmb3JtIFBhc3N3b3JkIG5vZGVzCiAqIAogKiBUaGlzIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKKi8KCi8vIERvIGV2ZXJ5dGhpbmcgaW4gYSBzZWxmLWludm9raW5nIGZ1bmN0aW9uIGFuZCBkbyBub3Qgd3JpdGUgY29kZSBvdXRzaWRlIG9mIGEgZnVuY3Rpb24gb3IgeW91IHdpbGwgcGF5IGRlYXJseS4gCi8vIFRoaXMgaXMgYmVjYXVzZSBvZiB0b3AtbGV2ZWwgc2NvcGluZy93aGl0ZWxpc3RpbmcvZXRjIGlzc3VlcyB0aGF0IGdpdmUgeW91ICd1bmRlZmluZWQnIGVycm9ycy4KKGZ1bmN0aW9uICgpIHsKICBsb2dnZXIubWVzc2FnZSgiU2NyaXB0OiBzdGFydCIpOyAvLyBiZWdpbmcgb2Ygc2NyaXB0IG1haW4KICBvdXRjb21lID0gInRydWUiOyAvLyA8LSBmaWxsIGluIGRlZmF1bHQgb3V0Y29tZSBoZXJlIGFuZCBpdCBzaG91bGQgbWF0Y2ggYSAiU2NyaXB0IE91dGNvbWVzIiBzZXR0aW5nIG9uIHRoaXMgbm9kZSBpdHNlbGYKCiAgLy8gYnVpbGQgb3V0cHV0IGh0bWwgdGFibGUgdGhhdCB3aWxsIGJlIHNlbnQgYmFjayB0byBicm93c2VyCiAgdmFyIG91dHB1dCA9IGNyZWF0ZUh0bWwoKTsKCiAgLy8gaXNzdWUgY2FsbGJhY2sgdG8gYnJvd3NlciBhZnRlciBvdXRwdXQgaHRtbCBpcyBidWlsdCBmcm9tIGNyZWF0ZUh0bWwoKSBmdW5jdGlvbgogIGRpc3BsYXlNZXNzYWdlKG91dHB1dCk7CiAgCiAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmlwdDogZW5kIik7IC8vIGVuZCBvZiBzY3JpcHQgbWFpbgoKICAvKgogICogUHV0IGZ1bmN0aW9ucyBiZWxvdyBoZXJlCiAgKi8KICBmdW5jdGlvbiBjcmVhdGVIdG1sKCkgewogICAgICB2YXIgaHRtbCA9ICI8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkXCI+IjsKICAgICAgaHRtbCArPSAiPHRoZWFkIGNsYXNzPVwidGhlYWQtZGFya1wiPjx0cj48dGggY2xhc3M9XCJweC0xIHB5LTFcIiBjb2xzcGFuPVwiMlwiPlNoYXJlZCBTdGF0ZSBWYXJpYWJsZXMgKHNoYXJlZFN0YXRlLmdldCk8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAvLyBnZXQgYWxsIHRoZSBrZXlzIGluIG5vZGVTdGF0ZQogICAgICB2YXIgaXRlcmF0b3IgPSBub2RlU3RhdGUua2V5cygpLml0ZXJhdG9yKCk7CiAgICAgIHZhciBzdGF0ZUtleXMgPSBbXTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgc3RhdGVLZXlzLnB1c2goaXRlcmF0b3IubmV4dCgpLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICAgIHN0YXRlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZUtleSkgewogICAgICAgIGlmIChzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpIAogICAgICAgICAgICAmJiBzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpLnRvU3RyaW5nKCkgIT09ICJudWxsIgogICAgICAgICAgICAmJiBzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpLnRvU3RyaW5nKCkgIT09ICIiCiAgICAgICAgICAgICYmICIiK3N0YXRlS2V5ICE9PSAib2JqZWN0QXR0cmlidXRlcyIgIC8vIGdvaW5nIHRvIHB1bGwgb3V0IG9iamVjdEF0dHJpYnV0ZXMgbGF0ZXIKICAgICAgICAgICAgJiYgIiIrc3RhdGVLZXkgIT09ICJwYWdlTm9kZUNhbGxiYWNrcyIpIC8vcGFnZU5vZGVDYWxsYmFja3MgYXJlIGludGVybmFsIHRvIHRoZSBQYWdlIE5vZGUgYW5kIG5vdCBuZWVkZWQvdXNlZCAgCiAgICAgICAgewogICAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBzdGF0ZUtleSArICI8L3RkPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpICsgIjwvdGQ+PC90cj4iOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGh0bWwgKz0gIjwvdGFibGU+IjsKCiAgICAgIGh0bWwgKz0gIjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWRcIj4iOwogICAgICAKICAgICAgaHRtbCArPSAiPHRoZWFkIGNsYXNzPVwidGhlYWQtZGFya1wiPjx0cj48dGggY2xhc3M9XCJweC0xIHB5LTFcIiBjb2xzcGFuPVwiMlwiPlRyYW5zaWVudCBTdGF0ZSBWYXJpYWJsZXMgKHRyYW5zaWVudFN0YXRlLmdldCk8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAvLyBnZXQgYWxsIHRoZSBrZXlzIGluIG5vZGVTdGF0ZQogICAgICB2YXIgaXRlcmF0b3IgPSBub2RlU3RhdGUua2V5cygpLml0ZXJhdG9yKCk7CiAgICAgIHZhciBzdGF0ZUtleXMgPSBbXTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgc3RhdGVLZXlzLnB1c2goaXRlcmF0b3IubmV4dCgpLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICAgIHN0YXRlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZUtleSkgewogICAgICAgIGlmICh0cmFuc2llbnRTdGF0ZS5nZXQoc3RhdGVLZXkpIAogICAgICAgICAgICAmJiB0cmFuc2llbnRTdGF0ZS5nZXQoc3RhdGVLZXkpLnRvU3RyaW5nKCkgIT09ICJudWxsIiAKICAgICAgICAgICAgJiYgdHJhbnNpZW50U3RhdGUuZ2V0KHN0YXRlS2V5KS50b1N0cmluZygpICE9PSAiIgogICAgICAgICAgICAmJiAiIitzdGF0ZUtleSAhPT0gIm9iamVjdEF0dHJpYnV0ZXMiKSAKICAgICAgICB7CiAgICAgICAgICBodG1sICs9ICI8dHI+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIHN0YXRlS2V5ICsgIjwvdGQ+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIHRyYW5zaWVudFN0YXRlLmdldChzdGF0ZUtleSkgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwoKICAgICAgaHRtbCArPSAiPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPiI7CiAgICAgIC8vIEJ1aWxkIHRoZSB0YWJsZSBvZiBvYmplY3RBdHRyaWJ1dGVzIGluIHNoYXJlZFN0YXRlCiAgICAgIGlmIChzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKSkKICAgICAgeyAgIAogICAgICAgIGh0bWwgKz0gIjx0aGVhZCBjbGFzcz1cInRoZWFkLWRhcmtcIj48dHI+PHRoIGNsYXNzPVwicHgtMSBweS0xXCIgY29sc3Bhbj1cIjJcIj5TaGFyZWQgT2JqZWN0IEF0dHJpYnV0ZXMgKHNoYXJlZFN0YXRlLmdldCk8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAgIHZhciBlbnRyaWVzID0gc2hhcmVkU3RhdGUuZ2V0KCdvYmplY3RBdHRyaWJ1dGVzJykuZW50cnlTZXQoKS50b0FycmF5KCk7CiAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkgeyAvLyBzaG93aW5nIGhvdyB0byB1c2UgZW50cnlTZXQoKS4gQ2FuIHVzZSBrZXlTZXQoKS4KICAgICAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBlbnRyeS5nZXRLZXkoKSArICI8L3RkPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBlbnRyeS5nZXRWYWx1ZSgpICsgIjwvdGQ+PC90cj4iOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGh0bWwgKz0gIjx0cj48dGQgY29sc3Bhbj1cIjJcIj5FTVBUWTwvdGQ+PC90cj4iOwogICAgICB9CiAgICAgIGh0bWwgKz0gIjwvdGFibGU+IjsKCiAgICAgIGh0bWwgKz0gIjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWRcIj4iOwogICAgICAvLyBCdWlsZCB0aGUgdGFibGUgb2Ygb2JqZWN0QXR0cmlidXRlcyBpbiB0cmFuc2llbnRTdGF0ZQogICAgICBpZiAodHJhbnNpZW50U3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikpCiAgICAgIHsKICAgICAgICBodG1sICs9ICI8dGhlYWQgY2xhc3M9XCJ0aGVhZC1kYXJrXCI+PHRyPjx0aCBjbGFzcz1cInB4LTEgcHktMVwiIGNvbHNwYW49XCIyXCI+VHJhbnNpZW50IE9iamVjdCBBdHRyaWJ1dGVzICh0cmFuc2llbnRTdGF0ZS5nZXQpPC90aD48L3RyPjwvdGhlYWQ+IjsKICAgICAgICB2YXIga2V5cyA9IHRyYW5zaWVudFN0YXRlLmdldCgnb2JqZWN0QXR0cmlidXRlcycpLmtleVNldCgpLnRvQXJyYXkoKTsKICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyAvLyBzaG93aW5nIGhvdyB0byB1c2Uga2V5U2V0KCkuIENhbiB1c2UgZW50cnlTZXQoKS4KICAgICAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBrZXkgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgdHJhbnNpZW50U3RhdGUuZ2V0KCdvYmplY3RBdHRyaWJ1dGVzJykuZ2V0KGtleSkgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPkVNUFRZPC90ZD48L3RyPiI7CiAgICAgIH0KICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwoKICAgICAgaHRtbCArPSAiPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPiI7CiAgICAgIGh0bWwgKz0gIjx0aGVhZCBjbGFzcz1cInRoZWFkLWRhcmtcIj48dHI+PHRoIGNsYXNzPVwicHgtMSBweS0xXCIgY29sc3Bhbj1cIjJcIj5ub2RlU3RhdGUuZ2V0ICh0cmFuc2llbnRTdGF0ZSwgc2VjdXJlU3RhdGUsIHNoYXJlZFN0YXRlKTwvdGg+PC90cj48L3RoZWFkPiI7CiAgICAgIC8vIGdldCBhbGwgdGhlIGtleXMgaW4gbm9kZVN0YXRlCiAgICAgIHZhciBpdGVyYXRvciA9IG5vZGVTdGF0ZS5rZXlzKCkuaXRlcmF0b3IoKTsKICAgICAgdmFyIHN0YXRlS2V5cyA9IFtdOwogICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7CiAgICAgICAgICBzdGF0ZUtleXMucHVzaChpdGVyYXRvci5uZXh0KCkudG9TdHJpbmcoKSk7CiAgICAgIH0KICAgICAgc3RhdGVLZXlzLmZvckVhY2goZnVuY3Rpb24gKHN0YXRlS2V5KSB7CiAgICAgICAgaWYgKG5vZGVTdGF0ZS5nZXQoc3RhdGVLZXkpIAogICAgICAgICAgICAmJiBub2RlU3RhdGUuZ2V0KHN0YXRlS2V5KS50b1N0cmluZygpICE9PSAibnVsbCIKICAgICAgICAgICAgJiYgbm9kZVN0YXRlLmdldChzdGF0ZUtleSkudG9TdHJpbmcoKSAhPT0gIiIKICAgICAgICAgICAgJiYgIiIrc3RhdGVLZXkgIT09ICJwYWdlTm9kZUNhbGxiYWNrcyIpIC8vcGFnZU5vZGVDYWxsYmFja3MgYXJlIGludGVybmFsIHRvIHRoZSBQYWdlIE5vZGUgYW5kIG5vdCBuZWVkZWQvdXNlZCAgCgogICAgICAgIHsKICAgICAgICAgIGh0bWwgKz0gIjx0cj48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgc3RhdGVLZXkgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgbm9kZVN0YXRlLmdldChzdGF0ZUtleSkgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwoKCiAgICAgIGh0bWwgKz0gIjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWRcIj4iOwogICAgICAvLyBsb29raW5nIGZvciBhIHdheSB0byBidWlsZCB0aGlzIEFNIFVzZXIgUHJvZmlsZSBsaXN0IGR5bmFtaWNhbGx5CiAgICAgIHZhciBvYmpBTUF0dHJzID0gWwogICAgICAgICJ1aWQiLAogICAgICAgICJjbiIsCiAgICAgICAgImluZXRVc2VyU3RhdHVzIiwKICAgICAgICAiZ2l2ZW5OYW1lIiwKICAgICAgICAic24iLAogICAgICAgICJtYWlsIiwKICAgICAgICAiZGVzY3JpcHRpb24iLAogICAgICAgICJ0ZWxlcGhvbmVOdW1iZXIiLAogICAgICAgICJzdHJlZXQiLAogICAgICAgICJsIiwKICAgICAgICAicG9zdGFsQ29kZSIsCiAgICAgICAgImNvIiwKICAgICAgICAic3QiLAogICAgICAgICJkaXNwbGF5TmFtZSIsCiAgICAgICAgImZyLWF0dHItaXN0cjEiLAogICAgICAgICJmci1hdHRyLWlzdHIyIiwKICAgICAgICAiZnItYXR0ci1pc3RyMyIsCiAgICAgICAgImZyLWF0dHItaXN0cjQiLAogICAgICAgICJmci1hdHRyLWlzdHI1IiwKICAgICAgICAiZnItYXR0ci1zdHIxIiwKICAgICAgICAiZnItYXR0ci1zdHIyIiwKICAgICAgICAiZnItYXR0ci1zdHIzIiwKICAgICAgICAiZnItYXR0ci1zdHI0IiwKICAgICAgICAiZnItYXR0ci1zdHI1IiwKICAgICAgICAiZnItYXR0ci1pbXVsdGkxIiwKICAgICAgICAiZnItYXR0ci1pbXVsdGkyIiwKICAgICAgICAiZnItYXR0ci1pbXVsdGkzIiwKICAgICAgICAiZnItYXR0ci1pbXVsdGk0IiwKICAgICAgICAiZnItYXR0ci1pbXVsdGk1IiwKICAgICAgICAiZnItYXR0ci1tdWx0aTEiLAogICAgICAgICJmci1hdHRyLW11bHRpMiIsCiAgICAgICAgImZyLWF0dHItbXVsdGkzIiwKICAgICAgICAiZnItYXR0ci1tdWx0aTQiLAogICAgICAgICJmci1hdHRyLW11bHRpNSIsCiAgICAgICAgImZyLWF0dHItaWRhdGUxIiwKICAgICAgICAiZnItYXR0ci1pZGF0ZTIiLAogICAgICAgICJmci1hdHRyLWlkYXRlMyIsCiAgICAgICAgImZyLWF0dHItaWRhdGU0IiwKICAgICAgICAiZnItYXR0ci1pZGF0ZTUiLAogICAgICAgICJmci1hdHRyLWRhdGUxIiwKICAgICAgICAiZnItYXR0ci1kYXRlMiIsCiAgICAgICAgImZyLWF0dHItZGF0ZTMiLAogICAgICAgICJmci1hdHRyLWRhdGU0IiwKICAgICAgICAiZnItYXR0ci1kYXRlNSIsCiAgICAgICAgImZyLWF0dHItaWludDEiLAogICAgICAgICJmci1hdHRyLWlpbnQyIiwKICAgICAgICAiZnItYXR0ci1paW50MyIsCiAgICAgICAgImZyLWF0dHItaWludDQiLAogICAgICAgICJmci1hdHRyLWlpbnQ1IiwKICAgICAgICAiZnItYXR0ci1pbnQxIiwKICAgICAgICAiZnItYXR0ci1pbnQyIiwKICAgICAgICAiZnItYXR0ci1pbnQzIiwKICAgICAgICAiZnItYXR0ci1pbnQ0IiwKICAgICAgICAiZnItYXR0ci1pbnQ1IgogICAgICBdOyAgCgogICAgICAvLyBCdWlsZCB0aGUgdGFibGUgb2YgaWRSZXBvc2l0b3J5IGJpbmRpbmcKICAgICAgdmFyIGF0dHJzMjsKICAgICAgaWYgKHNoYXJlZFN0YXRlLmdldCgiX2lkIikgJiYgaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpLCAidWlkIikpCiAgICAgIHsKICAgICAgICBodG1sICs9ICI8dGhlYWQgY2xhc3M9XCJ0aGVhZC1kYXJrXCI+PHRyPjx0aCBjbGFzcz1cInB4LTEgcHktMVwiIGNvbHNwYW49XCIyXCI+aWRSZXBvc2l0b3J5IEFNIFVzZXIgUHJvZmlsZTwvdGg+PC90cj48L3RoZWFkPiI7ICAgICAgICAKICAgICAgICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwogICAgICAgIG9iakFNQXR0cnMuZm9yRWFjaChmdW5jdGlvbiAoYXR0cikgewogICAgICAgICAgYXR0cnMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCBhdHRyKTsgIAogICAgICAgICAgaWYgKGF0dHJzICYmICIiK2F0dHJzICE9PSAibnVsbCIgJiYgIiIrYXR0cnMgIT09ICIiICYmICIiK2F0dHJzLnNpemUoKT4wKXsKICAgICAgICAgICAgaWYgKGF0dHJzLnNpemUoKT09PTEpewogICAgICAgICAgICAgICAgYXR0cnMgPSBzaW5nbGVWYWx1ZShhdHRycyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBodG1sICs9ICI8dHI+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIGF0dHIgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgYXR0cnMgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgICB9CiAgICAgICAgfSk7ICAgICAgCiAgICAgIH0KICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwogICAgICAKICAgICAgaHRtbCArPSAiPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPiI7CiAgICAgIGh0bWwgKz0gIjx0aGVhZCBjbGFzcz1cInRoZWFkLWRhcmtcIj48dHI+PHRoIGNsYXNzPVwicHgtMSBweS0xXCIgY29sc3Bhbj1cIjJcIj5SZXF1ZXN0IEhlYWRlcnM8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAvL2h0bWwgKz0gIjx0cj48dGQgY29sc3Bhbj1cIjJcIj4iICsgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSArICI8L3RkPjwvdHI+IjsKICAgICAgdmFyIHJIZWFkZXJzID0gU3RyaW5nKHJlcXVlc3RIZWFkZXJzKS5zcGxpdCgnXSwgJykubWFwKGZ1bmN0aW9uIChoZWFkZXIpewogICAgICAgIHJldHVybiBoZWFkZXIuc3BsaXQoJz0nKVswXS5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpOyAKICAgICAgfSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICBySGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChoZWFkZXJOYW1lKSB7CiAgICAgICAgdmFyIGhlYWRlciA9IHJlcXVlc3RIZWFkZXJzLmdldChoZWFkZXJOYW1lKTsKICAgICAgICBodG1sICs9ICI8dHI+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIGhlYWRlck5hbWUgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgaGVhZGVyLmdldCgwKSArICI8L3RkPjwvdHI+IjsKICAgICAgfSk7ICAgIAogICAgCiAgICBodG1sICs9ICI8L3RhYmxlPiI7CiAgICAgIAogICAgcmV0dXJuIGh0bWw7CiAgfQogIAogIC8vYnVpbGRzIHRoZSBodG1sIHRvIGRpc3BsYXkgdGhlIG1lc3NhZ2UgaW4gdGhlIGJyb3dzZXIgb24gdGhlIGNhbGxiYWNrCiAgLy91c2UgdmlldyBzb3VyY2UgaW4gYnJvd3NlciBhbmQgbG9vayBmb3IgY2xhc3M9ImNhbGxiYWNrLWNvbXBvbmVudCIgdG8gc2VlIGh0bWwgcmVzcG9uc2UKICBmdW5jdGlvbiBkaXNwbGF5TWVzc2FnZShtZXNzYWdlKSB7CiAgICAgIHZhciBhbmNob3IgPSAiYW5jaG9yLSIuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CiAgICAgIHZhciBoYWxpZ24gPSAibGVmdCI7CiAgICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4iLmNvbmNhdCgKICAgICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAgICAgICAgICAgICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAgICAgICAgICAgICAgICAgIiAgdmFyIG1lc3NhZ2UgPSBlLmZpcnN0RWxlbWVudENoaWxkO1xuIikuY29uY2F0KAogICAgICAgICAgICAgICAgICAgICAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwiXCI7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgbWVzc2FnZS5zdHlsZSA9IFwiXCI7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIG1lc3NhZ2UuYWxpZ24gPSBcIiIpLmNvbmNhdChoYWxpZ24pLmNvbmNhdCgiXCI7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBtZXNzYWdlLmlubmVySFRNTCA9ICciKS5jb25jYXQobWVzc2FnZSkuY29uY2F0KCInO1xuIikuY29uY2F0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICB9XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSkiKQogICAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suVGV4dE91dHB1dENhbGxiYWNrLAogICAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICAgICkKICAgICAgaWYgKG1lc3NhZ2UubGVuZ3RoICYmIGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKAogICAgICAgICAgICAgIG5ldyBmci5UZXh0T3V0cHV0Q2FsbGJhY2soCiAgICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgICAgYW5jaG9yCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkKICAgICAgICAgICkuYnVpbGQoKQogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgICAgfQogIH0KCiAgLyoKICAgKiBHZW5lcmF0ZSBhIHRva2VuIGluIHRoZSBkZXNpcmVkIGZvcm1hdC4gQWxsICd4JyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHJhbmRvbSBudW1iZXIgMC05LgogICAqIFRoaXMgaXMgbmVlZGVkIHRvIGhhdmUgYSB1bmlxdWUgZGl2KGFuY2hvci14KSBvbiB0aGUgaHRtbCBjYWxsYmFjayB0aGF0IHdlIGNhbiBwb3B1bGF0ZSBkYXRhCiAgICogRXhhbXBsZToKICAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICovCiAgZnVuY3Rpb24gZ2VuZXJhdGVOdW1lcmljVG9rZW4oZm9ybWF0KSB7CiAgICAgIHJldHVybiBmb3JtYXQucmVwbGFjZSgvW3hdL2csIGZ1bmN0aW9uIChjKSB7CiAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxMCB8IDA7CiAgICAgICAgICB2YXIgdiA9IHI7CiAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICAgIH0pOwogIH0KCiAgLy8gZ2V0IGEgc2luZ2xlVmFsdWUgZnJvbSBhIEhhc2hTZXQKICBmdW5jdGlvbiBzaW5nbGVWYWx1ZSh4KQogIHsKICAgIGlmKHguc2l6ZSgpPjApCiAgICAgIHsKICAgICAgICByZXR1cm4geC5pdGVyYXRvcigpLm5leHQoKTsKICAgICAgfQogICAgICAKICAgIHJldHVybiAiIjsKICAgIAogIH0KCn0oKSk7IC8vIHNlbGYtaW52b2tpbmcgZnVuY3Rpb24=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -4141,21 +3913,25 @@ "value": "application/json;charset=UTF-8" }, { - "name": "content-length", - "value": "834" + "name": "transfer-encoding", + "value": "chunked" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:19 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -4165,14 +3941,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 773, + "headersSize": 800, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:19.471Z", - "time": 63, + "startedDateTime": "2024-06-19T21:28:24.097Z", + "time": 54, "timings": { "blocked": -1, "connect": -1, @@ -4180,11 +3956,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 63 + "wait": 54 } }, { - "_id": "f92c54772e92b8bdd08e7cbef5aa4627", + "_id": "5e9aaa7940499ae88cb8e5c5b2d83090", "_order": 0, "cache": {}, "request": { @@ -4196,16 +3972,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -4215,28 +3991,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1665, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"OAuth2 Authorize Endpoint Data Provider Script\"" + "value": "name eq \"FrodoTestScript4\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20Authorize%20Endpoint%20Data%20Provider%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript4%22" }, "response": { - "bodySize": 4978, + "bodySize": 1131, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 4978, - "text": "{\"result\":[{\"_id\":\"3f93ef6e-e54a-4393-aba1-f322656db28a\",\"name\":\"OAuth2 Authorize Endpoint Data Provider Script\",\"description\":\"Default global script for OAuth2 Authorize Endpoint Data Provider\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcmV0dXJuIGFkZGl0aW9uYWwgZGF0YSB3aGVuIGF1dGhvcml6ZSByZXF1ZXN0IGlzIGNhbGxlZC4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LgogKgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cwogKgogKiBsb2dnZXIgLSBEZWJ1ZyAoMykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSAiU2NyaXB0ZWRBdXRob3JpemVFbmRwb2ludERhdGFQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FVVEhPUklaRV9FTkRQT0lOVF9EQVRBX1BST1ZJREVSLgogKgogKiBzY3JpcHROYW1lIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHNjcmlwdAogKgogKiBSZXR1cm4gLSBhIE1hcDxTdHJpbmcsIFN0cmluZz4gb2YgYWRkaXRpb25hbCBkYXRhICg0KS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgzKSBEZWJ1ZyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBhdXRob3JpemUgZW5kcG9pbnQgZGF0YSBwcm92aWRlciBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCi8qIEVYQU1QTEUKdmFyIG1hcCA9IG5ldyBqYXZhLnV0aWwuSGFzaE1hcCgpOwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGEoKSB7CgogICAgLy9JZiBjb25zdGFudCBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkCiAgICBtYXAucHV0KCJoZWxsbyIsICJ3b3JsZCIpOwoKICAgIC8vSWYgc29tZSBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkIGZyb20gdGhpcmQgcGFydHkgc2VydmljZQogICAgYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCk7CgogICAgLy9JZiB0aGVyZSBpcyBhIG5lZWQgdG8gcmV0dXJuIHNvbWUgdXNlciBzZXNzaW9uIGRhdGEKICAgIGFkZEFkZGl0aW9uYWxEYXRhRnJvbVNlc3Npb25Qcm9wZXJ0aWVzKCkKCiAgICByZXR1cm4gbWFwOwp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCkgewogIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLlNlcnZlckV4Y2VwdGlvbgogICAgKTsKICB0cnkgewogICAgICAgIC8vT2J0YWluIGFkZGl0aW9uYWwgZGF0YSBieSBwZXJmb3JtaW5nIGEgUkVTVCBjYWxsIHRvIGFuIGV4dGVybmFsIHNlcnZpY2UKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgICAgIHJlcXVlc3Quc2V0VXJpKCJodHRwczovL3RoaXJkLnBhcnR5LmFwcC9oZWxsby5qc3AiKTsKICAgICAgICByZXF1ZXN0LnNldE1ldGhvZCgiUE9TVCIpOwogICAgICAgIC8vcmVxdWVzdC5zZXRFbnRpdHkoImZvbz1iYXImaGVsbG89d29ybGQiKTsKICAgICAgICByZXF1ZXN0LnNldEVudGl0eShqc29uKG9iamVjdCgKICAgICAgICAgICAgICAgICAgICBmaWVsZCgiZm9vIiwgImJhciIpKSkpOwogICAgICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXRPclRocm93KCk7CiAgICAgICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwogICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICBtYXAucHV0KCJzb21lS2V5IixyZXN1bHQuZ2V0KCJzb21lS2V5IikpOwogIH0gY2F0Y2ggKGVycikgewogICAgIHRocm93IG5ldyBmckphdmEuU2VydmVyRXhjZXB0aW9uKGVycik7CiAgfQp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tU2Vzc2lvblByb3BlcnRpZXMoKSB7CiAgLy9BZGQgYWRkaXRpb25hbCBkYXRhIGZyb20gc2Vzc2lvbiBwcm9wZXJ0eSB2YWx1ZXMKICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeyAvLyBzZXNzaW9uIGlzIG5vdCBhdmFpbGFibGUgZm9yIHJlc291cmNlIG93bmVyIHBhc3N3b3JkIGNyZWRlbnRpYWxzIGdyYW50CiAgICAgbWFwLnB1dCgiaXBBZGRyZXNzIiwgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgiSG9zdCIpKQogICB9Cn07CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKSk7Cn07CgphZGRBZGRpdGlvbmFsRGF0YSgpOwoqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1131, + "text": "{\"result\":[{\"_id\":\"10643e95-873a-4ec0-b713-a7f56760d179\",\"name\":\"FrodoTestScript4\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -4286,20 +4066,24 @@ }, { "name": "content-length", - "value": "4978" + "value": "1131" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:19 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -4309,14 +4093,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:19.545Z", - "time": 60, + "startedDateTime": "2024-06-19T21:28:24.159Z", + "time": 55, "timings": { "blocked": -1, "connect": -1, @@ -4324,11 +4108,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 60 + "wait": 55 } }, { - "_id": "b053354d3e96e3e2828f1986afdf05c8", + "_id": "abae260899074b15f700a18919a6f82f", "_order": 0, "cache": {}, "request": { @@ -4340,16 +4124,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -4359,28 +4143,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1641, + "headersSize": 1666, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"WeChat Profile Normalization\"" + "value": "name eq \"pushBomb.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22WeChat%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22pushBomb.js%22" }, "response": { - "bodySize": 1312, + "bodySize": 2069, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1312, - "text": "{\"result\":[{\"_id\":\"472534ec-a25f-468d-a606-3fb1935190df\",\"name\":\"WeChat Profile Normalization\",\"description\":\"Normalizes raw profile data from WeChat\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLm9wZW5pZCksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uaWNrbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5oZWFkaW1ndXJsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLm5pY2tuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 2069, + "text": "{\"result\":[{\"_id\":\"0414eed8-abfd-43bb-94b5-c841a8ba2c98\",\"name\":\"pushBomb.js\",\"description\":\"null\",\"script\":\"dmFyIGF0dHJpYnV0ZSA9ICJmci1hdHRyLXN0cjIiOwp2YXIgdGhyZXNob2xkID0gMjsKb3V0Y29tZSA9ICJkZWZhdWx0IjsKdmFyIG5vdyA9IG5ldyBEYXRlKCkgIAp2YXIgZXBvY2ggPSBNYXRoLnJvdW5kKG5vdy5nZXRUaW1lKCkgLyAxMDAwKTsKdmFyIGVwb2NoQ3VycmVudE1pbnV0ZSA9IE1hdGgucm91bmQoZXBvY2gvNjApOwoKdmFyIHVzZXJBdHRyOwp2YXIgX2lkID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKdmFyIGVwb2NoQXR0ck1pbnV0ZT0wOwp2YXIgYXR0ZW1wdENvdW50PTE7Cgp2YXIgdXNlclByZWZlcmVuY2VzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShfaWQsICJmci1pZG0tcHJlZmVyZW5jZXMiKS50b1N0cmluZygpOwoKaWYodXNlclByZWZlcmVuY2VzLmluZGV4T2YoIlwiY3VzdG9tX3B1c2hcIjp0cnVlIikgPiAtMSkKewogICAgb3V0Y29tZSA9ICJzdXNwZW5kZWQiOwp9CmVsc2UKewogIHZhciB1c2VyQXR0clJhdyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoX2lkLCBhdHRyaWJ1dGUpOwogIGlmICh1c2VyQXR0clJhdyAmJiB1c2VyQXR0clJhdy5pdGVyYXRvcigpLmhhc05leHQoKSkgewogICAgICB1c2VyQXR0ciA9IEpTT04ucGFyc2UodXNlckF0dHJSYXcuaXRlcmF0b3IoKS5uZXh0KCkudG9TdHJpbmcoKSk7CiAgICAgIGVwb2NoQXR0ck1pbnV0ZSA9IHVzZXJBdHRyWzBdOwogICAgICBhdHRlbXB0Q291bnQgPSB1c2VyQXR0clsxXTsKICAgICAgYXR0ZW1wdENvdW50ID0gYXR0ZW1wdENvdW50ICsgMTsKICB9CgogIC8vaWYoCgogIHZhciBuZXdBdHRyOwogIGlmKGVwb2NoQ3VycmVudE1pbnV0ZT09ZXBvY2hBdHRyTWludXRlKSB7CiAgICAgIG5ld0F0dHIgPSBTdHJpbmcoIlsiICsgZXBvY2hBdHRyTWludXRlLnRvU3RyaW5nKCkgKyAiLCIgKyBhdHRlbXB0Q291bnQudG9TdHJpbmcoKSAgKyAiXSIpOwogIH0KICBlbHNlIHsKICAgICAgYXR0ZW1wdENvdW50PTE7CiAgICAgIG5ld0F0dHIgPSBTdHJpbmcoIlsiICsgZXBvY2hDdXJyZW50TWludXRlLnRvU3RyaW5nKCkgKyAiLCIgKyBhdHRlbXB0Q291bnQudG9TdHJpbmcoKSArICJdIik7CiAgfQogIGlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoX2lkLCAiZnItYXR0ci1zdHIyIixbbmV3QXR0cl0pOwoKICBpZihhdHRlbXB0Q291bnQ+dGhyZXNob2xkKSB7CiAgICBvdXRjb21lID0gInRydWUiOwogIH0KICBlbHNlIHsKICAgIG91dGNvbWUgPSAiZmFsc2UiOwogIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -4430,20 +4218,24 @@ }, { "name": "content-length", - "value": "1312" + "value": "2069" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:19 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -4453,14 +4245,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:19.611Z", - "time": 61, + "startedDateTime": "2024-06-19T21:28:24.218Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -4468,11 +4260,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 61 + "wait": 52 } }, { - "_id": "363a71f39643a664381fab9835743d38", + "_id": "afa15dc27a4267006563eb6adc5fc01a", "_order": 0, "cache": {}, "request": { @@ -4484,16 +4276,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -4503,28 +4295,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1625, + "headersSize": 1660, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Check Username\"" + "value": "name eq \"debug\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Check%20Username%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22debug%22" }, "response": { - "bodySize": 1129, + "bodySize": 3308, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1129, - "text": "{\"result\":[{\"_id\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"name\":\"Check Username\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 3308, + "text": "{\"result\":[{\"_id\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"name\":\"debug\",\"description\":\"Display sharedState, transientState, and headers.\",\"script\":\"LyogZGVidWcKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogRGlzcGxheSBzaGFyZWRTdGF0ZSwgdHJhbnNpZW50U3RhdGUsIGFuZCBoZWFkZXJzLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwp2YXIgYW5jaG9yID0gImFuY2hvci0iLmNvbmNhdChnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4JykpOwp2YXIgaGFsaWduID0gImxlZnQiOwp2YXIgbWVzc2FnZSA9ICI8cD48Yj5TaGFyZWQgU3RhdGU8L2I+Ojxici8+Ii5jb25jYXQoCiAgICAgIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpLmNvbmNhdCgKICAgICI8cD48Yj5UcmFuc2llbnQgU3RhdGU8L2I+Ojxici8+IikuY29uY2F0KAogICAgICB0cmFuc2llbnRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+UmVxdWVzdCBIZWFkZXJzPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgICAgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikKdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwidGV4dC1sZWZ0XCI7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIikuY29uY2F0KG1lc3NhZ2UpLmNvbmNhdCgiJztcbiIpLmNvbmNhdCgKICAiICB9XG4iKS5jb25jYXQoCiAgIn0pIikKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawopCmlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgIGFuY2hvcgogICAgICAgICksCiAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICApLmJ1aWxkKCkKfQplbHNlIHsKICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0KCiAvKgogICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAqIAogICogRXhhbXBsZToKICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICogJ3h4eC14eHgnIHByb2R1Y2VzICc0MzItNTIxJwogICovCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxMHwwOwogICAgICAgIHZhciB2ID0gcjsKICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -4574,20 +4370,24 @@ }, { "name": "content-length", - "value": "1129" + "value": "3308" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:19 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -4597,14 +4397,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:19.686Z", - "time": 59, + "startedDateTime": "2024-06-19T21:28:24.274Z", + "time": 55, "timings": { "blocked": -1, "connect": -1, @@ -4612,11 +4412,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 59 + "wait": 55 } }, { - "_id": "fe90a50ae7c7e0edfbed453351ad162b", + "_id": "2309a7f49a1fe4728cc77e95bde7fe41", "_order": 0, "cache": {}, "request": { @@ -4628,16 +4428,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -4647,28 +4447,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1643, + "headersSize": 1696, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"OAuth2 Evaluate Scope Script\"" + "value": "name eq \"My Example Script Using Libraries\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20Evaluate%20Scope%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22My%20Example%20Script%20Using%20Libraries%22" }, "response": { - "bodySize": 3734, + "bodySize": 796, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 3734, - "text": "{\"result\":[{\"_id\":\"da56fe60-8b38-4c46-a405-d6b306d4b336\",\"name\":\"OAuth2 Evaluate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Evaluation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcG9wdWxhdGUgdGhlIHNjb3BlcyB3aXRoIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlcyB3aGVuIHRoZSB0b2tlbmluZm8gZW5kcG9pbnQgaXMgY2FsbGVkLgogKiBGb3IgZXhhbXBsZSwgaWYgb25lIG9mIHRoZSBzY29wZXMgaXMgbWFpbCwgQU0gc2V0cyBtYWlsIHRvIHRoZSByZXNvdXJjZSBvd25lcidzIGVtYWlsIGFkZHJlc3MgaW4gdGhlIHRva2VuIGluZm9ybWF0aW9uIHJldHVybmVkLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDIpLgogKiAgICAgICAgICAgIFRoZSBjbGllbnQncyBpZGVudGl0eSBpZiBwcmVzZW50IG9yIHRoZSByZXNvdXJjZSBvd25lcidzIGlkZW50aXR5LiBDYW4gYmUgbnVsbC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0VWQUxVQVRFX1NDT1BFCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoMykuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIGEgTWFwPFN0cmluZywgT2JqZWN0PiBvZiB0aGUgYWNjZXNzIHRva2VuJ3MgaW5mb3JtYXRpb24gKDQpLgogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBBY2Nlc3NUb2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vYXV0aDIvY29yZS9BY2Nlc3NUb2tlbi5odG1sLgogKiAoMikgQU1JZGVudGl0eSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9pZG0vQU1JZGVudGl0eS5odG1sLgogKiAoMykgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBldmFsdWF0ZSBzY29wZSBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgbWFwID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7CiAgICBpZiAoaWRlbnRpdHkgIT09IG51bGwpIHsKICAgICAgICB2YXIgc2NvcGVzID0gYWNjZXNzVG9rZW4uZ2V0U2NvcGUoKS50b0FycmF5KCk7CiAgICAgICAgc2NvcGVzLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKHNjb3BlKS50b0FycmF5KCk7CiAgICAgICAgICAgIG1hcC5wdXQoc2NvcGUsIGF0dHJpYnV0ZXMuam9pbigiLCIpKTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKCdpZGVudGl0eSBpcyBudWxsJyk7CiAgICB9CiAgICByZXR1cm4gbWFwOwp9KCkpOw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_EVALUATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 796, + "text": "{\"result\":[{\"_id\":\"bb393d07-a121-47e2-9d24-1a1066f39ec0\",\"name\":\"My Example Script Using Libraries\",\"description\":\"My Example Script Using Libraries\",\"script\":\"LyoqCiAqIFRlc3RpbmcgbGlicmFyeSBzY3JpcHRzCiAqLwp2YXIgbXlsaWIgPSByZXF1aXJlKCdNeSBFeGFtcGxlIExpYnJhcnknKTsKdmFyIGxvZ2dlcnMgPSByZXF1aXJlKCdMaWJyYXJ5IFNjcmlwdCcpOwoKbXlsaWIuYWRkKDEpOwpteWxpYi5sb2dUb3RhbChsb2dnZXIpOwpteWxpYi5hZGQoMyk7Cm15bGliLmxvZ1RvdGFsV2l0aE1lc3NhZ2UobG9nZ2VyLCBteWxpYi5NU0cpOwoKb3V0Y29tZSA9ICd0cnVlJzs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -4718,20 +4522,24 @@ }, { "name": "content-length", - "value": "3734" + "value": "796" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:19 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -4741,14 +4549,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:19.755Z", - "time": 59, + "startedDateTime": "2024-06-19T21:28:24.334Z", + "time": 57, "timings": { "blocked": -1, "connect": -1, @@ -4756,11 +4564,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 59 + "wait": 57 } }, { - "_id": "c5caa7291edc554233da2cdc3b03a448", + "_id": "1f8cce56ecc6a4b46438c8bef34eec8c", "_order": 0, "cache": {}, "request": { @@ -4772,16 +4580,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -4791,28 +4599,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1643, + "headersSize": 1677, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"LinkedIn Profile Normalization\"" + "value": "name eq \"takeFavouriteFactor.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22LinkedIn%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22takeFavouriteFactor.js%22" }, "response": { - "bodySize": 1600, + "bodySize": 1032, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1600, - "text": "{\"result\":[{\"_id\":\"8862ca8f-7770-4af5-a888-ac0df0947f36\",\"name\":\"LinkedIn Profile Normalization\",\"description\":\"Normalizes raw profile data from LinkedIn\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5maXJzdE5hbWUubG9jYWxpemVkLmdldCgwKSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3ROYW1lLmxvY2FsaXplZC5nZXQoMCkpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucHJvZmlsZVBpY3R1cmUuZGlzcGxheUltYWdlKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVsZW1lbnRzLmdldCgwKS5nZXQoImhhbmRsZX4iKS5lbWFpbEFkZHJlc3MpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZWxlbWVudHMuZ2V0KDApLmdldCgiaGFuZGxlfiIpLmVtYWlsQWRkcmVzcykpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1032, + "text": "{\"result\":[{\"_id\":\"77e87451-bde9-40c0-84b1-02d4c97687f2\",\"name\":\"takeFavouriteFactor.js\",\"description\":\"null\",\"script\":\"ZnVuY3Rpb24gZ2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSkKewogIHZhciBpZCA9IHNoYXJlZFN0YXRlLmdldCgnX2lkJyk7CiAgdmFyIGZySWRtQ3VzdG9tQXR0cmlidXRlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoaWQsICdmci1pZG0tY3VzdG9tLWF0dHJzJyk7CiAgaWYgKGZySWRtQ3VzdG9tQXR0cmlidXRlcykKICB7CiAgICAgIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QgPSBKU09OLnBhcnNlKFN0cmluZyhmcklkbUN1c3RvbUF0dHJpYnV0ZXMudG9BcnJheSgpWzBdKSk7CiAgICAgICAgcmV0dXJuIGZySWRtQ3VzdG9tQXR0cmlidXRlc09iamVjdFtjdXN0b21BdHRyTmFtZV07CiAgfQp9Cgp2YXIgZmF2RmFjdG9yID0gZ2V0Q3VzdG9tQXR0clZhbHVlKCJjdXN0b21fZmF2b3VyaXRlRmFjdG9yIik7Cm91dGNvbWUgPSBmYXZGYWN0b3I7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -4862,20 +4674,24 @@ }, { "name": "content-length", - "value": "1600" + "value": "1032" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:19 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -4885,14 +4701,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:19.822Z", - "time": 63, + "startedDateTime": "2024-06-19T21:28:24.396Z", + "time": 55, "timings": { "blocked": -1, "connect": -1, @@ -4900,11 +4716,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 63 + "wait": 55 } }, { - "_id": "dcc34405f9b2c07186729f2a8039368f", + "_id": "75d67cb54b1596db4dd7aef88161182c", "_order": 0, "cache": {}, "request": { @@ -4916,16 +4732,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -4935,28 +4751,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1644, + "headersSize": 1710, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Instagram Profile Normalization\"" + "value": "name eq \"Alpha OAuth2 Access Token Modification Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Instagram%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Alpha%20OAuth2%20Access%20Token%20Modification%20Script%22" }, "response": { - "bodySize": 1178, + "bodySize": 10105, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1178, - "text": "{\"result\":[{\"_id\":\"1244e639-4a31-401d-ab61-d75133d8dc9e\",\"name\":\"Instagram Profile Normalization\",\"description\":\"Normalizes raw profile data from Instagram\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 10105, + "text": "{\"result\":[{\"_id\":\"39c08084-1238-43e8-857f-2e11005eac49\",\"name\":\"Alpha OAuth2 Access Token Modification Script\",\"description\":\"Default alpha realm script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -5005,21 +4825,25 @@ "value": "application/json;charset=UTF-8" }, { - "name": "content-length", - "value": "1178" + "name": "transfer-encoding", + "value": "chunked" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:19 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -5029,14 +4853,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 800, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:19.891Z", - "time": 59, + "startedDateTime": "2024-06-19T21:28:24.455Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -5044,11 +4868,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 59 + "wait": 52 } }, { - "_id": "107a4931480ecae131b0dd4dbfc827bd", + "_id": "383132fe28b74d67e177962008c53d13", "_order": 0, "cache": {}, "request": { @@ -5060,16 +4884,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -5079,28 +4903,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1657, + "headersSize": 1660, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"ForgeRock Internal: OIDC Claims Script\"" + "value": "name eq \"level\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22ForgeRock%20Internal%3A%20OIDC%20Claims%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22level%22" }, "response": { - "bodySize": 41560, + "bodySize": 834, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 41560, - "text": "{\"result\":[{\"_id\":\"1f389a3d-21cf-417c-a6d3-42ea620071f0\",\"name\":\"ForgeRock Internal: OIDC Claims Script\",\"description\":\"Internal OIDC Claims script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 834, + "text": "{\"result\":[{\"_id\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"name\":\"level\",\"description\":\"set per level shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdsZXZlbCcgKyBsZXZlbCArICdWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzZXQgYXQgZWFjaCBsZXZlbCBvZiB0aGUgbmVzdGVkIGpvdXJuZXlzLiBJdCBjb250YWlucyBhbiBpbmRpY2F0b3IgaW4gd2hpY2ggbGV2ZWwgaXQgd2FzIHNldC4nKTsKfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -5148,18 +4976,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "content-length", + "value": "834" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:19 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -5167,20 +5003,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:19.955Z", - "time": 65, + "startedDateTime": "2024-06-19T21:28:24.513Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -5188,11 +5020,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 65 + "wait": 51 } }, { - "_id": "b8afb85169152369b0e1f80254bd7a53", + "_id": "314adfb3c1b8ba601a880bcd4515d2b6", "_order": 0, "cache": {}, "request": { @@ -5204,16 +5036,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -5223,28 +5055,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1638, + "headersSize": 1664, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Scripted Policy Condition\"" + "value": "name eq \"SaveLogin\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Scripted%20Policy%20Condition%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22SaveLogin%22" }, "response": { - "bodySize": 6917, + "bodySize": 2987, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 6917, - "text": "{\"result\":[{\"_id\":\"9de3eb62-f131-4fac-a294-7bd170fd4acb\",\"name\":\"Scripted Policy Condition\",\"description\":\"Default global script for Scripted Policy Conditions\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qKgogKiBUaGlzIGlzIGEgUG9saWN5IENvbmRpdGlvbiBleGFtcGxlIHNjcmlwdC4gSXQgZGVtb25zdHJhdGVzIGhvdyB0byBhY2Nlc3MgYSB1c2VyJ3MgaW5mb3JtYXRpb24sCiAqIHVzZSB0aGF0IGluZm9ybWF0aW9uIGluIGV4dGVybmFsIEhUVFAgY2FsbHMgYW5kIG1ha2UgYSBwb2xpY3kgZGVjaXNpb24gYmFzZWQgb24gdGhlIG91dGNvbWUuCiAqLwoKdmFyIHVzZXJBZGRyZXNzLCB1c2VySVAsIHJlc291cmNlSG9zdDsKCmlmICh2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkpIHsKCiAgICB2YXIgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9IGdldENvdW50cnlGcm9tVXNlckFkZHJlc3MoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJDb3VudHJ5IHJldHJpZXZlZCBmcm9tIHVzZXIncyBhZGRyZXNzOiAiICsgY291bnRyeUZyb21Vc2VyQWRkcmVzcyk7CiAgICB2YXIgY291bnRyeUZyb21Vc2VySVAgPSBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpOwogICAgbG9nZ2VyLm1lc3NhZ2UoIkNvdW50cnkgcmV0cmlldmVkIGZyb20gdXNlcidzIElQOiAiICsgY291bnRyeUZyb21Vc2VySVApOwogICAgdmFyIGNvdW50cnlGcm9tUmVzb3VyY2VVUkkgPSBnZXRDb3VudHJ5RnJvbVJlc291cmNlVVJJKCk7CiAgICBsb2dnZXIubWVzc2FnZSgiQ291bnRyeSByZXRyaWV2ZWQgZnJvbSByZXNvdXJjZSBVUkk6ICIgKyBjb3VudHJ5RnJvbVJlc291cmNlVVJJKTsKCiAgICBpZiAoY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21Vc2VySVAgJiYgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21SZXNvdXJjZVVSSSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIFN1Y2NlZWRlZCIpOwogICAgICAgIHJlc3BvbnNlQXR0cmlidXRlcy5wdXQoImNvdW50cnlPZk9yaWdpbiIsIFtjb3VudHJ5RnJvbVVzZXJBZGRyZXNzXSk7CiAgICAgICAgYXV0aG9yaXplZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIEZhaWxlZCIpOwogICAgICAgIGF1dGhvcml6ZWQgPSBmYWxzZTsKICAgIH0KCn0gZWxzZSB7CiAgICBsb2dnZXIubWVzc2FnZSgiUmVxdWlyZWQgcGFyYW1ldGVycyBub3QgZm91bmQuIEF1dGhvcml6YXRpb24gRmFpbGVkLiIpOwogICAgYXV0aG9yaXplZCA9IGZhbHNlOwp9CgovKioKICogVXNlIHRoZSB1c2VyJ3MgYWRkcmVzcyB0byBsb29rdXAgdGhlaXIgY291bnRyeSBvZiByZXNpZGVuY2UuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgdXNlcidzIGNvdW50cnkgb2YgcmVzaWRlbmNlLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21Vc2VyQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlckFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgZ2VvY29kZSA9IEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvY29kZS5yZXN1bHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGdlb2NvZGUucmVzdWx0c1tpXTsKICAgICAgICB2YXIgajsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgcmVzdWx0LmFkZHJlc3NfY29tcG9uZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAocmVzdWx0LmFkZHJlc3NfY29tcG9uZW50c1tpXS50eXBlc1swXSA9PSAiY291bnRyeSIpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYWRkcmVzc19jb21wb25lbnRzW2ldLmxvbmdfbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKLyoqCiAqIFVzZSB0aGUgdXNlcidzIElQIHRvIGxvb2t1cCB0aGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqLwpmdW5jdGlvbiBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgdXNlcklQKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdC5jb3VudHJ5OwogICAgfQp9CgovKioKICogVXNlIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UncyBob3N0IG5hbWUgdG8gbG9va3VwIHRoZSBjb3VudHJ5IHdoZXJlIHRoZSByZXNvdXJjZSBpcyBob3N0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBpbiB3aGljaCB0aGUgcmVzb3VyY2UgaXMgaG9zdGVkLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21SZXNvdXJjZVVSSSgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgZW5jb2RlVVJJQ29tcG9uZW50KHJlc291cmNlSG9zdCkpOwogICAgICByZXF1ZXN0LnNldE1ldGhvZCgiR0VUIik7CgogICAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3QpLmdldCgpOwogICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwoKICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIGlmIChyZXN1bHQpIHsKICAgICAgICByZXR1cm4gcmVzdWx0LmNvdW50cnk7CiAgICB9Cn0KCi8qKgogKiBSZXRyaWV2ZSBhbmQgdmFsaWRhdGUgdGhlIHZhcmlhYmxlcyByZXF1aXJlZCB0byBtYWtlIHRoZSBleHRlcm5hbCBIVFRQIGNhbGxzLgogKgogKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2lsbCBiZSB0cnVlIGlmIHZhbGlkYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkgewogICAgdmFyIHVzZXJBZGRyZXNzU2V0ID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKCJwb3N0YWxBZGRyZXNzIik7CiAgICBpZiAodXNlckFkZHJlc3NTZXQgPT0gbnVsbCB8fCB1c2VyQWRkcmVzc1NldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gYWRkcmVzcyBzcGVjaWZpZWQgZm9yIHVzZXI6ICIgKyB1c2VybmFtZSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdXNlckFkZHJlc3MgPSB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIGFkZHJlc3M6ICIgKyB1c2VyQWRkcmVzcyk7CgogICAgaWYgKCFlbnZpcm9ubWVudCkgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJObyBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiB0aGUgZXZhbHVhdGlvbiByZXF1ZXN0LiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB2YXIgaXBTZXQgPSBlbnZpcm9ubWVudC5nZXQoIklQIik7CiAgICBpZiAoaXBTZXQgPT0gbnVsbCB8fCBpcFNldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gSVAgc3BlY2lmaWVkIGluIHRoZSBldmFsdWF0aW9uIHJlcXVlc3QgZW52aXJvbm1lbnQgcGFyYW1ldGVycy4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB1c2VySVAgPSBpcFNldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIElQOiAiICsgdXNlcklQKTsKCiAgICBpZiAoIXJlc291cmNlVVJJKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIHJlc291cmNlIFVSSSBzcGVjaWZpZWQuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmVzb3VyY2VIb3N0ID0gcmVzb3VyY2VVUkkubWF0Y2goL14oLio6XC9cLykod3d3XC4pPyhbQS1aYS16MC05XC1cLl0rKSg6WzAtOV0rKT8oLiopJC8pWzNdOwogICAgbG9nZ2VyLm1lc3NhZ2UoIlJlc291cmNlIGhvc3Q6ICIgKyByZXNvdXJjZUhvc3QpOwoKICAgIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"POLICY_CONDITION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 2987, + "text": "{\"result\":[{\"_id\":\"46074930-6a38-4e36-8985-1ed90b4bdb3b\",\"name\":\"SaveLogin\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCik7CndpdGggKGZyKSB7CiAgLy8gQ3JlYXRlIG5ldyBlbnRyeSB3aXRoIGRldmljZSBwcm9maWxlIGFuZCBkYXRlCiAgdmFyIHByb2ZpbGUgPSBzaGFyZWRTdGF0ZS5nZXQoImZvcmdlUm9jay5kZXZpY2UucHJvZmlsZSIpOwogIHZhciBkYXRlID0gRGF0ZS5ub3coKQogIHZhciBpZGVudGlmaWVyID0gcHJvZmlsZS5nZXQoImlkZW50aWZpZXIiKQogIHZhciBwbGF0Zm9ybSA9IHByb2ZpbGUuZ2V0KCJtZXRhZGF0YSIpLmdldCgicGxhdGZvcm0iKS5nZXQoInBsYXRmb3JtIikKICB2YXIgZGV2aWNlTmFtZSA9IHByb2ZpbGUuZ2V0KCJtZXRhZGF0YSIpLmdldCgicGxhdGZvcm0iKS5nZXQoImRldmljZU5hbWUiKQogIHZhciBsYXRpdHVkZSA9IHByb2ZpbGUuZ2V0KCJsb2NhdGlvbiIpLmdldCgibGF0aXR1ZGUiKQogIHZhciBsb25naXR1ZGUgPSBwcm9maWxlLmdldCgibG9jYXRpb24iKS5nZXQoImxvbmdpdHVkZSIpCiAgdmFyIHVzZXJBZ2VudCA9IHByb2ZpbGUuZ2V0KCJtZXRhZGF0YSIpLmdldCgiYnJvd3NlciIpLmdldCgidXNlckFnZW50Iik7CiAgdmFyIGJyb3dzZXIgPSAiIgogIAogIC8vIFdvcmsgb3V0IHdoaWNoIGJyb3dzZXIgdGhpcyBpcwogIGlmICh1c2VyQWdlbnQudG9VcHBlckNhc2UoKS5pbmRleE9mKCJGSVJFRk9YIikgPiAtMSkgewogICAgYnJvd3NlciA9ICJGaXJlZm94IjsKICB9IGVsc2UgaWYgKHVzZXJBZ2VudC50b1VwcGVyQ2FzZSgpLmluZGV4T2YoIkNIUk9NRSIpID4gLTEgJiYgdXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiU0FGQVJJIikgPiAtMSkgewogICAgLy8gQ2hyb21lIGNhbiBzb21ldGltZXMgbGlzdCBDaHJvbWUgZm9sbG93ZWQgYnkgU2FmYXJpIGluIHVzZXJBZ2VudAogICAgaWYgKHVzZXJBZ2VudC50b1VwcGVyQ2FzZSgpLmluZGV4T2YoIkNIUk9NRSIpIDwgdXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiU0FGQVJJIikpIHsKICAgICAgYnJvd3NlciA9ICJDaHJvbWUiOwogICAgfQogIH0gZWxzZSBpZiAodXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiQ0hST01FIikgPiAtMSkgewogICAgYnJvd3NlciA9ICJDaHJvbWUiOwogIH0gZWxzZSBpZiAodXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiU0FGQVJJIikgPiAtMSkgewogICAgYnJvd3NlciA9ICJTYWZhcmkiOwogIH0KICAKICB2YXIgZW50cnkgPSB7CiAgICAiZGF0ZSI6IERhdGUoKS50b1N0cmluZygpLAogICAgImxhc3RTZWxlY3RlZERhdGUiOiBkYXRlLAogICAgImRldmljZSI6IHsKICAgICAgImlkZW50aWZpZXIiOiBTdHJpbmcoaWRlbnRpZmllciksCiAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAicGxhdGZvcm0iOiB7CiAgICAgICAgICAicGxhdGZvcm0iOiBTdHJpbmcocGxhdGZvcm0pLAogICAgICAgICAgImRldmljZU5hbWUiOiBTdHJpbmcoZGV2aWNlTmFtZSkKICAgICAgICB9LAogICAgICAgICJicm93c2VyIjogYnJvd3NlcgogICAgICB9CiAgICB9LAogICAgImxvY2F0aW9uIjogewogICAgICAibGF0aXR1ZGUiOiBTdHJpbmcobGF0aXR1ZGUpLAogICAgICAibG9uZ2l0dWRlIjogU3RyaW5nKGxvbmdpdHVkZSkKICAgIH0KICB9CiAgCiAgLy8gQWRkIGVudHJ5IHRvIG11bHRpIHZhbHVlCiAgdmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKQogIHZhciBhdHRyaWJ1dGUgPSAiZnItYXR0ci1pbXVsdGkxIgogIGlkUmVwb3NpdG9yeS5hZGRBdHRyaWJ1dGUodXNlcm5hbWUsIGF0dHJpYnV0ZSwgSlNPTi5zdHJpbmdpZnkoZW50cnkpKTsKICAKICBvdXRjb21lID0gInRydWUiCn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -5294,20 +5130,24 @@ }, { "name": "content-length", - "value": "6917" + "value": "2987" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:19 GMT" + "value": "Wed, 19 Jun 2024 21:28:23 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -5317,14 +5157,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:20.026Z", - "time": 60, + "startedDateTime": "2024-06-19T21:28:24.568Z", + "time": 54, "timings": { "blocked": -1, "connect": -1, @@ -5332,11 +5172,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 60 + "wait": 54 } }, { - "_id": "afa15dc27a4267006563eb6adc5fc01a", + "_id": "36cf1b4232865b8ec590209687e762ee", "_order": 0, "cache": {}, "request": { @@ -5348,16 +5188,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -5367,28 +5207,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1614, + "headersSize": 1703, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"debug\"" + "value": "name eq \"Alpha endUserUIClient OIDC Claims Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22debug%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Alpha%20endUserUIClient%20OIDC%20Claims%20Script%22" }, "response": { - "bodySize": 3308, + "bodySize": 41559, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 3308, - "text": "{\"result\":[{\"_id\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"name\":\"debug\",\"description\":\"Display sharedState, transientState, and headers.\",\"script\":\"LyogZGVidWcKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogRGlzcGxheSBzaGFyZWRTdGF0ZSwgdHJhbnNpZW50U3RhdGUsIGFuZCBoZWFkZXJzLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwp2YXIgYW5jaG9yID0gImFuY2hvci0iLmNvbmNhdChnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4JykpOwp2YXIgaGFsaWduID0gImxlZnQiOwp2YXIgbWVzc2FnZSA9ICI8cD48Yj5TaGFyZWQgU3RhdGU8L2I+Ojxici8+Ii5jb25jYXQoCiAgICAgIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpLmNvbmNhdCgKICAgICI8cD48Yj5UcmFuc2llbnQgU3RhdGU8L2I+Ojxici8+IikuY29uY2F0KAogICAgICB0cmFuc2llbnRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+UmVxdWVzdCBIZWFkZXJzPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgICAgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikKdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwidGV4dC1sZWZ0XCI7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIikuY29uY2F0KG1lc3NhZ2UpLmNvbmNhdCgiJztcbiIpLmNvbmNhdCgKICAiICB9XG4iKS5jb25jYXQoCiAgIn0pIikKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawopCmlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgIGFuY2hvcgogICAgICAgICksCiAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICApLmJ1aWxkKCkKfQplbHNlIHsKICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0KCiAvKgogICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAqIAogICogRXhhbXBsZToKICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICogJ3h4eC14eHgnIHByb2R1Y2VzICc0MzItNTIxJwogICovCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxMHwwOwogICAgICAgIHZhciB2ID0gcjsKICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 41559, + "text": "{\"result\":[{\"_id\":\"e1db8a0a-0329-4962-a5bf-ecffaca376ae\",\"name\":\"Alpha endUserUIClient OIDC Claims Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -5437,21 +5281,25 @@ "value": "application/json;charset=UTF-8" }, { - "name": "content-length", - "value": "3308" + "name": "transfer-encoding", + "value": "chunked" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:19 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -5461,14 +5309,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 800, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:20.098Z", - "time": 67, + "startedDateTime": "2024-06-19T21:28:24.627Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -5476,11 +5324,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 67 + "wait": 53 } }, { - "_id": "1a05176e811af286cab7cd2351a67f5d", + "_id": "1e5d993ae7967c35c67920283d9c1839", "_order": 0, "cache": {}, "request": { @@ -5492,16 +5340,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -5511,28 +5359,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1652, + "headersSize": 1659, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"GitHub Profile Normalization (VS)\"" + "value": "name eq \"mode\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22GitHub%20Profile%20Normalization%20%28VS%29%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22mode%22" }, "response": { - "bodySize": 1570, + "bodySize": 2093, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1570, - "text": "{\"result\":[{\"_id\":\"23143919-6b78-40c3-b25e-beca19b229e0\",\"name\":\"GitHub Profile Normalization (VS)\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJHaXRIdWIgcmF3UHJvZmlsZTogIityYXdQcm9maWxlKQoKcmV0dXJuIGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZmlyc3RfbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3RfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5waWN0dXJlLmRhdGEudXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLmVtYWlsKSkp\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 2093, + "text": "{\"result\":[{\"_id\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"name\":\"mode\",\"description\":\"Check if mode has already been set.\",\"script\":\"LyogbW9kZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDb2xsZWN0IG1vZGUgaWYgbm90IGFscmVhZHkgc2V0IGFuZCBzZXQgb3V0Y29tZSB0byBtb2RlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSAnc2hhcmVkIGFuZCBsZXZlbCcKICogLSAnc2hhcmVkIG9ubHknCiAqIC0gJ2xldmVsIG9ubHknCiAqIC0gJ25vbmUnCiAqLwooZnVuY3Rpb24gKCkgewogIHZhciBtb2RlID0gbm9kZVN0YXRlLmdldCgnbW9kZScpOwogIGlmIChtb2RlKSB7CiAgICBvdXRjb21lID0gbW9kZS5hc1N0cmluZygpOwogICAgdmFyIGxldmVsID0gbm9kZVN0YXRlLmdldCgnbGV2ZWwnKS5hc0ludGVnZXIoKSArIDE7CiAgICBsb2dnZXIuZXJyb3IoJ21vZGU6IG1vZGU9JyArIG1vZGUuYXNTdHJpbmcoKSArICcsIGxldmVsPScgKyBsZXZlbCk7CiAgICBzaGFyZWRTdGF0ZS5wdXQoJ2xldmVsJywgbGV2ZWwpOwogIH0KICBlbHNlIHsKICAgIHZhciBjaG9pY2VzID0gWydzaGFyZWQgYW5kIGxldmVsJywgJ3NoYXJlZCBvbmx5JywgJ2xldmVsIG9ubHknLCAnbm9uZSddOwogIAogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DaG9pY2VDYWxsYmFjawogICAgKQoKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKFsKICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soJ0Nob29zZSB0ZXN0IG1vZGUnLCBjaG9pY2VzLCAwLCBmYWxzZSkKICAgICAgXSkuYnVpbGQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBjaG9pY2UgPSBwYXJzZUludChjYWxsYmFja3MuZ2V0KDApLmdldFNlbGVjdGVkSW5kZXhlcygpWzBdKTsKICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgnbW9kZScsIGNob2ljZXNbY2hvaWNlXSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2xldmVsJywgMCk7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKGNob2ljZXNbY2hvaWNlXSkuYnVpbGQoKTsKICAgIH0KICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -5582,20 +5434,24 @@ }, { "name": "content-length", - "value": "1570" + "value": "2093" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -5605,14 +5461,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:20.178Z", - "time": 62, + "startedDateTime": "2024-06-19T21:28:24.683Z", + "time": 56, "timings": { "blocked": -1, "connect": -1, @@ -5620,11 +5476,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 62 + "wait": 56 } }, { - "_id": "4cd74350a95512b9cd53238ae32b78be", + "_id": "0ef369f427baa872ca4ee159a6fe7dc7", "_order": 0, "cache": {}, "request": { @@ -5636,16 +5492,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -5655,28 +5511,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1641, + "headersSize": 1677, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Google Profile Normalization\"" + "value": "name eq \"UOP Enrich Session\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Google%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22UOP%20Enrich%20Session%22" }, "response": { - "bodySize": 1548, + "bodySize": 1914, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1548, - "text": "{\"result\":[{\"_id\":\"58d29080-4563-480b-89bb-1e7719776a21\",\"name\":\"Google Profile Normalization\",\"description\":\"Normalizes raw profile data from Google\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1914, + "text": "{\"result\":[{\"_id\":\"743351b3-001a-4ec8-b3ac-a674ddb8de22\",\"name\":\"UOP Enrich Session\",\"description\":\"Enrich user session with UOP class ID.\",\"script\":\"LyogVU9QIEVucmljaCBTZXNzaW9uCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIEFkZCBjdXJyZW50IGNsYXNzIElEIHRvIHVzZXIgc2Vzc2lvbi4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuIAogKiBJdCByZXF1aXJlcyB0aGUgSWRlbnRpZnkgRXhpc3RpbmcgVXNlciBub2RlIGJlZm9yZSBpdCBpcyBiZWluZyBjYWxsZWQuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAtIGZhbHNlCiAqLwpsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBzdGFydCIpOwpvdXRjb21lID0gImZhbHNlIjsKCmlmIChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBnb2luZyB0byBlbnJpY2ggc2Vzc2lvbiB3aXRoIGNsYXNzIGlkOiAiLmNvbmNhdChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpKTsKICAKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaQogICAgKTsKCiAgICB3aXRoIChmcikgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJVT1AgRW5yaWNoIFNlc3Npb246IEVuZCAob3V0Y29tZT0iLmNvbmNhdChvdXRjb21lKS5jb25jYXQoIikiKSk7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8ob3V0Y29tZSkucHV0U2Vzc2lvblByb3BlcnR5KCJVT1BDbGFzc0lEIiwgc2hhcmVkU3RhdGUuZ2V0KCJ1b3BDdXJyZW50Q2xhc3NJRCIpKS5idWlsZCgpOwogICAgfQogIAp9IGVsc2UgewogICAgbG9nZ2VyLmVycm9yKCJVT1AgRW5yaWNoIFNlc3Npb246IG5vIGNsYXNzZXMhIik7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBFbmQgKG91dGNvbWU9Ii5jb25jYXQob3V0Y29tZSkuY29uY2F0KCIpIikpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -5726,20 +5586,24 @@ }, { "name": "content-length", - "value": "1548" + "value": "1914" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -5749,14 +5613,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:20.252Z", - "time": 65, + "startedDateTime": "2024-06-19T21:28:24.745Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -5764,11 +5628,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 65 + "wait": 52 } }, { - "_id": "6305235cfeadffc508b8076bf5229d24", + "_id": "3137a01335cedaf6a0d12265a00efda2", "_order": 0, "cache": {}, "request": { @@ -5780,16 +5644,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -5799,28 +5663,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1646, + "headersSize": 1692, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Scripted Module - Client Side\"" + "value": "name eq \"Saml2 IDP Adapter Always Auth\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Scripted%20Module%20-%20Client%20Side%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Saml2%20IDP%20Adapter%20Always%20Auth%22" }, "response": { - "bodySize": 983, + "bodySize": 7583, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 983, - "text": "{\"result\":[{\"_id\":\"c827d2b4-3608-4693-868e-bbcf86bd87c7\",\"name\":\"Scripted Module - Client Side\",\"description\":\"Default global script for client side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTYtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qIERlZmF1bHQgQXV0aGVudGljYXRpb24gY2xpZW50IHNpZGUgc2NyaXB0IHRvIHVzZSBhcyBhIHRlbXBsYXRlIGZvciBuZXcgc2NyaXB0cyAqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 7583, + "text": "{\"result\":[{\"_id\":\"85523e71-2d77-4577-b078-6f9674cc54e2\",\"name\":\"Saml2 IDP Adapter Always Auth\",\"description\":\"Always redirect browser pre-auth\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4yL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL1NBTUwySWRlbnRpdHlQcm92aWRlckFkYXB0ZXIuaHRtbAogKiBOb3RlIHRoYXQgdGhlIGluaXRpYWxpemUgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIHNjcmlwdHMuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzLiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMgZm9yIHRoZSB2YXJpYWJsZXMgYXZhaWxhYmxlIHRvIGl0LgogKgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZwogKiAgICAgRW50aXR5IElEIGZvciB0aGUgaG9zdGVkIElEUAogKiByZWFsbSAtIFN0cmluZwogKiAgICAgUmVhbG0gb2YgdGhlIGhvc3RlZCBJRFAKICogaWRwQWRhcHRlclNjcmlwdEhlbHBlciAtIElkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEpCiAqICAgICBBbiBpbnN0YW5jZSBvZiBJZHBBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIHJlcXVlc3QgLSBIdHRwU2VydmxldFJlcXVlc3QgKDIpCiAqICAgICBTZXJ2bGV0IHJlcXVlc3Qgb2JqZWN0CiAqIHJlc3BvbnNlIC0gSHR0cFNlcnZsZXRSZXNwb25zZSAoMykKICogICAgIFNlcnZsZXQgcmVzcG9uc2Ugb2JqZWN0CiAqIGF1dGhuUmVxdWVzdCAtIEF1dGhuUmVxdWVzdCAoNCkKICogICAgIFRoZSBvcmlnaW5hbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHNlbnQgZnJvbSBTUAogKiByZXFJZCAtIFN0cmluZwogKiAgICAgVGhlIGlkIHRvIHVzZSBmb3IgY29udGludWF0aW9uIG9mIHByb2Nlc3NpbmcgaWYgdGhlIGFkYXB0ZXIgcmVkaXJlY3RzCiAqIHJlcyAtIFJlc3BvbnNlICg1KQogKiAgICAgVGhlIFNBTUwgUmVzcG9uc2UKICogc2Vzc2lvbiAtIFNTT1Rva2VuICg2KQogKiAgICAgVGhlIHNpbmdsZSBzaWduLW9uIHNlc3Npb24uIFRoZSByZWZlcmVuY2UgdHlwZSBvZiB0aGlzIGlzIE9iamVjdCBhbmQgd291bGQgbmVlZCB0byBiZSBjYXN0ZWQgdG8gU1NPVG9rZW4uCiAqIHJlbGF5U3RhdGUgLSBTdHJpbmcKICogICAgIFRoZSByZWxheVN0YXRlIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSByZWRpcmVjdAogKiBmYXVsdENvZGUgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBjb2RlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgU0FNTCByZXNwb25zZQogKiBmYXVsdERldGFpbCAtIFN0cmluZwogKiAgICAgdGhlIGZhdWx0IGRldGFpbCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogbG9nZ2VyIC0gTG9nZ2VyIGluc3RhbmNlCiAqICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLjxzY3JpcHQgbmFtZT4KICoKICogVGhyb3dzIFNBTUwyRXhjZXB0aW9uICg3KToKICogICAgIGZvciBhbnkgZXhjZXB0aW9ucyBvY2N1cnJpbmcgaW4gdGhlIGFkYXB0ZXIuIFRoZSBmZWRlcmF0aW9uIHByb2Nlc3Mgd2lsbCBjb250aW51ZQogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBpZHBBZGFwdGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL1Jlc3BvbnNlLmh0bWwuCiAqICg2KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvY29tbW9uL1NBTUwyRXhjZXB0aW9uLmh0bWwuCiAqLwoKLyoKICogVGVtcGxhdGUvZGVmYXVsdCBzY3JpcHQgZm9yIFNBTUwyIElEUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTaW5nbGVTaWduT24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNpbmdsZVNpZ25PbiIpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZUF1dGhlbnRpY2F0aW9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlQXV0aGVudGljYXRpb24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZUF1dGhlbnRpY2F0aW9uIik7CiAgICByZXR1cm4gdHJ1ZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZFJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBoYXBwZW5lZCBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTZW5kUmVzcG9uc2UgKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNlbmRSZXNwb25zZSIpOwogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IGF1dGhuUmVxdWVzdDogIithdXRoblJlcXVlc3QpOwogICAgICByZXNwb25zZS5zZW5kUmVkaXJlY3QoImh0dHBzOi8vaWRjLnNjaGV1YmVyLmlvL2FtL1hVSS8/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPURpc3BhdGNoZXImRm9yY2VBdXRoPXRydWUmZ290bz0iK3JlbGF5U3RhdGUpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpZ25SZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICByZXMKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2lnblJlc3BvbnNlICgpIHsKICAgICAgbG9nZ2VyLmVycm9yKCJDaGljYWdvOiBwcmVTaWduUmVzcG9uc2UiKTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZEZhaWx1cmVSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGZhdWx0Q29kZQogKiAgICAgZmF1bHREZXRhaWwKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2VuZEZhaWx1cmVSZXNwb25zZSAoKSB7CiAgICAgIGxvZ2dlci5lcnJvcigiQ2hpY2FnbzogcHJlU2VuZEZhaWx1cmVSZXNwb25zZSIpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -5870,20 +5738,24 @@ }, { "name": "content-length", - "value": "983" + "value": "7583" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -5893,14 +5765,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 773, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:20.329Z", - "time": 70, + "startedDateTime": "2024-06-19T21:28:24.802Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -5908,11 +5780,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 70 + "wait": 53 } }, { - "_id": "44e730c22a54944186cc3c6ed74bbce4", + "_id": "94adfa06e33c4effe46def70f02b0ac3", "_order": 0, "cache": {}, "request": { @@ -5924,16 +5796,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -5943,28 +5815,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1641, + "headersSize": 1670, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Amazon Profile Normalization\"" + "value": "name eq \"EmailAsUsername\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Amazon%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22EmailAsUsername%22" }, "response": { - "bodySize": 1296, + "bodySize": 925, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1296, - "text": "{\"result\":[{\"_id\":\"6b3cfd48-62d3-48ff-a96f-fe8f3a22ab30\",\"name\":\"Amazon Profile Normalization\",\"description\":\"Normalizes raw profile data from Amazon\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 925, + "text": "{\"result\":[{\"_id\":\"e5c302c8-f838-4698-87cc-d7225fc82454\",\"name\":\"EmailAsUsername\",\"description\":\"null\",\"script\":\"b2JqZWN0QXR0cmlidXRlcyA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpCnVzZXJOYW1lID0gb2JqZWN0QXR0cmlidXRlcy5nZXQoInVzZXJOYW1lIikKCmlmKHVzZXJOYW1lKXsKICAvL0Zvcm0gRmlsbAogIG9iamVjdEF0dHJpYnV0ZXMucHV0KCJtYWlsIiwgdXNlck5hbWUpCn0gZWxzZSB7CiAgLy9Tb2NpYWwKICBvYmplY3RBdHRyaWJ1dGVzLnB1dCgidXNlck5hbWUiLCBvYmplY3RBdHRyaWJ1dGVzLmdldCgibWFpbCIpKQp9CgoKc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgb2JqZWN0QXR0cmlidXRlcyk7Ci8vc2hhcmVkU3RhdGUucHV0KCJ1c2VybmFtZSIsIG1haWwpCgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -6014,20 +5890,24 @@ }, { "name": "content-length", - "value": "1296" + "value": "925" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -6037,14 +5917,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:20.405Z", - "time": 69, + "startedDateTime": "2024-06-19T21:28:24.859Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -6052,11 +5932,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 69 + "wait": 51 } }, { - "_id": "d3af4f4c72e384f18ea7e6e408bf5d8c", + "_id": "94b6f5831f71f65277b35a24d9930465", "_order": 0, "cache": {}, "request": { @@ -6068,16 +5948,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -6087,28 +5967,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1646, + "headersSize": 1672, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Scripted Module - Server Side\"" + "value": "name eq \"Format Username\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Scripted%20Module%20-%20Server%20Side%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Format%20Username%22" }, "response": { - "bodySize": 4699, + "bodySize": 577, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 4699, - "text": "{\"result\":[{\"_id\":\"7e3d7067-d50f-4674-8c76-a3e13a810c33\",\"name\":\"Scripted Module - Server Side\",\"description\":\"Default global script for server side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgp2YXIgU1RBUlRfVElNRSA9IDk7ICAvLyA5YW0KdmFyIEVORF9USU1FICAgPSAxNzsgLy8gNXBtCnZhciBsb25naXR1ZGUsIGxhdGl0dWRlOwp2YXIgbG9jYWxUaW1lOwoKbG9nZ2VyLm1lc3NhZ2UoIlN0YXJ0aW5nIHNjcmlwdGVkIGF1dGhlbnRpY2F0aW9uIik7CmxvZ2dlci5tZXNzYWdlKCJVc2VyOiAiICsgdXNlcm5hbWUpOwoKdmFyIHVzZXJQb3N0YWxBZGRyZXNzID0gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKTsKbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgYWRkcmVzczogIiArIHVzZXJQb3N0YWxBZGRyZXNzKTsKCmdldExvbmdpdHVkZUxhdGl0dWRlRnJvbVVzZXJQb3N0YWxBZGRyZXNzKCk7CmdldExvY2FsVGltZSgpOwoKbG9nZ2VyLm1lc3NhZ2UoIkN1cnJlbnQgdGltZSBhdCB0aGUgdXNlcnMgbG9jYXRpb246ICIgKyBsb2NhbFRpbWUuZ2V0SG91cnMoKSk7CmlmIChsb2NhbFRpbWUuZ2V0SG91cnMoKSA8IFNUQVJUX1RJTUUgfHwgbG9jYWxUaW1lLmdldEhvdXJzKCkgPiBFTkRfVElNRSkgewogICAgbG9nZ2VyLmVycm9yKCJMb2dpbiBmb3JiaWRkZW4gb3V0c2lkZSB3b3JrIGhvdXJzISIpOwogICAgYXV0aFN0YXRlID0gRkFJTEVEOwp9IGVsc2UgewogICAgbG9nZ2VyLm1lc3NhZ2UoIkF1dGhlbnRpY2F0aW9uIGFsbG93ZWQhIik7CiAgICBhdXRoU3RhdGUgPSBTVUNDRVNTOwp9CgpmdW5jdGlvbiBnZXRMb25naXR1ZGVMYXRpdHVkZUZyb21Vc2VyUG9zdGFsQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlclBvc3RhbEFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwogICAgICAvL3RoZSBhYm92ZSBVUkkgaGFzIHRvIGJlIGV4dGVuZGVkIHdpdGggYW4gQVBJX0tFWSBpZiB1c2VkIGluIGEgZnJlcXVlbnQgbWFubmVyCiAgICAgIC8vc2VlIGRvY3VtZW50YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9nZW9jb2RpbmcvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIGdlb2NvZGUgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIHZhciBpOwogICAgZm9yIChpID0gMDsgaSA8IGdlb2NvZGUucmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciByZXN1bHQgPSBnZW9jb2RlLnJlc3VsdHNbaV07CiAgICAgICAgbGF0aXR1ZGUgPSByZXN1bHQuZ2VvbWV0cnkubG9jYXRpb24ubGF0OwogICAgICAgIGxvbmdpdHVkZSA9IHJlc3VsdC5nZW9tZXRyeS5sb2NhdGlvbi5sbmc7CgogICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJsYXRpdHVkZToiICsgbGF0aXR1ZGUgKyAiIGxvbmdpdHVkZToiICsgbG9uZ2l0dWRlKTsKICAgIH0KfQoKZnVuY3Rpb24gZ2V0TG9jYWxUaW1lKCkgewoKICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7CiAgICB2YXIgbG9jYXRpb24gPSAibG9jYXRpb249IiArIGxhdGl0dWRlICsgIiwiICsgbG9uZ2l0dWRlOwogICAgdmFyIHRpbWVzdGFtcCA9ICJ0aW1lc3RhbXA9IiArIG5vdzsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS90aW1lem9uZS9qc29uPyIgKyBsb2NhdGlvbiArICImIiArIHRpbWVzdGFtcCk7CiAgICAgIHJlcXVlc3Quc2V0TWV0aG9kKCJHRVQiKTsKICAgICAgLy90aGUgYWJvdmUgVVJJIGhhcyB0byBiZSBleHRlbmRlZCB3aXRoIGFuIEFQSV9LRVkgaWYgdXNlZCBpbiBhIGZyZXF1ZW50IG1hbm5lcgogICAgICAvL3NlZSBkb2N1bWVudGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vdGltZXpvbmUvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIHRpbWV6b25lID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICB2YXIgbG9jYWxUaW1lc3RhbXAgPSBwYXJzZUludChub3cpICsgcGFyc2VJbnQodGltZXpvbmUuZHN0T2Zmc2V0KSArIHBhcnNlSW50KHRpbWV6b25lLnJhd09mZnNldCk7CiAgICBsb2NhbFRpbWUgPSBuZXcgRGF0ZShsb2NhbFRpbWVzdGFtcCoxMDAwKTsKfQoKZnVuY3Rpb24gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKSB7CiAgICB2YXIgdXNlckFkZHJlc3NTZXQgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCAicG9zdGFsQWRkcmVzcyIpOwogICAgaWYgKHVzZXJBZGRyZXNzU2V0ID09IG51bGwgfHwgdXNlckFkZHJlc3NTZXQuaXNFbXB0eSgpKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIGFkZHJlc3Mgc3BlY2lmaWVkIGZvciB1c2VyOiAiICsgdXNlcm5hbWUpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKQp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 577, + "text": "{\"result\":[{\"_id\":\"223739f3-9c54-43b7-9572-3c5338786145\",\"name\":\"Format Username\",\"description\":\"null\",\"script\":\"dmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpOwoKc2hhcmVkU3RhdGUucHV0KCJkaXNwbGF5TmFtZSIsIHVzZXJuYW1lKTsKb3V0Y29tZSA9ICJjb250aW51ZSI7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -6158,20 +6042,24 @@ }, { "name": "content-length", - "value": "4699" + "value": "577" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -6181,14 +6069,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:20.481Z", - "time": 62, + "startedDateTime": "2024-06-19T21:28:24.914Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -6196,11 +6084,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 62 + "wait": 53 } }, { - "_id": "11fc76fd2f9a228b971725c8a994284b", + "_id": "5815d86994223e9f331ece096e7b80d0", "_order": 0, "cache": {}, "request": { @@ -6212,16 +6100,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -6231,28 +6119,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1641, + "headersSize": 1677, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Custom Device Match Script\"" + "value": "name eq \"My Example Library\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Custom%20Device%20Match%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22My%20Example%20Library%22" }, "response": { - "bodySize": 542, + "bodySize": 864, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 542, - "text": "{\"result\":[{\"_id\":\"d58977ed-0542-4147-8197-973ef7300191\",\"name\":\"Custom Device Match Script\",\"description\":\"Custom Device Match Script\",\"script\":\"LyoKICogQ3VzdG9tIERldmljZSBNYXRjaCBTY3JpcHQKICovCgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 864, + "text": "{\"result\":[{\"_id\":\"2c38c998-aec0-4e56-8d46-bff6e24a704e\",\"name\":\"My Example Library\",\"description\":\"My Example Library\",\"script\":\"dmFyIGkgPSAwOwoKZnVuY3Rpb24gYWRkKGopIHtpICs9IGp9OwpmdW5jdGlvbiBsb2dUb3RhbChsb2cpIHsgbG9nLmluZm8oIlRvdGFsOiAiICsgaSkgfTsKCi8vIGV4cG9ydCBjb25zdGFudApleHBvcnRzLk1TRyA9ICdGaW5hbCBzdW0nOwoKLy8gZXhwb3J0IGZ1bmN0aW9ucwpleHBvcnRzLmFkZCA9IGFkZDsKZXhwb3J0cy5sb2dUb3RhbCA9IGxvZ1RvdGFsOwoKLy9kaXJlY3QgZXhwb3J0IHVzaW5nIGFuIGlubGluZSBkZWNsYXJhdGlvbgpleHBvcnRzLmxvZ1RvdGFsV2l0aE1lc3NhZ2UgPSAobG9nLCBtZXNzYWdlKSA9PiBsb2cuaW5mbyhtZXNzYWdlICsgIjogIiArIGkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -6302,20 +6194,24 @@ }, { "name": "content-length", - "value": "542" + "value": "864" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -6325,14 +6221,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 773, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:20.555Z", - "time": 61, + "startedDateTime": "2024-06-19T21:28:24.972Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -6340,11 +6236,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 61 + "wait": 51 } }, { - "_id": "cd03ce6bab1791470b0a5e2b82b846e7", + "_id": "485f6b9ace3f0b78fc8fab7ff58f08f6", "_order": 0, "cache": {}, "request": { @@ -6356,16 +6252,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -6375,28 +6271,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1650, + "headersSize": 1677, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"SAML2 IDP Attribute Mapper Script\"" + "value": "name eq \"Impossible Traveller\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22SAML2%20IDP%20Attribute%20Mapper%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Impossible%20Traveller%22" }, "response": { - "bodySize": 10711, + "bodySize": 3466, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 10711, - "text": "{\"result\":[{\"_id\":\"c4f22465-2368-4e27-8013-e6399974fd48\",\"name\":\"SAML2 IDP Attribute Mapper Script\",\"description\":\"Default global script for SAML2 IDP Attribute Mapper\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSBvYmplY3RzIGZvciB0aGUgSURQIGZyYW1ld29yayB0byBpbnNlcnQgaW50byB0aGUgZ2VuZXJhdGVkIEFzc2VydGlvbi4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgICAgICBUaGUgaG9zdGVkIGVudGl0eSBJRC4KICogcmVtb3RlRW50aXR5SWQgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgICAgVGhlIHJlbW90ZSBlbnRpdHkgSUQuCiAqIHJlYWxtIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGluZyB0by4KICogbG9nZ2VyIC0gQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5TQU1MMl9JRFBfQVRUUklCVVRFX01BUFBFUgogKiBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgLSBJZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgKDIpCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFuIElkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlciBpbnN0YW5jZSBjb250YWluaW5nIG1ldGhvZHMgdXNlZCBmb3IgSURQIGF0dHJpYnV0ZSBtYXBwaW5nLgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb246CiAqICAgICAgLSBvbiBmYWlsaW5nIHRvIG1hcCB0aGUgSURQIGF0dHJpYnV0ZXMuCiAqCiAqIFJldHVybiAtIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSAoMykgb2JqZWN0cy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgSWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaHRtbC4KICogKDMpIEF0dHJpYnV0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9hc3NlcnRpb24vQXR0cmlidXRlLmh0bWwuCiAqLwoKLyoqCiAqIERlZmF1bHQgU0FNTDIgSURQIEF0dHJpYnV0ZSBNYXBwZXIuCiAqLwpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKCkgewogICAgdmFyIGZySmF2YSA9IEphdmFJbXBvcnRlcigKICAgICAgICBjb20uc3VuLmlkZW50aXR5LnNhbWwyLmNvbW1vbi5TQU1MMkV4Y2VwdGlvbgogICAgKTsKCiAgICBjb25zdCBkZWJ1Z01ldGhvZCA9ICJTY3JpcHRlZElEUEF0dHJpYnV0ZU1hcHBlci5nZXRBdHRyaWJ1dGVzOjogIjsKCiAgICB0cnkgewoKICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1Nlc3Npb25WYWxpZChzZXNzaW9uKSkgewogICAgICAgICAgICBsb2dnZXIuZXJyb3IoZGVidWdNZXRob2QgKyAiSW52YWxpZCBzZXNzaW9uLiIpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHZhciBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0UmVtb3RlU1BDb25maWdBdHRyaWJ1dGVNYXAocmVhbG0sIHJlbW90ZUVudGl0eUlkKTsKICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJSZW1vdGUgU1AgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICBpZiAoY29uZmlnTWFwID09IG51bGwgfHwgY29uZmlnTWFwLmlzRW1wdHkoKSkgewogICAgICAgICAgICBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0SG9zdGVkSURQQ29uZmlnQXR0cmlidXRlTWFwKHJlYWxtLCBob3N0ZWRFbnRpdHlJZCk7CiAgICAgICAgICAgIGlmIChjb25maWdNYXAgPT0gbnVsbCB8fCBjb25maWdNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJDb25maWd1cmF0aW9uIG1hcCBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKGRlYnVnTWV0aG9kICsgIkhvc3RlZCBJRFAgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICB9CgogICAgICAgIHZhciBhdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoKTsKICAgICAgICB2YXIgc3RyaW5nVmFsdWVNYXAgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKICAgICAgICB2YXIgYmluYXJ5VmFsdWVNYXA7CiAgICAgICAgdmFyIGxvY2FsQXR0cmlidXRlOwoKICAgICAgICAvLyBEb24ndCB0cnkgdG8gcmVhZCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBkYXRhc3RvcmUgaWYgdGhlIGlnbm9yZWQgcHJvZmlsZSBpcyBlbmFibGVkIGluIHRoaXMgcmVhbG0uCiAgICAgICAgaWYgKCFpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaXNJZ25vcmVkUHJvZmlsZShzZXNzaW9uLCByZWFsbSkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIFJlc29sdmUgYXR0cmlidXRlcyB0byBiZSByZWFkIGZyb20gdGhlIGRhdGFzdG9yZS4KICAgICAgICAgICAgICAgIHZhciBzdHJpbmdBdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KCk7CiAgICAgICAgICAgICAgICB2YXIgYmluYXJ5QXR0cmlidXRlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgIHdoaWxlIChrZXlJdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlJdGVyLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBsb2NhbEF0dHJpYnV0ZSA9IGNvbmZpZ01hcC5nZXQoa2V5KTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1N0YXRpY0F0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc0JpbmFyeUF0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHRyZWF0IGFzIGJlaW5nIGJpbmFyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5QXR0cmlidXRlcy5hZGQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLnJlbW92ZUJpbmFyeUF0dHJpYnV0ZUZsYWcobG9jYWxBdHRyaWJ1dGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMuYWRkKGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXN0cmluZ0F0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWVNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0QXR0cmlidXRlcyhzZXNzaW9uLCBzdHJpbmdBdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghYmluYXJ5QXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBiaW5hcnlWYWx1ZU1hcCA9IGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5nZXRCaW5hcnlBdHRyaWJ1dGVzKHNlc3Npb24sIGJpbmFyeUF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGRlYnVnTWV0aG9kICsgIkVycm9yIGFjY2Vzc2luZyB0aGUgZGF0YXN0b3JlLiAiICsgZXJyb3IpOwogICAgICAgICAgICAgICAgLy9jb250aW51ZSB0byBjaGVjayBpbiBzc290b2tlbi4KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICB3aGlsZSAoa2V5SXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgdmFyIGtleSA9IGtleUl0ZXIubmV4dCgpCiAgICAgICAgICAgIHZhciBuYW1lRm9ybWF0ID0gbnVsbDsKICAgICAgICAgICAgdmFyIHNhbWxBdHRyaWJ1dGUgPSBrZXk7CiAgICAgICAgICAgIGxvY2FsQXR0cmlidXRlID0gY29uZmlnTWFwLmdldChrZXkpOwogICAgICAgICAgICAvLyBjaGVjayBpZiBzYW1sQXR0cmlidXRlIGhhcyBmb3JtYXQgbmFtZUZvcm1hdHxzYW1sQXR0cmlidXRlCiAgICAgICAgICAgIHZhciBzYW1sQXR0cmlidXRlcyA9IFN0cmluZyhuZXcgamF2YS5sYW5nLlN0cmluZyhzYW1sQXR0cmlidXRlKSk7CiAgICAgICAgICAgIHZhciB0b2tlbnMgPSBzYW1sQXR0cmlidXRlcy5zcGxpdCgnfCcpOwoKICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICBuYW1lRm9ybWF0ID0gdG9rZW5zWzBdOwogICAgICAgICAgICAgICAgc2FtbEF0dHJpYnV0ZSA9IHRva2Vuc1sxXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVZhbHVlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzU3RhdGljQXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdGF0aWMgZmxhZyBiZWZvcmUgdXNpbmcgaXQgYXMgdGhlIHN0YXRpYyB2YWx1ZQogICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlU3RhdGljQXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoW2xvY2FsQXR0cmlidXRlXSk7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJBZGRpbmcgc3RhdGljIHZhbHVlIHt9IGZvciBhdHRyaWJ1dGUgbmFtZWQge30iLCBsb2NhbEF0dHJpYnV0ZSwgc2FtbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzQmluYXJ5QXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZmxhZyBhcyBub3QgdXNlZCBmb3IgbG9va3VwCiAgICAgICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlQmluYXJ5QXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzID0gaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldEJpbmFyeUF0dHJpYnV0ZVZhbHVlcyhzYW1sQXR0cmlidXRlLCBsb2NhbEF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5VmFsdWVNYXApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWVNYXAgIT0gbnVsbCAmJiAhc3RyaW5nVmFsdWVNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlcyA9IHN0cmluZ1ZhbHVlTWFwLmdldChsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoZGVidWdNZXRob2QgKyAie30gc3RyaW5nIHZhbHVlIG1hcCB3YXMgZW1wdHkgb3IgbnVsbC4iLCBsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSB1c2VycyBzc29Ub2tlbgogICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlcyA9PSBudWxsIHx8IGF0dHJpYnV0ZVZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJVc2VyIHByb2ZpbGUgZG9lcyBub3QgaGF2ZSB2YWx1ZSBmb3Ige30sIGNoZWNraW5nIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldFByb3BlcnR5U2V0KHNlc3Npb24sIGxvY2FsQXR0cmlidXRlKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZXMgPT0gbnVsbCB8fCBhdHRyaWJ1dGVWYWx1ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJ7fSBub3QgZm91bmQgaW4gdXNlciBwcm9maWxlIG9yIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuYWRkKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5jcmVhdGVTQU1MQXR0cmlidXRlKHNhbWxBdHRyaWJ1dGUsIG5hbWVGb3JtYXQsIGF0dHJpYnV0ZVZhbHVlcykpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXR0cmlidXRlczsKCiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGxvZ2dlci5lcnJvcihkZWJ1Z01ldGhvZCArICJFcnJvciBtYXBwaW5nIElEUCBhdHRyaWJ1dGVzLiAiICsgZXJyb3IpOwogICAgICAgIHRocm93IG5ldyBmckphdmEuU0FNTDJFeGNlcHRpb24oZXJyb3IpOwogICAgfQp9CgpnZXRBdHRyaWJ1dGVzKCk7\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ATTRIBUTE_MAPPER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 3466, + "text": "{\"result\":[{\"_id\":\"d030f9fb-6d2d-4f5a-834d-b4f6304b8eb9\",\"name\":\"Impossible Traveller\",\"description\":\"null\",\"script\":\"Ly8gR2VvVmVsb2NpdHkgLyBJbXBvc3NpYmxlIEpvdXJuZXkgYXV0aGVudGljYXRpb24gc2NyaXB0Ci8vCi8vIE91dGNvbWVzIGZvciB0aGlzIHNjcmlwdCBhcmU6Ci8vICAgICAibm9Mb2NhdGlvbiIgLSB0aGUgZGV2aWNlJ3MgY3VycmVudCBsb2NhdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIHNoYXJlZFN0YXRlCi8vICAgICAibm9IaXN0b3J5IiAgLSB0aGUgdXNlcidzIHByb2ZpbGUgZG9lc24ndCB5ZXQgY29udGFpbiBwcmV2aW91cyBkZXZpY2UgaGlzdG9yeQovLyAgICAgIm9rIiAgICAgICAgIC0gdGhlIHVzZXIncyBnZW92ZWxvY2l0eSBpcyBsb3dlciB0aGFuIHRoZSBtYXggYWNjZXB0YWJsZSBzcGVlZAovLyAgICAgICAiaW1wb3NzaWJsZSIgLSB0aGUgdXNlcidzIGdlb3ZlbG9jaXR5IGV4Y2VlZHMgbWF4IGFjY2VwdGFibGUgc3BlZWQKTUFYX1ZFTE9DSVRZPTMwMApmdW5jdGlvbiBjYWxjdWxhdGVEaXN0YW5jZShmaXJzdCwgc2Vjb25kKSB7CiAgICB2YXIgZmFjdG9yID0gKE1hdGguUEkgLyAxODApLAogICAgICAgIHRoZXRhLAogICAgICAgIGRpc3Q7CiAgICBmdW5jdGlvbiBkZWdyZWVzVG9SYWRpYW5zKGRlZ3JlZXMpIHsKICAgICAgICByZXR1cm4gZGVncmVlcyAqIGZhY3RvcjsKICAgIH0KICAgIGZ1bmN0aW9uIHJhZGlhbnNUb0RlZ3JlZXMocmFkaWFucykgewogICAgICAgIHJldHVybiByYWRpYW5zIC8gZmFjdG9yOwogICAgfQogICAgdGhldGEgPSBmaXJzdC5sb25naXR1ZGUgLSBzZWNvbmQubG9uZ2l0dWRlOwogICAgZGlzdCA9IE1hdGguc2luKGRlZ3JlZXNUb1JhZGlhbnMoZmlyc3QubGF0aXR1ZGUpKSAqIE1hdGguc2luKGRlZ3JlZXNUb1JhZGlhbnMoc2Vjb25kLmxhdGl0dWRlKSkgKwogICAgICAgIE1hdGguY29zKGRlZ3JlZXNUb1JhZGlhbnMoZmlyc3QubGF0aXR1ZGUpKSAqIE1hdGguY29zKGRlZ3JlZXNUb1JhZGlhbnMoc2Vjb25kLmxhdGl0dWRlKSkgKgogICAgICAgIE1hdGguY29zKGRlZ3JlZXNUb1JhZGlhbnModGhldGEpKTsKICAgIGRpc3QgPSBNYXRoLmFjb3MoZGlzdCk7CiAgICBkaXN0ID0gcmFkaWFuc1RvRGVncmVlcyhkaXN0KTsKICAgIGRpc3QgPSBkaXN0ICogNjAgKiAxLjE1MTU7CiAgICByZXR1cm4gZGlzdDsKfTsKdmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKLy9kZXZpY2VzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZSh1c2VybmFtZSwgImRldmljZVByb2ZpbGVzIikudG9BcnJheSgpOwpsb2dpbkhpc3RvcnkgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCAiZnItYXR0ci1pbXVsdGkxIikudG9BcnJheSgpOwppZiAobG9naW5IaXN0b3J5Lmxlbmd0aCA9PSAwKSBvdXRjb21lID0gIm5vSGlzdG9yeSI7CmVsc2UgewogICAgICBvdXRjb21lID0gIm5vTG9jYXRpb24iOwogICAgICBpZiAoc2hhcmVkU3RhdGUuY29udGFpbnNLZXkoImZvcmdlUm9jay5kZXZpY2UucHJvZmlsZSIpICYmIHNoYXJlZFN0YXRlLmdldCgiZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlIikuY29udGFpbnNLZXkoImxvY2F0aW9uIikpIHsKICAgICAgICB2YXIgdGhpc0RldmljZSA9IHNoYXJlZFN0YXRlLmdldCgiZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlIik7CiAgICAgICAgICBvdXRjb21lID0gIm9rIjsKICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpCiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxvZ2luSGlzdG9yeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIHZhciBlbnRyeSA9IEpTT04ucGFyc2UobG9naW5IaXN0b3J5W2ldKTsKICAgICAgICAgICAgICB2YXIgbGFzdFNlbGVjdGVkRGF0ZSA9IGVudHJ5WyJsYXN0U2VsZWN0ZWREYXRlIl07CiAgICAgICAgICAgICAgdmFyIGxhc3RMb2NhdGlvbiA9IGVudHJ5WyJsb2NhdGlvbiJdOwogICAgICAgICAgICAgIHZhciB0aW1lRGlmZiA9IG5vdyAtIHBhcnNlSW50KGxhc3RTZWxlY3RlZERhdGUpOwogICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBjYWxjdWxhdGVEaXN0YW5jZSh7ICJsYXRpdHVkZSI6IHRoaXNEZXZpY2UuZ2V0KCJsb2NhdGlvbiIpLmdldCgibGF0aXR1ZGUiKSwgImxvbmdpdHVkZSI6IHRoaXNEZXZpY2UuZ2V0KCJsb2NhdGlvbiIpLmdldCgibG9uZ2l0dWRlIikgfSwgbGFzdExvY2F0aW9uKTsKICAgICAgICAgICAgICB2ZWxvY2l0eSA9IGRpc3RhbmNlIC8gKHRpbWVEaWZmIC8gMzYwMDAwMCk7CiAgICAgICAgICAgICAgaWYgKHZlbG9jaXR5ID4gTUFYX1ZFTE9DSVRZKSBvdXRjb21lID0gImltcG9zc2libGUiOwogICAgICAgIH0KICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -6444,18 +6344,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "content-length", + "value": "3466" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -6463,20 +6371,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:20.624Z", - "time": 74, + "startedDateTime": "2024-06-19T21:28:25.028Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -6484,11 +6388,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 74 + "wait": 53 } }, { - "_id": "8fed64e04407bbd842030f4d52b6a67e", + "_id": "65ed6dc43f368c735b1a0551b4cc17da", "_order": 0, "cache": {}, "request": { @@ -6500,16 +6404,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -6519,28 +6423,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1640, + "headersSize": 1685, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Yahoo Profile Normalization\"" + "value": "name eq \"Alpha OIDC Claims Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Yahoo%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Alpha%20OIDC%20Claims%20Script%22" }, "response": { - "bodySize": 1546, + "bodySize": 41562, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1546, - "text": "{\"result\":[{\"_id\":\"424da748-82cc-4b54-be6f-82bd64d82a74\",\"name\":\"Yahoo Profile Normalization\",\"description\":\"Normalizes raw profile data from Yahoo\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 41562, + "text": "{\"result\":[{\"_id\":\"cf3515f0-8278-4ee3-a530-1bad7424c416\",\"name\":\"Alpha OIDC Claims Script\",\"description\":\"Default alpha realm script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -6589,21 +6497,25 @@ "value": "application/json;charset=UTF-8" }, { - "name": "content-length", - "value": "1546" + "name": "transfer-encoding", + "value": "chunked" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -6613,14 +6525,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 800, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:20.706Z", - "time": 65, + "startedDateTime": "2024-06-19T21:28:25.086Z", + "time": 56, "timings": { "blocked": -1, "connect": -1, @@ -6628,11 +6540,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 65 + "wait": 56 } }, { - "_id": "e4bae345254e0df9bfa0f0633bad19e0", + "_id": "a66d8fba03800d3791c7f6cfc04cbcc5", "_order": 0, "cache": {}, "request": { @@ -6643,17 +6555,17 @@ "name": "accept", "value": "application/json, text/plain, */*" }, + { + "name": "content-type", + "value": "application/json" + }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" - }, - { - "name": "content-type", - "value": "application/json" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -6663,28 +6575,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1644, + "headersSize": 1688, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"VKontakte Profile Normalization\"" + "value": "name eq \"Save Mobile OATH Preference\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22VKontakte%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Save%20Mobile%20OATH%20Preference%22" }, "response": { - "bodySize": 1502, + "bodySize": 813, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1502, - "text": "{\"result\":[{\"_id\":\"403cf226-6051-4368-8b72-9ba14f9a5140\",\"name\":\"VKontakte Profile Normalization\",\"description\":\"Normalizes raw profile data from VKontakte\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGhvdG9fNTApLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 813, + "text": "{\"result\":[{\"_id\":\"0ca79cb0-ea11-4e87-adac-7f8aeebc8c03\",\"name\":\"Save Mobile OATH Preference\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkKKTsKd2l0aCAoZnIpIHsKICAKICB2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCiAgdmFyIG1mYVByZWZBdHRyaWJ1dGUgPSAiZnItYXR0ci1pbXVsdGkyIgogIHZhciBtZmFUeXBlID0gIiI7CiAgCiAgaWRSZXBvc2l0b3J5LmFkZEF0dHJpYnV0ZSh1c2VybmFtZSwgbWZhUHJlZkF0dHJpYnV0ZSwgWyJvYXRoIl0pOwogIAogIG91dGNvbWUgPSAidHJ1ZSIKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -6734,20 +6650,24 @@ }, { "name": "content-length", - "value": "1502" + "value": "813" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -6757,14 +6677,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:20.780Z", - "time": 57, + "startedDateTime": "2024-06-19T21:28:25.147Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -6772,11 +6692,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 57 + "wait": 52 } }, { - "_id": "edb15723eb51503d9ba902a83ea36e7c", + "_id": "bb0185bbe618edf37b3b81573659c176", "_order": 0, "cache": {}, "request": { @@ -6788,16 +6708,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -6807,28 +6727,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1642, + "headersSize": 1676, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Config Provider Node Script\"" + "value": "name eq \"Set New Favourite\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Config%20Provider%20Node%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Set%20New%20Favourite%22" }, "response": { - "bodySize": 4602, + "bodySize": 1811, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 4602, - "text": "{\"result\":[{\"_id\":\"5e854779-6ec1-4c39-aeba-0477e0986646\",\"name\":\"Config Provider Node Script\",\"description\":\"Script to provide values for a config provider node\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKioKICogVGhlIGZvbGxvd2luZyBzY3JpcHQgaXMgYSBzaW1wbGlmaWVkIHRlbXBsYXRlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0byBidWlsZAogKiB1cCBhIGNvbmZpZyBNYXAgb2JqZWN0IHdpdGggY3VzdG9tIHZhbHVlcy4gVGhlIENvbmZpZyBQcm92aWRlciBOb2RlIHdpbGwgdGhlbgogKiBwcm92aWRlIHRoaXMgY29uZmlnIE1hcCB0byB0aGUgZGVzaXJlZCBub2RlIHR5cGUuIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBNYXAKICogeW91IGJ1aWxkIGhlcmUgaXMgbmFtZWQgJ2NvbmZpZycuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKgogKiBub2RlU3RhdGUgLSBOb2RlIFN0YXRlICgxKQogKiAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoaXMgcmVwcmVzZW50cyB0aGUgY3VycmVudCB2YWx1ZXMgc3RvcmVkIGluIHRoZSBub2RlIHN0YXRlLgogKgogKiBpZFJlcG9zaXRvcnkgLSBQcm9maWxlIERhdGEgKDIpCiAqICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgYSByZXBvc2l0b3J5IHRvIHJldHJpZXZlIHVzZXIgaW5mb3JtYXRpb24uCiAqCiAqIHNlY3JldHMgLSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAoMykKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBTZWNyZXRzIEFQSSBmcm9tIGEgc2NyaXB0aW5nIGNvbnRleHQuCiAqCiAqIHJlcXVlc3RIZWFkZXJzICg0KSAtIE1hcCAoNSkKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIGZvciBhY2Nlc3NpbmcgaGVhZGVycyBpbiB0aGUgbG9naW4gcmVxdWVzdC4KICoKICogbG9nZ2VyIC0gRGVidWcgTG9nZ2luZyAoNikKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2UuCiAqCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoNykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cy4KICoKICogcmVhbG0gLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqCiAqIGV4aXN0aW5nU2Vzc2lvbiAtIE1hcDxTdHJpbmcsIFN0cmluZz4gKDUpCiAqICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LiBUaGUgcmV0dXJuZWQgbWFwIGZyb20KICogICAgICAgICAgU1NPVG9rZW4uZ2V0UHJvcGVydGllcygpICg4KQogKgogKiByZXF1ZXN0UGFyYW1ldGVycyAtIE1hcCAoNSkKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBwYXJhbWV0ZXJzLgogKgogKgogKiBPdXRwdXRzOgogKgogKiBjb25maWcgLSBNYXAgKDUpCiAqICAgICAgICAgICBEZWZpbmUgYW5kIGZpbGwgYSBNYXAgb2JqZWN0IG5hbWVkICdjb25maWcnIHdpdGggY3VzdG9tIHZhbHVlcywgdGhpcyB3aWxsIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlCiAqICAgICAgICAgICBhc3NvY2lhdGVkIG5vZGUgc2VsZWN0ZWQgaW4gdGhlIENvbmZpZ1Byb3ZpZGVyTm9kZS4KICoKICogUmVmZXJlbmNlOgogKiAoMSkgTm9kZSBTdGF0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9pZGNsb3VkLWFtL2xhdGVzdC9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtbm9kZVN0YXRlCiAqICgyKSBQcm9maWxlIERhdGEgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4xL2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1pZC1yZXBvCiAqICgzKSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjEvYXV0aGVudGljYXRpb24tZ3VpZGUvc2NyaXB0aW5nLWFwaS1ub2RlLmh0bWwjc2NyaXB0aW5nLWFwaS1hdXRobi1zZWNyZXRzCiAqICg0KSBSZXF1ZXN0IEhlYWRlcnMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtcmVxdWVzdEhlYWRlcnMuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL01hcC5odG1sCiAqICg2KSBEZWJ1ZyBMb2dnaW5nIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogKDcpIEhUVFAgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg4KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqLwoKY29uZmlnID0gewogICAgImtleTAiOiB7InN1YktleSI6ICJ2YWx1ZTAifSwKICAgICJrZXkxIjogInZhbHVlMSIKfTs=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"CONFIG_PROVIDER_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1811, + "text": "{\"result\":[{\"_id\":\"e3b1018f-1b2e-4e96-9950-087bdfa13d6d\",\"name\":\"Set New Favourite\",\"description\":\"null\",\"script\":\"ZnVuY3Rpb24gZ2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSkgewogIHZhciBpZCA9IHNoYXJlZFN0YXRlLmdldCgnX2lkJyk7CiAgdmFyIGZySWRtQ3VzdG9tQXR0cmlidXRlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoaWQsICdmci1pZG0tY3VzdG9tLWF0dHJzJyk7CiAgaWYgKGZySWRtQ3VzdG9tQXR0cmlidXRlcykgewogICAgICB2YXIgZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0ID0gSlNPTi5wYXJzZShTdHJpbmcoZnJJZG1DdXN0b21BdHRyaWJ1dGVzLnRvQXJyYXkoKVswXSkpOwogICAgICAgIHJldHVybiBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdOwogIH0KfQoKZnVuY3Rpb24gc2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSxjdXN0b21BdHRyVmFsdWUpIHsKICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCAnZnItaWRtLWN1c3RvbS1hdHRycycpOwogIGlmIChmcklkbUN1c3RvbUF0dHJpYnV0ZXMpIHsKICAgIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QgPSBKU09OLnBhcnNlKFN0cmluZyhmcklkbUN1c3RvbUF0dHJpYnV0ZXMudG9BcnJheSgpWzBdKSk7CiAgICBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdID0gY3VzdG9tQXR0clZhbHVlOwogICAgdmFyIGpzb25fc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0KTsKICAgIGlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoaWQsICJmci1pZG0tY3VzdG9tLWF0dHJzIixbanNvbl9zdHJpbmddKTsKICB9Cn0KCnZhciBhdHRyID0gZ2V0Q3VzdG9tQXR0clZhbHVlKCJjdXN0b21fZmF2b3VyaXRlRmFjdG9yIik7CmlmICghYXR0cil7CnNldEN1c3RvbUF0dHJWYWx1ZSAoImN1c3RvbV9mYXZvdXJpdGVGYWN0b3IiLCJXZWJBdXRoTiIpOwp9CgoKCm91dGNvbWUgPSAidHJ1ZSI7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -6878,20 +6802,24 @@ }, { "name": "content-length", - "value": "4602" + "value": "1811" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -6901,14 +6829,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:20.845Z", - "time": 94, + "startedDateTime": "2024-06-19T21:28:25.204Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -6916,11 +6844,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 94 + "wait": 51 } }, { - "_id": "65ed6dc43f368c735b1a0551b4cc17da", + "_id": "d8b36e9647bacb5fb5169afeae53598f", "_order": 0, "cache": {}, "request": { @@ -6932,16 +6860,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -6951,28 +6879,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1639, + "headersSize": 1661, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Alpha OIDC Claims Script\"" + "value": "name eq \"shared\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Alpha%20OIDC%20Claims%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22shared%22" }, "response": { - "bodySize": 41562, + "bodySize": 814, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 41562, - "text": "{\"result\":[{\"_id\":\"cf3515f0-8278-4ee3-a530-1bad7424c416\",\"name\":\"Alpha OIDC Claims Script\",\"description\":\"Default alpha realm script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 814, + "text": "{\"result\":[{\"_id\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"name\":\"shared\",\"description\":\"set the same shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdzaGFyZWRWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzaGFyZWQgYWNyb3NzIGFsbCBuZXN0ZWQgam91cm5leXMuIEl0IGNvbnRhaW5zIGFuIGluZGljYXRvciBpbiB3aGljaCBsZXZlbCBpdCB3YXMgbGFzdCBzZXQuJyk7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -7020,18 +6952,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "content-length", + "value": "814" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -7039,20 +6979,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:20.945Z", - "time": 69, + "startedDateTime": "2024-06-19T21:28:25.260Z", + "time": 55, "timings": { "blocked": -1, "connect": -1, @@ -7060,11 +6996,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 69 + "wait": 55 } }, { - "_id": "92a7bd7f1355ae753e4e937db47d63cd", + "_id": "d7355a4b7f7900930cfa14fc0e22eef6", "_order": 0, "cache": {}, "request": { @@ -7076,16 +7012,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -7095,28 +7031,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1656, + "headersSize": 1660, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"OAuth2 Access Token Modification Script\"" + "value": "name eq \"Dummy\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20Access%20Token%20Modification%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Dummy%22" }, "response": { - "bodySize": 10093, + "bodySize": 452, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 10093, - "text": "{\"result\":[{\"_id\":\"d22f9a0c-426a-4466-b95e-d0f125b0d5fa\",\"name\":\"OAuth2 Access Token Modification Script\",\"description\":\"Default global script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 452, + "text": "{\"result\":[{\"_id\":\"4c963bb3-7084-43d0-bcdc-a47482cf1825\",\"name\":\"Dummy\",\"description\":\"Dummy\",\"script\":\"Cm91dGNvbWUgPSAidHJ1ZSI7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -7164,18 +7104,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "content-length", + "value": "452" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -7183,20 +7131,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:21.029Z", - "time": 63, + "startedDateTime": "2024-06-19T21:28:25.321Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -7204,11 +7148,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 63 + "wait": 52 } }, { - "_id": "a9c49b439be01d2b64c7940e0475028a", + "_id": "fec901470ad24ffd46e16c9425bc5b3b", "_order": 0, "cache": {}, "request": { @@ -7220,16 +7164,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -7239,28 +7183,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1644, + "headersSize": 1677, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Microsoft Profile Normalization\"" + "value": "name eq \"Debug Shared State\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Microsoft%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Debug%20Shared%20State%22" }, "response": { - "bodySize": 1466, + "bodySize": 1300, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1466, - "text": "{\"result\":[{\"_id\":\"73cecbfc-dad0-4395-be6a-6858ee3a80e5\",\"name\":\"Microsoft Profile Normalization\",\"description\":\"Normalizes raw profile data from Microsoft\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlOYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbk5hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5zdXJuYW1lKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1300, + "text": "{\"result\":[{\"_id\":\"634fb0b2-8873-4e78-8913-9a669e4f3816\",\"name\":\"Debug Shared State\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCik7CndpdGggKGZyKSB7CiAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgZGVidWcgPSBTdHJpbmcoIlNoYXJlZCBzdGF0ZTogIiArIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkgKyAiXFxuIik7CiAgICAgIGRlYnVnID0gU3RyaW5nKGRlYnVnICsgIlJlcXVlc3QgaGVhZGVyczogIiArIHJlcXVlc3RIZWFkZXJzLnRvU3RyaW5nKCkgKyAiXFxuIik7CiAgICAgIGlmICh0eXBlb2YgZXhpc3RpbmdTZXNzaW9uICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgZGVidWcgPSBTdHJpbmcoZGVidWcgKyAiRXhpc3Rpbmcgc2Vzc2lvbjogIiArICJcXG4iKTsKICAgICAgfSAgCiAgICAgICAgIGxvZ2dlci5lcnJvcigiSk9OSzogIiArIGRlYnVnKTsKICAgICAgc2NyaXB0ID0gU3RyaW5nKCdhbGVydCgiJytkZWJ1ZysnIik7Jyk7CiAgICAgIGFjdGlvbiA9IEFjdGlvbi5zZW5kKG5ldyBTY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2soc2NyaXB0KSkuYnVpbGQoKTsKICB9CiAgb3V0Y29tZSA9ICJ0cnVlIjsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -7310,20 +7258,24 @@ }, { "name": "content-length", - "value": "1466" + "value": "1300" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -7333,14 +7285,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:21.102Z", - "time": 62, + "startedDateTime": "2024-06-19T21:28:25.377Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -7348,11 +7300,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 62 + "wait": 53 } }, { - "_id": "da171ffe43fa0414dde04a78281c0870", + "_id": "edb389c22d25c98fc8a100c57f0da42f", "_order": 0, "cache": {}, "request": { @@ -7364,16 +7316,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -7383,28 +7335,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1641, + "headersSize": 1670, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"GitHub Profile Normalization\"" + "value": "name eq \"pwdlessCheck.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22GitHub%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22pwdlessCheck.js%22" }, "response": { - "bodySize": 1232, + "bodySize": 1093, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1232, - "text": "{\"result\":[{\"_id\":\"a7a78773-445b-4eca-bb93-409e86bced81\",\"name\":\"GitHub Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUubG9naW4pKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1093, + "text": "{\"result\":[{\"_id\":\"40a38167-2371-4d49-bbf1-e0e97ace3132\",\"name\":\"pwdlessCheck.js\",\"description\":\"null\",\"script\":\"b3V0Y29tZSA9ICJsZWdhY3kiOwp2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwppZihnZXRDdXN0b21BdHRyVmFsdWUoImN1c3RvbV9wYXNzd29yZGxlc3MiKT09dHJ1ZSkgewogIG91dGNvbWUgPSAicHdkbGVzcyI7Cn0KCmZ1bmN0aW9uIGdldEN1c3RvbUF0dHJWYWx1ZSAoY3VzdG9tQXR0ck5hbWUpCnsKICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCAnZnItaWRtLWN1c3RvbS1hdHRycycpOwogIGlmIChmcklkbUN1c3RvbUF0dHJpYnV0ZXMpCiAgewogICAgICB2YXIgZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0ID0gSlNPTi5wYXJzZShTdHJpbmcoZnJJZG1DdXN0b21BdHRyaWJ1dGVzLnRvQXJyYXkoKVswXSkpOwogICAgICAgIHJldHVybiBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdOwogIH0KfQo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -7454,20 +7410,24 @@ }, { "name": "content-length", - "value": "1232" + "value": "1093" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:21 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -7477,14 +7437,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:21.179Z", - "time": 75, + "startedDateTime": "2024-06-19T21:28:25.435Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -7492,11 +7452,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 75 + "wait": 52 } }, { - "_id": "99d259eb57c25d01ede5cf21815c8741", + "_id": "5466b43a77ca475a4e01825da5f1af63", "_order": 0, "cache": {}, "request": { @@ -7508,16 +7468,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -7527,28 +7487,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1657, + "headersSize": 1687, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Authentication Tree Decision Node Script\"" + "value": "name eq \"updateWebAuthNProfileNickname.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Authentication%20Tree%20Decision%20Node%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22updateWebAuthNProfileNickname.js%22" }, "response": { - "bodySize": 759, + "bodySize": 1238, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 759, - "text": "{\"result\":[{\"_id\":\"01e1a3c0-038b-4c16-956a-6c9d89328cff\",\"name\":\"Authentication Tree Decision Node Script\",\"description\":\"Default global script for a scripted decision node\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKb3V0Y29tZSA9ICJ0cnVlIjsK\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1238, + "text": "{\"result\":[{\"_id\":\"01bec3a8-105d-45dc-9f80-d003e1b33fa2\",\"name\":\"updateWebAuthNProfileNickname.js\",\"description\":\"null\",\"script\":\"dmFyIGlkID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKdmFyIHByb2ZpbGVzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShpZCwid2ViYXV0aG5EZXZpY2VQcm9maWxlcyIpOwp2YXIgb2JqZWN0QXR0cmlidXRlcyA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwp2YXIgbmV3Tmlja05hbWUgPSBvYmplY3RBdHRyaWJ1dGVzLmdldCgiY3VzdG9tX25pY2tuYW1lIik7Cgp2YXIgcHJvZmlsZXNBcnJheSA9IHByb2ZpbGVzLnRvQXJyYXkoKTsKCmZvciAodmFyIGk9MDsgaTxwcm9maWxlc0FycmF5Lmxlbmd0aDsgaSsrKQp7CiAgcHJvZmlsZXNBcnJheVtpXT1wcm9maWxlc0FycmF5W2ldLnJlcGxhY2UoIk5ldyBTZWN1cml0eSBLZXkiLG5ld05pY2tOYW1lKTsKfQppZFJlcG9zaXRvcnkuc2V0QXR0cmlidXRlKGlkLCJ3ZWJhdXRobkRldmljZVByb2ZpbGVzIixbXSk7CmZvciAodmFyIGk9MDsgaTxwcm9maWxlc0FycmF5Lmxlbmd0aDsgaSsrKQp7CiAgaWRSZXBvc2l0b3J5LmFkZEF0dHJpYnV0ZShpZCwid2ViYXV0aG5EZXZpY2VQcm9maWxlcyIscHJvZmlsZXNBcnJheVtpXSk7Cn0Kb3V0Y29tZSA9ICJzdWNjZXNzIjs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -7598,20 +7562,24 @@ }, { "name": "content-length", - "value": "759" + "value": "1238" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:21 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -7621,14 +7589,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 773, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:21.264Z", - "time": 59, + "startedDateTime": "2024-06-19T21:28:25.493Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -7636,11 +7604,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 59 + "wait": 53 } }, { - "_id": "6d3985b76be90a623421cf1f1dab241b", + "_id": "11fc76fd2f9a228b971725c8a994284b", "_order": 0, "cache": {}, "request": { @@ -7652,16 +7620,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -7671,28 +7639,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1650, + "headersSize": 1687, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"ADFS Profile Normalization (JS)\"" + "value": "name eq \"Custom Device Match Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22ADFS%20Profile%20Normalization%20%28JS%29%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Custom%20Device%20Match%20Script%22" }, "response": { - "bodySize": 7358, + "bodySize": 542, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 7358, - "text": "{\"result\":[{\"_id\":\"dbe0bf9a-72aa-49d5-8483-9db147985a47\",\"name\":\"ADFS Profile Normalization (JS)\",\"description\":\"Normalizes raw profile data from ADFS\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIHRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIKICogaW4gYSBzdGFuZGFyZCBmb3JtIGV4cGVjdGVkIGJ5IHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogcmF3UHJvZmlsZSAtIFRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvdmlkZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIuCiAqICAgICAgICAgICAgICBKc29uVmFsdWUgKDEpLgogKiBsb2dnZXIgLSBUaGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiByZWFsbSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqIHJlcXVlc3RIZWFkZXJzIC0gVHJlZU1hcCAoMikuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFjY2Vzc2luZyBoZWFkZXJzIGluIHRoZSBsb2dpbiByZXF1ZXN0OgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1yZXF1ZXN0SGVhZGVycy4KICogcmVxdWVzdFBhcmFtZXRlcnMgLSBUcmVlTWFwICgyKS4KICogICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFyYW1ldGVycy4KICogc2VsZWN0ZWRJZHAgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgVGhlIHNvY2lhbCBpZGVudGl0eSBwcm92aWRlciBuYW1lLiBGb3IgZXhhbXBsZTogZ29vZ2xlLgogKiBzaGFyZWRTdGF0ZSAtIExpbmtlZEhhc2hNYXAgKDMpLgogKiAgICAgICAgICAgICAgIFRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgc3RhdGUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRyZWUgYW5kIGFsbG93cyBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gdGhlIHN0YXRlbGVzcyBub2RlczoKICogICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoLW5vZGVzL2NvcmUtYWN0aW9uLmh0bWwjYWNjZXNzaW5nLXRyZWUtc3RhdGUuCiAqIHRyYW5zaWVudFN0YXRlIC0gTGlua2VkSGFzaE1hcCAoMykuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCBmb3Igc3RvcmluZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdGhhdCBtdXN0IG5vdCBsZWF2ZSB0aGUgc2VydmVyIHVuZW5jcnlwdGVkLAogKiAgICAgICAgICAgICAgICAgIGFuZCB0aGF0IG1heSBub3QgbmVlZCB0byBwZXJzaXN0IGJldHdlZW4gYXV0aGVudGljYXRpb24gcmVxdWVzdHMgZHVyaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBzZXNzaW9uOgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGgtbm9kZXMvY29yZS1hY3Rpb24uaHRtbCNhY2Nlc3NpbmctdHJlZS1zdGF0ZS4KICoKICogUmV0dXJuIC0gYSBKc29uVmFsdWUgKDEpLgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqCiAqICAgICAgICAgIFRoaXMgc2NyaXB0J3MgbGFzdCBzdGF0ZW1lbnQgc2hvdWxkIHJlc3VsdCBpbiBhIEpzb25WYWx1ZSAoMSkgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAqICAgICAgICAgIHsKICogICAgICAgICAgICAgIHsiZGlzcGxheU5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZW1haWwiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZmFtaWx5TmFtZSI6ICJjb3JyZXNwb25kaW5nLXNvY2lhbC1pZGVudGl0eS1wcm92aWRlci12YWx1ZSJ9LAogKiAgICAgICAgICAgICAgeyJnaXZlbk5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiaWQiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsibG9jYWxlIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InBob3RvVXJsIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InVzZXJuYW1lIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0KICogICAgICAgICAgfQogKgogKiAgICAgICAgICBUaGUgY29uc3VtZXIgb2YgdGhpcyBkYXRhIGRlZmluZXMgd2hpY2gga2V5cyBhcmUgcmVxdWlyZWQgYW5kIHdoaWNoIGFyZSBvcHRpb25hbC4KICogICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlIGFuZCwKICogICAgICAgICAgdWx0aW1hdGVseSwgdGhlIG1hbmFnZWQgb2JqZWN0IGNyZWF0ZWQvdXBkYXRlZCB3aXRoIHRoaXMgZGF0YQogKiAgICAgICAgICB3aWxsIGV4cGVjdCBjZXJ0YWluIGtleXMgdG8gYmUgcG9wdWxhdGVkLgogKiAgICAgICAgICBJbiBzb21lIGNvbW1vbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB0aGUgZm9sbG93aW5nIGtleXMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vdCBlbXB0eToKICogICAgICAgICAgdXNlcm5hbWUsIGdpdmVuTmFtZSwgZmFtaWx5TmFtZSwgZW1haWwuCiAqCiAqICAgICAgICAgIEZyb20gUkZDNDUxNzogQSB2YWx1ZSBvZiB0aGUgRGlyZWN0b3J5IFN0cmluZyBzeW50YXggaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKICogICAgICAgICAgYXJiaXRyYXJ5IGNoYXJhY3RlcnMgZnJvbSB0aGUgVW5pdmVyc2FsIENoYXJhY3RlciBTZXQgKFVDUykuCiAqICAgICAgICAgIEEgemVyby1sZW5ndGggY2hhcmFjdGVyIHN0cmluZyBpcyBub3QgcGVybWl0dGVkLgogKgogKiAoMSkgSnNvblZhbHVlIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2pzb24vSnNvblZhbHVlLmh0bWwuCiAqICgyKSBUcmVlTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9UcmVlTWFwLmh0bWwuCiAqICgzKSBMaW5rZWRIYXNoTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqLwoKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQogICAgKTsKCiAgICB2YXIgbm9ybWFsaXplZFByb2ZpbGVEYXRhID0gZnJKYXZhLkpzb25WYWx1ZS5qc29uKGZySmF2YS5Kc29uVmFsdWUub2JqZWN0KCkpOwogIAogICAgICAvL2xvZ2dlci5tZXNzYWdlKCdTZWd1aW4gcmF3UHJvZmlsZTogJytyYXdQcm9maWxlKTsKCiAgICBub3JtYWxpemVkUHJvZmlsZURhdGEucHV0KCdpZCcsIHJhd1Byb2ZpbGUuZ2V0KCdzdWInKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2Rpc3BsYXlOYW1lJywgcmF3UHJvZmlsZS5nZXQoJ2dpdmVuTmFtZScpLmFzU3RyaW5nKCkgKyAnICcgKyByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2VtYWlsJywgcmF3UHJvZmlsZS5nZXQoJ21haWwnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2dpdmVuTmFtZScsIHJhd1Byb2ZpbGUuZ2V0KCdnaXZlbk5hbWUnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2ZhbWlseU5hbWUnLCByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ3VzZXJuYW1lJywgcmF3UHJvZmlsZS5nZXQoJ3VwbicpLmFzU3RyaW5nKCkpOwogICAgbm9ybWFsaXplZFByb2ZpbGVEYXRhLnB1dCgncm9sZXMnLCByYXdQcm9maWxlLmdldCgncm9sZXMnKS5hc1N0cmluZygpKTsKICAKICAgICAgLy9sb2dnZXIubWVzc2FnZSgnU2VndWluIG5vcm1hbGl6ZWRQcm9maWxlRGF0YTogJytub3JtYWxpemVkUHJvZmlsZURhdGEpOwoKICAgIHJldHVybiBub3JtYWxpemVkUHJvZmlsZURhdGE7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 542, + "text": "{\"result\":[{\"_id\":\"d58977ed-0542-4147-8197-973ef7300191\",\"name\":\"Custom Device Match Script\",\"description\":\"Custom Device Match Script\",\"script\":\"LyoKICogQ3VzdG9tIERldmljZSBNYXRjaCBTY3JpcHQKICovCgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -7742,20 +7714,24 @@ }, { "name": "content-length", - "value": "7358" + "value": "542" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:21 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -7765,14 +7741,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:21.336Z", - "time": 57, + "startedDateTime": "2024-06-19T21:28:25.551Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -7780,11 +7756,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 57 + "wait": 51 } }, { - "_id": "b58afe5cd68f1b63d007dcf8166b3ab0", + "_id": "329d94aa7b0eb4bf87dfbf6db589c1d9", "_order": 0, "cache": {}, "request": { @@ -7796,16 +7772,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -7815,28 +7791,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1639, + "headersSize": 1667, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"OAuth2 JWT Issuer Script\"" + "value": "name eq \"resetPush.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20JWT%20Issuer%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22resetPush.js%22" }, "response": { - "bodySize": 5308, + "bodySize": 578, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 5308, - "text": "{\"result\":[{\"_id\":\"400e48ba-3f13-4144-ac7b-f824ea8e98c5\",\"name\":\"OAuth2 JWT Issuer Script\",\"description\":\"Default global script for scripted JWT Issuers\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgdG8gZGVyaXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIGR5bmFtaWMgSldUIGlzc3VlciBmcm9tIHRoZSBpc3N1ZXIgc3RyaW5nLgogKiBBIEpXVCBpc3N1ZXIgaXMgbWFkZSB1cCBvZiB0aGUgZm9sbG93aW5nOgogKiAgIC0gaXNzdWVyIC0gdGhlIGlkZW50aWZpZXIgb2YgdGhlIGVudGl0eSB0aGF0IGlzc3VlcyBKV1RzCiAqICAgLSByZXNvdXJjZSBvd25lciBzdWJqZWN0IGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCBpZGVudGlmaWVzIHRoZSByZXNvdXJjZSBvd25lcgogKiAgIC0gY29uc2VudGVkIHNjb3BlIGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCByZXByZXNlbnRzIHNjb3BlIHRoYXQgdGhlIHJlc291cmNlIG93bmVyCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYWxyZWFkeSBjb25zZW50ZWQgdG8gZXh0ZXJuYWxseQogKiAgIC0gYXV0aG9yaXplZCBzdWJqZWN0cyAtIHRoZSBzZXQgb2YgcHJpbmNpcGFsIGlkZW50aWZpZXJzIHRoYXQgYXJlIGF1dGhvcml6ZWQgdG8gYmUgdXNlZCBhcyByZXNvdXJjZSBvd25lcnMKICogICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgaXNzdWVyCiAqICAgLSBKV0tzIC0gZWl0aGVyIGEgc2V0IG9mIEpXS3Mgb3IgY29ubmVjdGlvbiBkZXRhaWxzIGZvciBvYnRhaW5pbmcgdGhhdCBzZXQsIHRoYXQgYXJlIHRoZSBwdWJsaWMga2V5cyB0aGF0CiAqICAgICAgICAgICAgY2FuIHZlcmlmeSB0aGUgc2lnbmF0dXJlIG9uIHRoZSBpc3N1ZWQgSldUcy4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIGlzc3VlciAtIFN0cmluZwogKiAgICAgICAgICBUaGUgaXNzdWVyIGZyb20gdGhlIGJlYXJlciBKV1QuCiAqIHJlYWxtIC0gU3RyaW5nCiAqICAgICAgICAgVGhlIHBhdGggb2YgdGhlIHJlYWxtIHRoYXQgaXMgaGFuZGxpbmcgdGhlIHJlcXVlc3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIHNjcmlwdCBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5PQVVUSDJfU0NSSVBURURfSldUX0lTU1VFUi4KICogaHR0cENsaWVudCAtIEhUVFAgQ2xpZW50ICgxKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgSFRUUCBDbGllbnQgaW5zdGFuY2U6CiAqICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC4KICogaWRSZXBvc2l0b3J5IC0gSWRlbnRpdHkgUmVwb3NpdG9yeSAoMikuIEFsd2F5cyBwcmVzZW50LgogKiBzZWNyZXRzIC0gU2VjcmV0cyBhY2Nlc3NvciAoMykuIEFsd2F5cyBwcmVzZW50LgogKgogKiBSZXR1cm4gLSBvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLlRydXN0ZWRKd3RJc3N1ZXJDb25maWcgKDQpIC0gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRydXN0ZWQgSldUIGlzc3Vlci4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgyKSBTY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuYW0vc2NyaXB0aW5nL2FwaS9pZGVudGl0eS9TY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeS5odG1sLgogKiAoMykgU2NyaXB0ZWRTZWNyZXRzIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5hbS9zY3JpcHRpbmcvYXBpL3NlY3JldHMvU2NyaXB0ZWRTZWNyZXRzLmh0bWwuCiAqICg0KSBUcnVzdGVkSnd0SXNzdWVyQ29uZmlnIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1RydXN0ZWRKd3RJc3N1ZXJDb25maWcuaHRtbC4KICovCgovKiBFWEFNUExFCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVHJ1c3RlZEp3dElzc3VlckNvbmZpZywKICAgICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbnMKICAgICk7CgogICAgdmFyIGlzcyA9IGlkUmVwb3NpdG9yeS5nZXRJZGVudGl0eShpc3N1ZXIpOwogICAgaWYgKGlzcyA9PSBudWxsKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoJ05vIGlzc3VlciBmb3VuZCBmb3I6ICcraXNzdWVyKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGxvZ2dlci5tZXNzYWdlKCdGb3VuZCBpc3N1ZXI6ICcraXNzKTsKICAgIC8vIGluIHRoaXMgZXhhbXBsZSBlaXRoZXIgYSBKV0sgc2V0IG9yIGEgVVJJIHRvIGEgSldLIHNldCBhcmUgaW4gdGhlIHBvc3RhbEFkZHJlc3MgYXR0cmlidXRlCiAgICB2YXIgandrc0F0dHJzID0gaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygncG9zdGFsQWRkcmVzcycpOwogICAgdmFyIGp3a1NldCA9IGp3a3NBdHRycy5sZW5ndGggPT09IDAgPyBudWxsIDogandrc0F0dHJzWzBdOwogICAgdmFyIGNvbmZpZyA9IG5ldyBmckphdmEuVHJ1c3RlZEp3dElzc3VlckNvbmZpZygKICAgICAgICBpc3N1ZXIsCiAgICAgICAgJ3N1YicsCiAgICAgICAgJ3Njb3BlJywKICAgICAgICAvLyBpbiB0aGlzIGV4YW1wbGUsIHZhbGlkIHN1YmplY3RzIGFyZSBzdG9yZWQgaW4gdGhlIG1haWwgYXR0cmlidXRlCiAgICAgICAgaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygnbWFpbCcpLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCd7JykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCdodHRwJykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgICc1IG1pbnV0ZXMnLAogICAgICAgICcxIG1pbnV0ZScKICAgICk7CiAgICByZXR1cm4gY29uZmlnOwp9KCkpOwoqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_SCRIPTED_JWT_ISSUER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 578, + "text": "{\"result\":[{\"_id\":\"18940a0d-2997-49af-8cb9-9d8da38b4145\",\"name\":\"resetPush.js\",\"description\":\"null\",\"script\":\"aWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwppZFJlcG9zaXRvcnkuc2V0QXR0cmlidXRlKGlkLCAicHVzaERldmljZVByb2ZpbGVzIixbXSk7CgoKICAgIApvdXRjb21lID0gInRydWUiOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -7886,20 +7866,24 @@ }, { "name": "content-length", - "value": "5308" + "value": "578" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:21 GMT" + "value": "Wed, 19 Jun 2024 21:28:24 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -7909,14 +7893,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:21.398Z", - "time": 60, + "startedDateTime": "2024-06-19T21:28:25.606Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -7924,11 +7908,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 60 + "wait": 53 } }, { - "_id": "6b041cdd91b1a940e2f050d4a2c575a6", + "_id": "c1c393209e95869bcd07a4e023ad042d", "_order": 0, "cache": {}, "request": { @@ -7940,16 +7924,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -7959,28 +7943,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1622, + "headersSize": 1689, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Test-Script-1\"" + "value": "name eq \"Inactive Device Match Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Test-Script-1%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Inactive%20Device%20Match%20Script%22" }, "response": { - "bodySize": 854, + "bodySize": 546, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 854, - "text": "{\"result\":[{\"_id\":\"59f84396-71e4-4c1d-a6ae-c4fc624d9752\",\"name\":\"Test-Script-1\",\"description\":\"A test script that uses an environment variable and a secret variable\",\"script\":\"Ly8gQ2FsY3VsYXRlIEU9bWNeMiB1c2luZyBtID0gNDIKY29uc3QgYzIgPSBzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi50ZXN0LnZhcmlhYmxlLmxpZ2h0Iik7CmNvbnNvbGUubG9nKGBFID0gJHs0MiAqIGMyICogYzJ9YCk7Ci8vIENhbGN1bGF0ZSB0aGUgYXJlYSBvZiBhIGNpcmNsZSB3aXRoIHJhZGl1cyByID0gNDIKY29uc3QgcGkgPSBwYXJzZUZsb2F0KHN5c3RlbUVudi5nZXRQcm9wZXJ0eSgiZXN2LnRlc3Quc2VjcmV0LnBpIikpOwpjb25zb2xlLmxvZyhgQSA9ICR7cGkgKiA0MiAqIDQyfWApOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 546, + "text": "{\"result\":[{\"_id\":\"3bd13a46-61c4-4974-8efb-1700c80c64e3\",\"name\":\"Inactive Device Match Script\",\"description\":\"Inactive Device Match Script\",\"script\":\"LyoKICogSW5hY3RpdmUgRGV2aWNlIE1hdGNoIFNjcmlwdAogKi8KCm91dGNvbWUgPSAidHJ1ZSI7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -8030,20 +8018,24 @@ }, { "name": "content-length", - "value": "854" + "value": "546" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:21 GMT" + "value": "Wed, 19 Jun 2024 21:28:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -8053,14 +8045,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 773, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:21.464Z", - "time": 62, + "startedDateTime": "2024-06-19T21:28:25.663Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -8068,11 +8060,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 62 + "wait": 53 } }, { - "_id": "e3c2d193ee5e301889ca03246f232640", + "_id": "91b80ebe4ad9d6d3babb4519ccfd3574", "_order": 0, "cache": {}, "request": { @@ -8084,16 +8076,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -8103,28 +8095,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1639, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"SAML2 IDP Adapter Script\"" + "value": "name eq \"wks-RemoveButton\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22SAML2%20IDP%20Adapter%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22wks-RemoveButton%22" }, "response": { - "bodySize": 7044, + "bodySize": 1686, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 7044, - "text": "{\"result\":[{\"_id\":\"248b8a56-df81-4b1b-b4ba-45d994f6504c\",\"name\":\"SAML2 IDP Adapter Script\",\"description\":\"Default global script for SAML2 IDP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9TQU1MMklkZW50aXR5UHJvdmlkZXJBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBJZHBBZGFwdGVyU2NyaXB0SGVscGVyICgxKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgSWRwQWRhcHRlclNjcmlwdEhlbHBlciBjb250YWluaW5nIGhlbHBlciBtZXRob2RzLiBTZWUgSmF2YWRvYyBmb3IgbW9yZSBkZXRhaWxzLgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgyKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDMpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDQpCiAqICAgICBUaGUgb3JpZ2luYWwgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IGZyb20gU1AKICogcmVxSWQgLSBTdHJpbmcKICogICAgIFRoZSBpZCB0byB1c2UgZm9yIGNvbnRpbnVhdGlvbiBvZiBwcm9jZXNzaW5nIGlmIHRoZSBhZGFwdGVyIHJlZGlyZWN0cwogKiByZXMgLSBSZXNwb25zZSAoNSkKICogICAgIFRoZSBTQU1MIFJlc3BvbnNlCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNikKICogICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLiBUaGUgcmVmZXJlbmNlIHR5cGUgb2YgdGhpcyBpcyBPYmplY3QgYW5kIHdvdWxkIG5lZWQgdG8gYmUgY2FzdGVkIHRvIFNTT1Rva2VuLgogKiByZWxheVN0YXRlIC0gU3RyaW5nCiAqICAgICBUaGUgcmVsYXlTdGF0ZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgcmVkaXJlY3QKICogZmF1bHRDb2RlIC0gU3RyaW5nCiAqICAgICB0aGUgZmF1bHQgY29kZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogZmF1bHREZXRhaWwgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBkZXRhaWwgdGhhdCB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBTQU1MIHJlc3BvbnNlCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwuCiAqICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuPHNjcmlwdCBuYW1lPgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb24gKDcpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL0F1dGhuUmVxdWVzdC5odG1sLgogKiAoNSkgUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvUmVzcG9uc2UuaHRtbC4KICogKDYpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBJRFAgQWRhcHRlciBzY3JpcHRlZCBwbHVnaW4uCiAqLwoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2luZ2xlU2lnbk9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlU2lnbk9uICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlQXV0aGVudGljYXRpb246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVBdXRoZW50aWNhdGlvbiAoKSB7CiAgICByZXR1cm4gZmFsc2U7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNlbmRSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgcmVxSWQKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIGJyb3dzZXIgcmVkaXJlY3Rpb24gaGFwcGVuZWQgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2VuZFJlc3BvbnNlICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2lnblJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIHJlcwogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTaWduUmVzcG9uc2UgKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgZmF1bHRDb2RlCiAqICAgICBmYXVsdERldGFpbAogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlICgpIHsKfQ==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1686, + "text": "{\"result\":[{\"_id\":\"343b3cc5-38f4-4e37-9d92-8ba0830936da\",\"name\":\"wks-RemoveButton\",\"description\":\"RemoveButton\",\"script\":\"LyogUmVtb3ZlIEJ1dHRvbgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBIaWRlIGJ1dHRvbnMgb24gdGhlIGpvdXJuZXkgcGFnZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfSkiCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICB2YXIgbWVzc2FnZSA9ICIgIgogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIG1lc3NhZ2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -8174,20 +8170,24 @@ }, { "name": "content-length", - "value": "7044" + "value": "1686" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:21 GMT" + "value": "Wed, 19 Jun 2024 21:28:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -8197,14 +8197,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:21.540Z", - "time": 60, + "startedDateTime": "2024-06-19T21:28:25.719Z", + "time": 49, "timings": { "blocked": -1, "connect": -1, @@ -8212,11 +8212,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 60 + "wait": 49 } }, { - "_id": "91ace92f5115d94b26cb380ff635ab0f", + "_id": "a1a476f7f90af798330625d10b5e75d8", "_order": 0, "cache": {}, "request": { @@ -8228,16 +8228,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -8247,28 +8247,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1682, + "headersSize": 1670, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Alpha endUserUIClient OAuth2 Access Token Modification Script\"" + "value": "name eq \"Remove Button\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Alpha%20endUserUIClient%20OAuth2%20Access%20Token%20Modification%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Remove%20Button%22" }, "response": { - "bodySize": 1061, + "bodySize": 1695, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1061, - "text": "{\"result\":[{\"_id\":\"e232cff3-2460-47cd-80b2-36c86c0d0f06\",\"name\":\"Alpha endUserUIClient OAuth2 Access Token Modification Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBpZiAoc2NvcGVzLmNvbnRhaW5zKCdmcjphdXRvYWNjZXNzOionKSB8fCBzY29wZXMuY29udGFpbnMoJ2ZyOmlnYToqJykgfHwgc2NvcGVzLmNvbnRhaW5zKCdmcjppZGM6YW5hbHl0aWNzOionKSkgewogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBjb20uc3VuLmlkZW50aXR5LmlkbS5JZFR5cGUKICAgICk7CiAgICB2YXIgZ3JvdXBzID0gW107CiAgICBpZGVudGl0eS5nZXRNZW1iZXJzaGlwcyhmci5JZFR5cGUuR1JPVVApLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkgewogICAgICBncm91cHMucHVzaChncm91cC5nZXRBdHRyaWJ1dGUoJ2NuJykudG9BcnJheSgpWzBdKTsKICAgIH0pOwogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ2dyb3VwcycsIGdyb3Vwcyk7CiAgfQp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1695, + "text": "{\"result\":[{\"_id\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"name\":\"Remove Button\",\"description\":\"Remove button from page.\",\"script\":\"LyogUmVtb3ZlIEJ1dHRvbgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBIaWRlIGJ1dHRvbnMgb24gdGhlIGpvdXJuZXkgcGFnZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfSkiCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICB2YXIgbWVzc2FnZSA9ICIgIgogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIG1lc3NhZ2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -8318,20 +8322,24 @@ }, { "name": "content-length", - "value": "1061" + "value": "1695" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:21 GMT" + "value": "Wed, 19 Jun 2024 21:28:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -8341,14 +8349,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:21.611Z", - "time": 58, + "startedDateTime": "2024-06-19T21:28:25.771Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -8356,11 +8364,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 58 + "wait": 52 } }, { - "_id": "0ef369f427baa872ca4ee159a6fe7dc7", + "_id": "d03f9e8a49c3663717f6f44885052a82", "_order": 0, "cache": {}, "request": { @@ -8372,16 +8380,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -8391,28 +8399,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1631, + "headersSize": 1685, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"UOP Enrich Session\"" + "value": "name eq \"Okta Profile Normalization\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22UOP%20Enrich%20Session%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Okta%20Profile%20Normalization%22" }, "response": { - "bodySize": 1914, + "bodySize": 1579, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1914, - "text": "{\"result\":[{\"_id\":\"743351b3-001a-4ec8-b3ac-a674ddb8de22\",\"name\":\"UOP Enrich Session\",\"description\":\"Enrich user session with UOP class ID.\",\"script\":\"LyogVU9QIEVucmljaCBTZXNzaW9uCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIEFkZCBjdXJyZW50IGNsYXNzIElEIHRvIHVzZXIgc2Vzc2lvbi4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuIAogKiBJdCByZXF1aXJlcyB0aGUgSWRlbnRpZnkgRXhpc3RpbmcgVXNlciBub2RlIGJlZm9yZSBpdCBpcyBiZWluZyBjYWxsZWQuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAtIGZhbHNlCiAqLwpsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBzdGFydCIpOwpvdXRjb21lID0gImZhbHNlIjsKCmlmIChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBnb2luZyB0byBlbnJpY2ggc2Vzc2lvbiB3aXRoIGNsYXNzIGlkOiAiLmNvbmNhdChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpKTsKICAKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaQogICAgKTsKCiAgICB3aXRoIChmcikgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJVT1AgRW5yaWNoIFNlc3Npb246IEVuZCAob3V0Y29tZT0iLmNvbmNhdChvdXRjb21lKS5jb25jYXQoIikiKSk7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8ob3V0Y29tZSkucHV0U2Vzc2lvblByb3BlcnR5KCJVT1BDbGFzc0lEIiwgc2hhcmVkU3RhdGUuZ2V0KCJ1b3BDdXJyZW50Q2xhc3NJRCIpKS5idWlsZCgpOwogICAgfQogIAp9IGVsc2UgewogICAgbG9nZ2VyLmVycm9yKCJVT1AgRW5yaWNoIFNlc3Npb246IG5vIGNsYXNzZXMhIik7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBFbmQgKG91dGNvbWU9Ii5jb25jYXQob3V0Y29tZSkuY29uY2F0KCIpIikpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1579, + "text": "{\"result\":[{\"_id\":\"6325cf19-a49b-471e-8d26-7e4df76df0e2\",\"name\":\"Okta Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJPa3RhIHJhd1Byb2ZpbGU6ICIrcmF3UHJvZmlsZSkKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5wcmVmZXJyZWRfdXNlcm5hbWUpKSk=\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -8462,20 +8474,24 @@ }, { "name": "content-length", - "value": "1914" + "value": "1579" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:21 GMT" + "value": "Wed, 19 Jun 2024 21:28:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -8485,14 +8501,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:21.683Z", - "time": 72, + "startedDateTime": "2024-06-19T21:28:25.827Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -8500,11 +8516,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 72 + "wait": 53 } }, { - "_id": "63054e0911bafed4c6e0d118e2b5d118", + "_id": "945e3364d6ed180bc93576ef2f0f323d", "_order": 0, "cache": {}, "request": { @@ -8516,16 +8532,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -8535,28 +8551,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1640, + "headersSize": 1677, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Apple Profile Normalization\"" + "value": "name eq \"Set Email Verified\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Apple%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Set%20Email%20Verified%22" }, "response": { - "bodySize": 2942, + "bodySize": 756, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 2942, - "text": "{\"result\":[{\"_id\":\"484e6246-dbc6-4288-97e6-54e55431402e\",\"name\":\"Apple Profile Normalization\",\"description\":\"Normalizes raw profile data from Apple\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICoKICogSW4gc29tZSBjb21tb24gZGVmYXVsdCBjb25maWd1cmF0aW9ucywgdGhlIGZvbGxvd2luZyBrZXlzIGFyZSByZXF1aXJlZCB0byBiZSBub3QgZW1wdHk6CiAqIHVzZXJuYW1lLCBnaXZlbk5hbWUsIGZhbWlseU5hbWUsIGVtYWlsLgogKgogKiBGcm9tIFJGQzQ1MTc6IEEgdmFsdWUgb2YgdGhlIERpcmVjdG9yeSBTdHJpbmcgc3ludGF4IGlzIGEgc3RyaW5nIG9mIG9uZSBvciBtb3JlCiAqIGFyYml0cmFyeSBjaGFyYWN0ZXJzIGZyb20gdGhlIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0IChVQ1MpLgogKiBBIHplcm8tbGVuZ3RoIGNoYXJhY3RlciBzdHJpbmcgaXMgbm90IHBlcm1pdHRlZC4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKU3RyaW5nIGVtYWlsID0gImNoYW5nZUBtZS5jb20iClN0cmluZyBzdWJqZWN0SWQgPSByYXdQcm9maWxlLnN1YgpTdHJpbmcgZmlyc3ROYW1lID0gIiAiClN0cmluZyBsYXN0TmFtZSA9ICIgIgpTdHJpbmcgdXNlcm5hbWUgPSBzdWJqZWN0SWQKU3RyaW5nIG5hbWUKCmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgiZW1haWwiKSAmJiByYXdQcm9maWxlLmVtYWlsLmlzTm90TnVsbCgpKXsgLy8gVXNlciBjYW4gZWxlY3QgdG8gbm90IHNoYXJlIHRoZWlyIGVtYWlsCiAgICBlbWFpbCA9IHJhd1Byb2ZpbGUuZW1haWwuYXNTdHJpbmcoKQogICAgdXNlcm5hbWUgPSBlbWFpbAp9CmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgibmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5pc05vdE51bGwoKSkgewogICAgaWYgKHJhd1Byb2ZpbGUubmFtZS5pc0RlZmluZWQoImZpcnN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5maXJzdE5hbWUuaXNOb3ROdWxsKCkpIHsKICAgICAgICBmaXJzdE5hbWUgPSByYXdQcm9maWxlLm5hbWUuZmlyc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KICAgIGlmIChyYXdQcm9maWxlLm5hbWUuaXNEZWZpbmVkKCJsYXN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5sYXN0TmFtZS5pc05vdE51bGwoKSkgewogICAgICAgIGxhc3ROYW1lID0gcmF3UHJvZmlsZS5uYW1lLmxhc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KfQoKbmFtZSA9IChmaXJzdE5hbWU/LnRyaW0oKSA/IGZpcnN0TmFtZSA6ICIiKSArIChsYXN0TmFtZT8udHJpbSgpID8gKChmaXJzdE5hbWU/LnRyaW0oKSA/ICIgIiA6ICIiKSArIGxhc3ROYW1lKSA6ICIiKQpuYW1lID0gICghbmFtZT8udHJpbSgpKSA/ICIgIiA6IG5hbWUKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCBzdWJqZWN0SWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIG5hbWUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIGVtYWlsKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgZmlyc3ROYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIGxhc3ROYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCB1c2VybmFtZSkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 756, + "text": "{\"result\":[{\"_id\":\"7b88752e-5529-459c-a970-1fb78ff0d87f\",\"name\":\"Set Email Verified\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkKKTsKd2l0aCAoZnIpIHsKICAKICB2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCiAgdmFyIGF0dHJpYnV0ZSA9ICJmci1hdHRyLXN0cjEiCiAKICBpZFJlcG9zaXRvcnkuc2V0QXR0cmlidXRlKHVzZXJuYW1lLCBhdHRyaWJ1dGUsIFsidmVyaWZpZWQiXSk7CiAgCiAgb3V0Y29tZSA9ICJ0cnVlIgp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -8606,20 +8626,24 @@ }, { "name": "content-length", - "value": "2942" + "value": "756" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:21 GMT" + "value": "Wed, 19 Jun 2024 21:28:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -8629,14 +8653,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:21.764Z", - "time": 63, + "startedDateTime": "2024-06-19T21:28:25.884Z", + "time": 50, "timings": { "blocked": -1, "connect": -1, @@ -8644,7 +8668,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 63 + "wait": 50 } } ], diff --git a/src/test/mock-recordings/ScriptOps_3024995978/exportScripts_3396715418/2-Export-all-scripts-including-default-scripts_2102777644/recording.har b/src/test/mock-recordings/ScriptOps_3024995978/exportScripts_3396715418/2-Export-all-scripts-including-default-scripts_2102777644/recording.har index 8aee2d13e..44b8d2560 100644 --- a/src/test/mock-recordings/ScriptOps_3024995978/exportScripts_3396715418/2-Export-all-scripts-including-default-scripts_2102777644/recording.har +++ b/src/test/mock-recordings/ScriptOps_3024995978/exportScripts_3396715418/2-Export-all-scripts-including-default-scripts_2102777644/recording.har @@ -20,16 +20,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -39,12 +39,16 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1595, + "headersSize": 1641, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ @@ -56,11 +60,11 @@ "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=true" }, "response": { - "bodySize": 370804, + "bodySize": 464939, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 370804, - "text": "{\"result\":[{\"_id\":\"3b2f6836-184c-4ee9-8a1d-557cb01837a5\",\"name\":\"FrodoTestScript3\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1d475815-72cb-42eb-aafd-4026989d28a7\",\"name\":\"Social Identity Provider Profile Transformation Script\",\"description\":\"Default global script for Social Identity Provider Profile Transformation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyogRGVmYXVsdCBTb2NpYWwgSWRlbnRpdHkgUHJvdmlkZXIgUHJvZmlsZSBUcmFuc2Zvcm1hdGlvbiBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzICov\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"bae1d54a-e97d-4997-aa5d-c027f21af82c\",\"name\":\"Facebook Profile Normalization\",\"description\":\"Normalizes raw profile data from Facebook\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"69f06e63-128c-4e2f-af52-079a8a6f448b\",\"name\":\"SAML2 SP Adapter Script\",\"description\":\"Default global script for SAML2 SP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_SP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c735de08-f8f2-4e69-aa4a-2d8d3d438323\",\"name\":\"OAuth2 May Act Script\",\"description\":\"Default global script for OAuth2 May Act\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKiB0b2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gdG8gYmUgdXBkYXRlZC4gTXV0YWJsZSBvYmplY3QsIGFsbCBjaGFuZ2VzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gd2lsbCBiZSByZWZsZWN0ZWQuCiAqIGxvZ2dlciAtIGFsd2F5cyBwcmVzZW50LCBjb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIHNjcmlwdE5hbWUgLSBhbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0CiAqIHNlc3Npb24gLSBwcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdAogKiByZXF1ZXN0UHJvcGVydGllcyAtIGFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIHRoZSByZXF1ZXN0IFVSSQogKiAgICAgICAgICAgICAgICAgICAgIHJlYWxtIC0gdGhlIHJlYWxtIHRoYXQgdGhlIHJlcXVlc3QgcmVsYXRlcyB0bwogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBhIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLiBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IKICogICAgICAgICAgICAgICAgICAgICBtb3JlIHByb3BlcnRpZXMuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QKICogICAgICAgICAgICAgICAgICAgICBwcmFjdGljZXMuCiAqIGNsaWVudFByb3BlcnRpZXMgLSBwcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICBjbGllbnRJZCAtIHRoZSBjbGllbnQncyBVcmkgZm9yIHRoZSByZXF1ZXN0IGxvY2FsZQogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBsaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gbGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudAogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFNjb3BlcyAtIGxpc3Qgb2YgdGhlIGFsbG93ZWQgc2NvcGVzIGZvciB0aGUgY2xpZW50CiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzLCBlLmc6CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdE1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyB0ZXN0bWFwIC0+IEtleTEgLT4gVmFsdWUxCiAqCiAqIGlkZW50aXR5IC0gYWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIKICogc2NvcGVzIC0gYWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzCiAqLwovKgppbXBvcnQgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQoKdG9rZW4uc2V0TWF5QWN0KAogICAgSnNvblZhbHVlLmpzb24oSnNvblZhbHVlLm9iamVjdCgKICAgICAgICBKc29uVmFsdWUuZmllbGQoImNsaWVudF9pZCIsICJteUNsaWVudCIpLCAKICAgICAgICBKc29uVmFsdWUuZmllbGQoInN1YiIsICIodXNyIW15QWN0b3IpIikpKSkKKi8=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"OAUTH2_MAY_ACT\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"91d197de-5916-4dca-83b5-9a4df26e7159\",\"name\":\"WordPress Profile Normalization\",\"description\":\"Normalizes raw profile data from WordPress\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJuYW1lKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5hdmF0YXJfVVJMKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e1db8a0a-0329-4962-a5bf-ecffaca376ae\",\"name\":\"Alpha endUserUIClient OIDC Claims Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"ed685f9f-5909-4726-86e8-22bd38b47663\",\"name\":\"Normalized Profile to Identity\",\"description\":\"Converts a normalized social profile into an Identity\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgaWRlbnRpdHkgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgiY24iLCBub3JtYWxpemVkUHJvZmlsZS5kaXNwbGF5TmFtZSksCiAgICAgICAgZmllbGQoInVzZXJOYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUudXNlcm5hbWUpLAogICAgICAgIGZpZWxkKCJpcGxhbmV0LWFtLXVzZXItYWxpYXMtbGlzdCIsIHNlbGVjdGVkSWRwICsgJy0nICsgbm9ybWFsaXplZFByb2ZpbGUuaWQuYXNTdHJpbmcoKSkpKQoKcmV0dXJuIGlkZW50aXR5\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"39c08084-1238-43e8-857f-2e11005eac49\",\"name\":\"Alpha OAuth2 Access Token Modification Script\",\"description\":\"Default alpha realm script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"b7259916-71ed-4675-8c5a-de86a80e4aed\",\"name\":\"FrodoTestScript2\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3bd13a46-61c4-4974-8efb-1700c80c64e3\",\"name\":\"Inactive Device Match Script\",\"description\":\"Inactive Device Match Script\",\"script\":\"LyoKICogSW5hY3RpdmUgRGV2aWNlIE1hdGNoIFNjcmlwdAogKi8KCm91dGNvbWUgPSAidHJ1ZSI7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"13e3f263-9cd3-4844-8d1c-040fd0dd02eb\",\"name\":\"Device Profile Match Template - Decision Node Script\",\"description\":\"Default global script template for Device Profile Match decision node script for Authentication Tree\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGEgc2ltcGxpZmllZCB0ZW1wbGF0ZSBmb3IgdW5kZXJzdGFuZGluZwogKiB0aGUgYmFzaWNzIG9mIGRldmljZSBtYXRjaGluZy4gX1RoaXMgaXMgbm90IGZ1bmN0aW9uYWxseSBjb21wbGV0ZS5fCiAqIEZvciBhIGZ1bmN0aW9uYWxseSBjb21wbGV0ZSBzY3JpcHQgYXMgd2VsbCBhcyBhIGRldmVsb3BtZW50IHRvb2xraXQsCiAqIHZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9Gb3JnZVJvY2svZm9yZ2Vyb2NrLWRldmljZS1tYXRjaC1zY3JpcHQuCiAqCiAqIEdsb2JhbCBub2RlIHZhcmlhYmxlcyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGlzIHNjb3BlOgogKiAxLiBgc2hhcmVkU3RhdGVgIHByb3ZpZGVzIGFjY2VzcyB0byBpbmNvbWluZyByZXF1ZXN0CiAqIDIuIGBkZXZpY2VQcm9maWxlc0Rhb2AgcHJvdmlkZXMgYWNjZXNzIHRvIHN0b3JlZCBwcm9maWxlcwogKiAzLiBgb3V0Y29tZWAgdmFyaWFibGUgbWFwcyB0byBhdXRoIHRyZWUgbm9kZSBvdXRjb21lczsgdmFsdWVzIGFyZQogKiAgICAndHJ1ZScsICdmYWxzZScsIG9yICd1bmtub3duRGV2aWNlJyAobm90aWNlIF9hbGxfIGFyZSBzdHJpbmdzKS4KICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgcmVxdWVzdCdzIGRldmljZSBwcm9maWxlLgogKiBSZXR1cm5zIHNlcmlhbGl6ZWQgSlNPTiAodHlwZSBzdHJpbmcpOyBwYXJzaW5nIHRoaXMgd2lsbCByZXN1bHQgYQogKiBuYXRpdmUgSlMgb2JqZWN0LgogKi8KdmFyIGluY29taW5nSnNvbiA9IHNoYXJlZFN0YXRlLmdldCgnZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlJykudG9TdHJpbmcoKTsKdmFyIGluY29taW5nID0gSlNPTi5wYXJzZShpbmNvbWluZ0pzb24pOwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgdXNlcidzIHVzZXJuYW1lIGFuZCByZWFsbS4KICogTm90aWNlIHRoZSB1c2Ugb2YgYC5hc1N0cmluZygpYC4KICovCnZhciB1c2VybmFtZSA9IHNoYXJlZFN0YXRlLmdldCgidXNlcm5hbWUiKS5hc1N0cmluZygpOwp2YXIgcmVhbG0gPSBzaGFyZWRTdGF0ZS5nZXQoInJlYWxtIikuYXNTdHJpbmcoKTsKCi8qKgogKiBHZXQgdGhlIHVzZXIncyBzdG9yZWQgcHJvZmlsZXMgZm9yIGFwcHJvcHJpYXRlIHJlYWxtLgogKiBSZXR1cm5zIGEgX3NwZWNpYWxfIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIHByb2ZpbGUgZGF0YQogKi8KdmFyIHN0b3JlZFByb2ZpbGVzID0gZGV2aWNlUHJvZmlsZXNEYW8uZ2V0RGV2aWNlUHJvZmlsZXModXNlcm5hbWUsIHJlYWxtKTsKCi8vIERlZmF1bHQgdG8gYG91dGNvbWVgIG9mICd1bmtub3duRGV2aWNlJwpvdXRjb21lID0gJ3Vua25vd25EZXZpY2UnOwoKaWYgKHN0b3JlZFByb2ZpbGVzKSB7CiAgICB2YXIgaSA9IDA7CiAgICAvLyBOT1RFOiBgLnNpemUoKWAgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBzdG9yZWQgcHJvZmlsZXMKICAgIHZhciBsZW4gPSBzdG9yZWRQcm9maWxlcy5zaXplKCk7CgogICAgZm9yIChpOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIHN0b3JlZCBwcm9maWxlLgogICAgICAgICAqIFJldHVybnMgc2VyaWFsaXplZCBKU09OICh0eXBlIHN0cmluZyk7IHBhcnNpbmcgdGhpcyB3aWxsIHJlc3VsdAogICAgICAgICAqIGEgbmF0aXZlIEpTIG9iamVjdC4KICAgICAgICAgKi8KICAgICAgICB2YXIgc3RvcmVkSnNvbiA9IHN0b3JlZFByb2ZpbGVzLmdldChpKTsKICAgICAgICB2YXIgc3RvcmVkID0gSlNPTi5wYXJzZShzdG9yZWRKc29uKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogRmluZCBhIHN0b3JlZCBwcm9maWxlIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllci4KICAgICAgICAgKi8KICAgICAgICBpZiAoaW5jb21pbmcuaWRlbnRpZmllciA9PT0gc3RvcmVkLmlkZW50aWZpZXIpIHsKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBOb3cgdGhhdCB5b3UndmUgZm91bmQgdGhlIGFwcHJvcHJpYXRlIHByb2ZpbGUsIHlvdSB3aWxsIHBlcmZvcm0KICAgICAgICAgICAgICogdGhlIGxvZ2ljIGhlcmUgdG8gbWF0Y2ggdGhlIHZhbHVlcyBvZiB0aGUgYGluY29taW5nYCBwcm9maWxlCiAgICAgICAgICAgICAqIHdpdGggdGhhdCBvZiB0aGUgYHN0b3JlZGAgcHJvZmlsZS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogVGhlIHJlc3VsdCBvZiB0aGUgbWF0Y2hpbmcgbG9naWMgaXMgYXNzaWduZWQgdG8gYG91dGNvbWVgLiBTaW5jZQogICAgICAgICAgICAgKiB3ZSBoYXZlIHByb2ZpbGVzIG9mIHRoZSBzYW1lIGlkZW50aWZpZXIsIHRoZSB2YWx1ZSAodHlwZSBzdHJpbmcpCiAgICAgICAgICAgICAqIHNob3VsZCBub3cgYmUgZWl0aGVyICd0cnVlJyBvciAnZmFsc2UnIChwcm9wZXJ0aWVzIG1hdGNoZWQgb3Igbm90KS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0b3BpYywgdmlzaXQgdGhpcyBHaXRodWIgcmVwbzoKICAgICAgICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL0ZvcmdlUm9jay9mb3JnZXJvY2stZGV2aWNlLW1hdGNoLXNjcmlwdAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgb3V0Y29tZSA9ICdmYWxzZSc7CiAgICAgICAgfQogICAgfQp9\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"703dab1a-1921-4981-98dd-b8e5349d8548\",\"name\":\"Device Id (Match) - Server Side\",\"description\":\"Default global script for server side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAyMyBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIFNjYWxhckNvbXBhcmF0b3IgPSB7fSwgU2NyZWVuQ29tcGFyYXRvciA9IHt9LCBNdWx0aVZhbHVlQ29tcGFyYXRvciA9IHt9LCBVc2VyQWdlbnRDb21wYXJhdG9yID0ge30sIEdlb2xvY2F0aW9uQ29tcGFyYXRvciA9IHt9OwoKdmFyIGNvbmZpZyA9IHsKICAgIHByb2ZpbGVFeHBpcmF0aW9uOiAzMCwgICAgICAgICAgICAgIC8vaW4gZGF5cwogICAgbWF4UHJvZmlsZXNBbGxvd2VkOiA1LAogICAgbWF4UGVuYWx0eVBvaW50czogMCwKICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBzY3JlZW46IHsKICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICAgIGNvbXBhcmF0b3I6IFNjcmVlbkNvbXBhcmF0b3IsCiAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDUwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHBsdWdpbnM6IHsKICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2luczogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmb250czogewogICAgICAgICAgICBpbnN0YWxsZWRGb250czogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogU2NhbGFyQ29tcGFyYXRvciwKICAgICAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdXNlckFnZW50OiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgICBjb21wYXJhdG9yOiBVc2VyQWdlbnRDb21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBpZ25vcmVWZXJzaW9uOiB0cnVlLAogICAgICAgICAgICAgICAgcGVuYWx0eVBvaW50czogMTAwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdlb2xvY2F0aW9uOiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSwKICAgICAgICAgICAgY29tcGFyYXRvcjogR2VvbG9jYXRpb25Db21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBhbGxvd2VkUmFuZ2U6IDEwMCwgICAgICAgICAgICAvL2luIG1pbGVzCiAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJhdG9yIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCgp2YXIgYWxsLCBhbnksIGNhbGN1bGF0ZURpc3RhbmNlLCBjYWxjdWxhdGVJbnRlcnNlY3Rpb24sIGNhbGN1bGF0ZVBlcmNlbnRhZ2UsIG51bGxPclVuZGVmaW5lZCwgc3BsaXRBbmRUcmltLAogICAgdW5kZWZpbmVkTG9jYXRpb247CgovLyBDb21wYXJpc29uUmVzdWx0CgovKioKICogQ29uc3RydWN0cyBhbiBpbnN0YW5jZSBvZiBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gcGVuYWx0eSBwb2ludHMuCiAqCiAqIEBwYXJhbSBwZW5hbHR5UG9pbnRzIChOdW1iZXIpIFRoZSBwZW5hbHR5IHBvaW50cyBmb3IgdGhlIGNvbXBhcmlzb24gKGRlZmF1bHRzIHRvIDApLgogKiBAcGFyYW0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSAoYm9vbGVhbikgV2hldGhlciB0aGUgY3VycmVudCB2YWx1ZSBjb250YWlucyBtb3JlIGluZm9ybWF0aW9uCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIHRoZSBzdG9yZWQgdmFsdWUgKGRlZmF1bHRzIHRvIGZhbHNlKS4KICovCmZ1bmN0aW9uIENvbXBhcmlzb25SZXN1bHQoKSB7CgogICAgdmFyIHBlbmFsdHlQb2ludHMgPSAwLAogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBmYWxzZTsKCiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQpIHsKICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBhcmd1bWVudHNbMV07CiAgICB9CgogICAgaWYgKGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkICYmIGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgaWYgKHR5cGVvZihhcmd1bWVudHNbMF0pID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSA9IGFyZ3VtZW50c1swXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIH0KICAgIH0KCiAgICB0aGlzLnBlbmFsdHlQb2ludHMgPSBwZW5hbHR5UG9pbnRzOwogICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZTsKCn0KCkNvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUyA9IG5ldyBDb21wYXJpc29uUmVzdWx0KDApOwoKLyoqCiAqIFN0YXRpYyBtZXRob2QgZm9yIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcuCiAqCiAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkuCiAqLwpDb21wYXJpc29uUmVzdWx0LmlzU3VjY2Vzc2Z1bCA9ICBmdW5jdGlvbihjb21wYXJpc29uUmVzdWx0KSB7CiAgICByZXR1cm4gY29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKTsKfTsKCgovKioKICogU3RhdGljIG1ldGhvZCBmb3IgZnVuY3Rpb25hbCBwcm9ncmFtbWluZy4KICoKICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gIGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHJldHVybiBjb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU7Cn07CgovKioKICogQ29tcGFyaXNvbiBmdW5jdGlvbiB0aGF0IGNhbiBiZSBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCB0byBhcnJheS5zb3J0CiAqLwpDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUgPSBmdW5jdGlvbihmaXJzdCwgc2Vjb25kKSB7CiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGZpcnN0KSAmJiBudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAwOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoZmlyc3QpKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAxOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoZmlyc3QucGVuYWx0eVBvaW50cyAhPT0gc2Vjb25kLnBlbmFsdHlQb2ludHMpIHsKICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnBlbmFsdHlQb2ludHMgLSBzZWNvbmQucGVuYWx0eVBvaW50czsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gKGZpcnN0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCkgLSAoc2Vjb25kLmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCk7CiAgICAgICAgfQogICAgfQp9OwoKLyoqCiAqIEFtYWxnYW1hdGVzIHRoZSBnaXZlbiBDb21wYXJpc29uUmVzdWx0IGludG8gdGhpcyBDb21wYXJpc29uUmVzdWx0LgogKgogKiBAcGFyYW0gY29tcGFyaXNvblJlc3VsdCBUaGUgQ29tcGFyaXNvblJlc3VsdCB0byBpbmNsdWRlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5wcm90b3R5cGUuYWRkQ29tcGFyaXNvblJlc3VsdCA9IGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHRoaXMucGVuYWx0eVBvaW50cyArPSBjb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHM7CiAgICBpZiAoY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKSB7CiAgICAgICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlOwogICAgfQp9OwoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBubyBwZW5hbHR5IHBvaW50cyBoYXZlIGJlZW4gYXNzaWduZWQgZm9yIHRoZSBjb21wYXJpc29uLgogKgogKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgY29tcGFyaXNvbiB3YXMgc3VjY2Vzc2Z1bC4KICovCkNvbXBhcmlzb25SZXN1bHQucHJvdG90eXBlLmlzU3VjY2Vzc2Z1bCA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZCh0aGlzLnBlbmFsdHlQb2ludHMpIHx8IHRoaXMucGVuYWx0eVBvaW50cyA9PT0gMDsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gc2ltcGxlIG9iamVjdHMgKFN0cmluZ3xOdW1iZXIpIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybwogKiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIGN1cnJlbnQgdmFsdWUuCiAqIEBwYXJhbSBzdG9yZWRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIHN0b3JlZCB2YWx1ZS4KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0LgogKi8KU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlID0gZnVuY3Rpb24gKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUsIGNvbmZpZykgewogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlN0cmluZ0NvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOnN0b3JlZFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoc3RvcmVkVmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOmNvbmZpZzogIiArIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpOwogICAgfQogICAgaWYgKGNvbmZpZy5wZW5hbHR5UG9pbnRzID09PSAwKSB7CiAgICAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUzsKICAgIH0KCiAgICBpZiAoIW51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgfHwgY3VycmVudFZhbHVlICE9PSBzdG9yZWRWYWx1ZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoIW51bGxPclVuZGVmaW5lZChjdXJyZW50VmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KHRydWUpOwogICAgfQoKICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7Cn07CgovKioKICogQ29tcGFyZXMgdHdvIHNjcmVlbnMgYW5kIGlmIHRoZXkgYXJlIGVxdWFsIHRoZW4gcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB6ZXJvIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLAogKiBvdGhlcndpc2UgcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiB7CiAqICAgICAgICAgICAgInNjcmVlbldpZHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBoZWlnaHQuCiAqICAgICAgICAgICAgInNjcmVlbkNvbG91ckRlcHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBjb2xvdXIgZGVwdGguCiAqICAgICAgICB9CiAqIEBwYXJhbSBzdG9yZWRWYWx1ZTogewogKiAgICAgICAgICAgICJzY3JlZW5XaWR0aCI6IChOdW1iZXIpIFRoZSBzdG9yZWQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIHN0b3JlZCBjbGllbnQgc2NyZWVuIGhlaWdodC4KICogICAgICAgICAgICAic2NyZWVuQ29sb3VyRGVwdGgiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGNsaWVudCBzY3JlZW4gY29sb3VyIGRlcHRoLgogKiAgICAgICAgfQogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgInBlbmFsdHlQb2ludHMiOiAoTnVtYmVyKSBUaGUgbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzLgogKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovClNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTY3JlZW5Db21wYXJhdG9yLmNvbXBhcmU6Y3VycmVudFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICBjdXJyZW50VmFsdWUgPSB7c2NyZWVuV2lkdGg6IG51bGwsIHNjcmVlbkhlaWdodDogbnVsbCwgc2NyZWVuQ29sb3VyRGVwdGg6IG51bGx9OwogICAgfQogICAgaWYgKG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBzdG9yZWRWYWx1ZSA9IHtzY3JlZW5XaWR0aDogbnVsbCwgc2NyZWVuSGVpZ2h0OiBudWxsLCBzY3JlZW5Db2xvdXJEZXB0aDogbnVsbH07CiAgICB9CgogICAgdmFyIGNvbXBhcmlzb25SZXN1bHRzID0gWwogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuV2lkdGgsIHN0b3JlZFZhbHVlLnNjcmVlbldpZHRoLCBjb25maWcpLAogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuSGVpZ2h0LCBzdG9yZWRWYWx1ZS5zY3JlZW5IZWlnaHQsIGNvbmZpZyksCiAgICAgICAgU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlKGN1cnJlbnRWYWx1ZS5zY3JlZW5Db2xvdXJEZXB0aCwgc3RvcmVkVmFsdWUuc2NyZWVuQ29sb3VyRGVwdGgsIGNvbmZpZyldOwoKICAgIGlmIChhbGwoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKSkgewogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChhbnkoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSkpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgfQp9OwoKLyoqCiAqIFNwbGl0cyBib3RoIHZhbHVlcyB1c2luZyBkZWxpbWl0ZXIsIHRyaW1zIGV2ZXJ5IHZhbHVlIGFuZCBjb21wYXJlcyBjb2xsZWN0aW9ucyBvZiB2YWx1ZXMuCiAqIFJldHVybnMgemVyby1yZXN1bHQgZm9yIHNhbWUgbXVsdGktdmFsdWUgYXR0cmlidXRlcy4KICoKICogSWYgY29sbGVjdGlvbnMgYXJlIG5vdCBzYW1lIGNoZWNrcyBpZiBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaXMgbGVzcyBvciBlcXVhbCBtYXhEaWZmZXJlbmNlcyBvcgogKiBwZXJjZW50YWdlIG9mIGRpZmZlcmVuY2UgaXMgbGVzcyBvciBlcXVhbCBtYXhQZXJjZW50YWdlRGlmZmVyZW5jZS4KICoKICogSWYgeWVzIHRoZW4gcmV0dXJucyB6ZXJvLXJlc3VsdCB3aXRoIGFkZGl0aW9uYWwgaW5mbywgZWxzZSByZXR1cm5zIHBlbmFsdHlQb2ludHMtcmVzdWx0LgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlOiAoU3RyaW5nKSBUaGUgc3RvcmVkIHZhbHVlLgogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgIm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlIjogKE51bWJlcikgVGhlIG1heCBkaWZmZXJlbmNlIHBlcmNlbnRhZ2UgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgaXMgYXNzaWduZWQuCiAqICAgICAgICAgICAgIm1heERpZmZlcmVuY2VzIjogKE51bWJlcikgVGhlIG1heCBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgcG9pbnRzIGFyZSBhc3NpZ25lZC4KICogICAgICAgICAgICAicGVuYWx0eVBvaW50cyI6IChOdW1iZXIpIFRoZSBudW1iZXIgb2YgcGVuYWx0eSBwb2ludHMuCiAgKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovCk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgdmFyIGRlbGltaXRlciA9ICI7IiwKICAgICAgICBjdXJyZW50VmFsdWVzID0gc3BsaXRBbmRUcmltKGN1cnJlbnRWYWx1ZSwgZGVsaW1pdGVyKSwKICAgICAgICBzdG9yZWRWYWx1ZXMgPSBzcGxpdEFuZFRyaW0oc3RvcmVkVmFsdWUsIGRlbGltaXRlciksCiAgICAgICAgbWF4TnVtYmVyT2ZFbGVtZW50cyA9IE1hdGgubWF4KGN1cnJlbnRWYWx1ZXMubGVuZ3RoLCBzdG9yZWRWYWx1ZXMubGVuZ3RoKSwKICAgICAgICBudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9IGNhbGN1bGF0ZUludGVyc2VjdGlvbihjdXJyZW50VmFsdWVzLCBzdG9yZWRWYWx1ZXMpLmxlbmd0aCwKICAgICAgICBudW1iZXJPZkRpZmZlcmVuY2VzID0gbWF4TnVtYmVyT2ZFbGVtZW50cyAtIG51bWJlck9mVGhlU2FtZUVsZW1lbnRzLAogICAgICAgIHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzID0gY2FsY3VsYXRlUGVyY2VudGFnZShudW1iZXJPZkRpZmZlcmVuY2VzLCBtYXhOdW1iZXJPZkVsZW1lbnRzKTsKCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKHN0b3JlZFZhbHVlKSAmJiAhbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UobnVtYmVyT2ZUaGVTYW1lRWxlbWVudHMgKyAiIG9mICIgKyBtYXhOdW1iZXJPZkVsZW1lbnRzICsgIiBhcmUgc2FtZSIpOwogICAgfQoKICAgIGlmIChtYXhOdW1iZXJPZkVsZW1lbnRzID09PSAwKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBubyBhdHRyaWJ1dGVzIGZvdW5kIGluIGJvdGggcHJvZmlsZXMiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9PT0gbWF4TnVtYmVyT2ZFbGVtZW50cykgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJJZ25vcmVkIGJlY2F1c2UgYWxsIGF0dHJpYnV0ZXMgYXJlIHNhbWUiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZkRpZmZlcmVuY2VzID4gY29uZmlnLm1heERpZmZlcmVuY2VzKSB7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJXb3VsZCBiZSBpZ25vcmVkIGlmIG5vdCBtb3JlIHRoYW4gIiArIGNvbmZpZy5tYXhEaWZmZXJlbmNlcyArICIgZGlmZmVyZW5jZXMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KCiAgICBpZiAocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgPiBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgKyAiIHBlcmNlbnRzIGFyZSBkaWZmZXJlbnQiKTsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIldvdWxkIGJlIGlnbm9yZWQgaWYgbm90IG1vcmUgdGhhbiAiICsgY29uZmlnLm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlICsgIiBwZXJjZW50Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChjb25maWcucGVuYWx0eVBvaW50cyk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBudW1iZXIgb2YgZGlmZmVyZW5jZXMoIiArIG51bWJlck9mRGlmZmVyZW5jZXMgKyAiKSBub3QgbW9yZSB0aGFuICIKICAgICAgICAgICAgKyBjb25maWcubWF4RGlmZmVyZW5jZXMpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzICsgIiBwZXJjZW50cyBhcmUgZGlmZmVyZW50Iik7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBub3QgbW9yZSB0aGFuICIgKyBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UgKyAiIHBlcmNlbnQiKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdCh0cnVlKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gVXNlciBBZ2VudCBTdHJpbmdzIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybyBwZW5hbHR5CiAqIHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlIChTdHJpbmcpIFRoZSBzdG9yZWQgdmFsdWUuCiAqIEBwYXJhbSBjb25maWc6IHsKICogICAgICAgICAgICAiaWdub3JlVmVyc2lvbiI6IChib29sZWFuKSBJZiB0aGUgdmVyc2lvbiBudW1iZXJzIGluIHRoZSBVc2VyIEFnZW50IFN0cmluZ3Mgc2hvdWxkIGJlIGlnbm9yZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb21wYXJpc29uLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBBIENvbXBhcmlzb25SZXN1bHQuCiAqLwpVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiVXNlckFnZW50Q29tcGFyYXRvci5jb21wYXJlOmN1cnJlbnRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgaWYgKGNvbmZpZy5pZ25vcmVWZXJzaW9uKSB7CiAgICAgICAgLy8gcmVtb3ZlIHZlcnNpb24gbnVtYmVyCiAgICAgICAgY3VycmVudFZhbHVlID0gbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgPyBudWxsIDogY3VycmVudFZhbHVlLnJlcGxhY2UoL1tcZFwuXSsvZywgIiIpLnRyaW0oKTsKICAgICAgICBzdG9yZWRWYWx1ZSA9IG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkgPyBudWxsIDogc3RvcmVkVmFsdWUucmVwbGFjZSgvW1xkXC5dKy9nLCAiIikudHJpbSgpOwogICAgfQoKICAgIHJldHVybiBTY2FsYXJDb21wYXJhdG9yLmNvbXBhcmUoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gbG9jYXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50IGEgZGVncmVlIG9mIGRpZmZlcmVuY2UuCiAqCiAqIEBwYXJhbSBjdXJyZW50VmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgY3VycmVudCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGN1cnJlbnQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcGFyYW0gc3RvcmVkVmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxhdGl0dWRlLgogKiAgICAgICAgICAgICJsb25naXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJhbGxvd2VkUmFuZ2UiOiAoTnVtYmVyKSBUaGUgbWF4IGRpZmZlcmVuY2UgYWxsb3dlZCBpbiB0aGUgdHdvIGxvY2F0aW9ucywgYmVmb3JlIHRoZSBwZW5hbHR5IGlzIGFzc2lnbmVkLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KKiAgICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0CiAqLwpHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiR2VvbG9jYXRpb25Db21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICAvLyBDaGVjayBmb3IgdW5kZWZpbmVkIHN0b3JlZCBvciBjdXJyZW50IGxvY2F0aW9ucwoKICAgIGlmICh1bmRlZmluZWRMb2NhdGlvbihjdXJyZW50VmFsdWUpICYmIHVuZGVmaW5lZExvY2F0aW9uKHN0b3JlZFZhbHVlKSkgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CiAgICBpZiAodW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiAhdW5kZWZpbmVkTG9jYXRpb24oc3RvcmVkVmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KICAgIGlmICghdW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiB1bmRlZmluZWRMb2NhdGlvbihzdG9yZWRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgLy8gQm90aCBsb2NhdGlvbnMgZGVmaW5lZCwgdGhlcmVmb3JlIHBlcmZvcm0gY29tcGFyaXNvbgoKICAgIHZhciBkaXN0YW5jZSA9IGNhbGN1bGF0ZURpc3RhbmNlKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUpOwoKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJEaXN0YW5jZSBiZXR3ZWVuICgiICsgY3VycmVudFZhbHVlLmxhdGl0dWRlICsgIiwiICsgY3VycmVudFZhbHVlLmxvbmdpdHVkZSArICIpIGFuZCAoIiArCiAgICAgICAgICAgIHN0b3JlZFZhbHVlLmxhdGl0dWRlICsgIiwiICsgc3RvcmVkVmFsdWUubG9uZ2l0dWRlICsgIikgaXMgIiArIGRpc3RhbmNlICsgIiBtaWxlcyIpOwogICAgfQoKICAgIGlmIChwYXJzZUZsb2F0KGRpc3RhbmNlLnRvUHJlY2lzaW9uKDUpKSA9PT0gMCkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJMb2NhdGlvbiBpcyB0aGUgc2FtZSIpOwogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CgogICAgaWYgKGRpc3RhbmNlIDw9IGNvbmZpZy5hbGxvd2VkUmFuZ2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlRvbGVyYXRlZCBiZWNhdXNlIGRpc3RhbmNlIG5vdCBtb3JlIHRoZW4gIiArIGNvbmZpZy5hbGxvd2VkUmFuZ2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiV291bGQgYmUgaWdub3JlZCBpZiBkaXN0YW5jZSBub3QgbW9yZSB0aGVuICIgKyBjb25maWcuYWxsb3dlZFJhbmdlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KfTsKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi8vICAgICAgICAgICAgICAgICAgICBEZXZpY2UgUHJpbnQgTG9naWMgLSBETyBOT1QgTU9ESUZZICAgICAgICAgICAgICAgICAgICAgLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwoKLy8gVXRpbGl0eSBmdW5jdGlvbnMKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgZXZhbHVhdGluZyBmdW5jdGlvbiBmIG9uIGVhY2ggZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYWxsID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn07CgovKioKICogUmV0dXJucyB0cnVlIGlmIGV2YWx1YXRpbmcgZnVuY3Rpb24gZiBvbiBhbnkgZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYW55ID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGxvY2F0aW9uIGlzIG51bGwgb3IgaGFzIHVuZGVmaW5lZCBsb25naXR1ZGUgb3IgbGF0aXR1ZGUgdmFsdWVzLgogKgogKiBAcGFyYW0gbG9jYXRpb246IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBsb25naXR1ZGUuCiAqICAgICAgICB9CiAqIEByZXR1cm4gYm9vbGVhbgogKi8KdW5kZWZpbmVkTG9jYXRpb24gPSBmdW5jdGlvbihsb2NhdGlvbikgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZChsb2NhdGlvbikgfHwgbnVsbE9yVW5kZWZpbmVkKGxvY2F0aW9uLmxhdGl0dWRlKSB8fCBudWxsT3JVbmRlZmluZWQobG9jYXRpb24ubG9uZ2l0dWRlKTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLgogKgogKiBAcGFyYW0gdmFsdWU6IGEgdmFsdWUgb2YgYW55IHR5cGUKICogQHJldHVybiBib29sZWFuCiAqLwpudWxsT3JVbmRlZmluZWQgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7Cn07CgovKioKICogQ2FsY3VsYXRlcyB0aGUgZGlzdGFuY2VzIGJldHdlZW4gdGhlIHR3byBsb2NhdGlvbnMuCiAqCiAqIEBwYXJhbSBmaXJzdDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBmaXJzdCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGZpcnN0IGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIHNlY29uZDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcmV0dXJuIE51bWJlciBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdHdvIGxvY2F0aW9ucy4KICovCmNhbGN1bGF0ZURpc3RhbmNlID0gZnVuY3Rpb24oZmlyc3QsIHNlY29uZCkgewogICAgdmFyIGZhY3RvciA9IChNYXRoLlBJIC8gMTgwKSwKICAgICAgICB0aGV0YSwKICAgICAgICBkaXN0OwogICAgZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkZWdyZWVzKSB7CiAgICAgICAgcmV0dXJuIGRlZ3JlZXMgKiBmYWN0b3I7CiAgICB9CiAgICBmdW5jdGlvbiByYWRpYW5zVG9EZWdyZWVzKHJhZGlhbnMpIHsKICAgICAgICByZXR1cm4gcmFkaWFucyAvIGZhY3RvcjsKICAgIH0KICAgIHRoZXRhID0gZmlyc3QubG9uZ2l0dWRlIC0gc2Vjb25kLmxvbmdpdHVkZTsKICAgIGRpc3QgPSBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKyBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHRoZXRhKSk7CiAgICBkaXN0ID0gTWF0aC5hY29zKGRpc3QpOwogICAgZGlzdCA9IHJhZGlhbnNUb0RlZ3JlZXMoZGlzdCk7CiAgICBkaXN0ID0gZGlzdCAqIDYwICogMS4xNTE1OwogICAgcmV0dXJuIGRpc3Q7Cn07CgovKioKICogQ29udmVydHMgYSBTdHJpbmcgaG9sZGluZyBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMgaW50byBhbiBhcnJheS4KICoKICogQHBhcmFtIHRleHQgKFN0cmluZykgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMuCiAqIEBwYXJhbSBkZWxpbWl0ZXIgKFN0cmluZykgVGhlIGNoYXJhY3RlciBkZWxpbWl0aW5nIHZhbHVlcyB3aXRoaW4gdGhlIHRleHQgU3RyaW5nLgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMuCiAqLwpzcGxpdEFuZFRyaW0gPSBmdW5jdGlvbih0ZXh0LCBkZWxpbWl0ZXIpIHsKCiAgICB2YXIgcmVzdWx0cyA9IFtdLAogICAgICAgIGksCiAgICAgICAgdmFsdWVzLAogICAgICAgIHZhbHVlOwogICAgaWYgKHRleHQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KCiAgICB2YWx1ZXMgPSB0ZXh0LnNwbGl0KGRlbGltaXRlcik7CiAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFsdWUgPSB2YWx1ZXNbaV0udHJpbSgpOwogICAgICAgIGlmICh2YWx1ZSAhPT0gIiIpIHsKICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdHM7Cn07CgovKioKICogQ29udmVydHMgdmFsdWUgdG8gYSBwZXJjZW50YWdlIG9mIHJhbmdlLgogKgogKiBAcGFyYW0gdmFsdWUgKE51bWJlcikgVGhlIGFjdHVhbCBudW1iZXIgdG8gYmUgY29udmVydGVkIHRvIGEgcGVyY2VudGFnZS4KICogQHBhcmFtIHJhbmdlIChOdW1iZXIpIFRoZSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzIChpLmUuIHJlcHJlc2VudHMgMTAwJSkuCiAqIEByZXR1cm4gKE51bWJlcikgVGhlIHBlcmNlbnRhZ2UuCiAqLwpjYWxjdWxhdGVQZXJjZW50YWdlID0gZnVuY3Rpb24odmFsdWUsIHJhbmdlKSB7CiAgICBpZiAocmFuZ2UgPT09IDApIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBwYXJzZUZsb2F0KCh2YWx1ZSAvIHJhbmdlKS50b1ByZWNpc2lvbigyKSkgKiAxMDA7Cn07CgovKioKICogQ3JlYXRlcyBhIG5ldyBhcnJheSBjb250YWluaW5nIG9ubHkgdGhvc2UgZWxlbWVudHMgZm91bmQgaW4gYm90aCBhcnJheXMgcmVjZWl2ZWQgYXMgYXJndW1lbnRzLgogKgogKiBAcGFyYW0gZmlyc3QgKEFycmF5KSBUaGUgZmlyc3QgYXJyYXkuCiAqIEBwYXJhbSBzZWNvbmQgKEFycmF5KSBUaGUgc2Vjb25kIGFycmF5LgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGVsZW1lbnRzIHRoYXQgZm91bmQgaW4gZmlyc3QgYW5kIHNlY29uZC4KICovCmNhbGN1bGF0ZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGZpcnN0LCBzZWNvbmQpIHsKICAgIHJldHVybiBmaXJzdC5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgIHJldHVybiBzZWNvbmQuaW5kZXhPZihlbGVtZW50KSAhPT0gLTE7CiAgICB9KTsKfTsKCmZ1bmN0aW9uIGdldFZhbHVlKG9iaiwgYXR0cmlidXRlUGF0aCkgewogICAgdmFyIHZhbHVlID0gb2JqLAogICAgICAgIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cmlidXRlUGF0aC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICB2YWx1ZSA9IHZhbHVlW2F0dHJpYnV0ZVBhdGhbaV1dOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwp9CgoKZnVuY3Rpb24gaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWcpIHsKICAgIHJldHVybiBhdHRyaWJ1dGVDb25maWcuY29tcGFyYXRvciAhPT0gdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcsIGF0dHJpYnV0ZVBhdGgpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBbXSwKICAgICAgICBhdHRyaWJ1dGVOYW1lLAogICAgICAgIGF0dHJQYXRocywKICAgICAgICBhdHRyUGF0aCwKICAgICAgICBpOwoKICAgIGZvciAoYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVDb25maWcpIHsKICAgICAgICBpZiAoYXR0cmlidXRlQ29uZmlnLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZU5hbWUpKSB7CgogICAgICAgICAgICBpZiAoaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWdbYXR0cmlidXRlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBhdHRyUGF0aCA9IGF0dHJpYnV0ZVBhdGguc2xpY2UoKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRoLnB1c2goYXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVQYXRocy5wdXNoKGF0dHJQYXRoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJQYXRoID0gYXR0cmlidXRlUGF0aC5zbGljZSgpOwogICAgICAgICAgICAgICAgYXR0clBhdGgucHVzaChhdHRyaWJ1dGVOYW1lKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRocyA9IGdldEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZ1thdHRyaWJ1dGVOYW1lXSwgYXR0clBhdGgpOwogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGF0dHJQYXRocy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVBhdGhzLnB1c2goYXR0clBhdGhzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYXR0cmlidXRlUGF0aHM7Cn0KCmZ1bmN0aW9uIGdldERldmljZVByaW50QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnKSB7CiAgICByZXR1cm4gZ2V0QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnLCBbXSk7Cn0KCmZ1bmN0aW9uIGhhc1JlcXVpcmVkQXR0cmlidXRlcyhkZXZpY2VQcmludCwgYXR0cmlidXRlQ29uZmlnKSB7CgogICAgdmFyIGF0dHJpYnV0ZVBhdGhzID0gZ2V0RGV2aWNlUHJpbnRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcpLAogICAgICAgIGksCiAgICAgICAgYXR0clZhbHVlLAogICAgICAgIGF0dHJDb25maWc7CgogICAgZm9yIChpID0gMDsgaSA8IGF0dHJpYnV0ZVBhdGhzLmxlbmd0aDsgaSsrKSB7CgogICAgICAgIGF0dHJWYWx1ZSA9IGdldFZhbHVlKGRldmljZVByaW50LCBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICBpZiAoYXR0ckNvbmZpZy5yZXF1aXJlZCAmJiBhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBsb2dnZXIud2FybmluZygiRGV2aWNlIFByaW50IHByb2ZpbGUgbWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUsICIgKyBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZSBwcmludCBoYXMgcmVxdWlyZWQgYXR0cmlidXRlcyIpOwogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGF0dHJpYnV0ZUNvbmZpZywgZGV2aWNlUHJpbnQsIGRldmljZVByaW50UHJvZmlsZXMsIG1heFBlbmFsdHlQb2ludHMpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBnZXREZXZpY2VQcmludEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZyksCiAgICAgICAgZGFvID0gc2hhcmVkU3RhdGUuZ2V0KCdfRGV2aWNlSWREYW8nKSwKICAgICAgICByZXN1bHRzLAogICAgICAgIGosCiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQsCiAgICAgICAgaSwKICAgICAgICBjdXJyZW50VmFsdWUsCiAgICAgICAgc3RvcmVkVmFsdWUsCiAgICAgICAgYXR0ckNvbmZpZywKICAgICAgICBjb21wYXJpc29uUmVzdWx0LAogICAgICAgIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICBzZWxlY3RlZFByb2ZpbGUsCiAgICAgICAgY3VyRGV2aWNlUHJpbnRQcm9maWxlLAogICAgICAgIHZhbHM7CgogICAgcmVzdWx0cyA9IFtdOwogICAgZm9yIChqID0gMDsgaiA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBjdXJEZXZpY2VQcmludFByb2ZpbGUgPSBKU09OLnBhcnNlKG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvbihkZXZpY2VQcmludFByb2ZpbGVzW2pdKSk7CiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQgPSBuZXcgQ29tcGFyaXNvblJlc3VsdCgpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdHRyaWJ1dGVQYXRocy5sZW5ndGg7IGkrKykgewoKICAgICAgICAgICAgY3VycmVudFZhbHVlID0gZ2V0VmFsdWUoZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgc3RvcmVkVmFsdWUgPSBnZXRWYWx1ZShjdXJEZXZpY2VQcmludFByb2ZpbGUuZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICAgICAgaWYgKHN0b3JlZFZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb21wYXJpc29uUmVzdWx0ID0gbmV3IENvbXBhcmlzb25SZXN1bHQoYXR0ckNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbXBhcmlzb25SZXN1bHQgPSBhdHRyQ29uZmlnLmNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBhdHRyQ29uZmlnLmFyZ3MpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJDb21wYXJpbmcgYXR0cmlidXRlIHBhdGg6ICIgKyBhdHRyaWJ1dGVQYXRoc1tpXQogICAgICAgICAgICAgICAgICAgICsgIiwgQ29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkgKyAiLCBwZW5hbHR5UG9pbnRzPSIKICAgICAgICAgICAgICAgICAgICArIGNvbXBhcmlzb25SZXN1bHQucGVuYWx0eVBvaW50cyArICIsIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU9IgogICAgICAgICAgICAgICAgICAgICsgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5hZGRDb21wYXJpc29uUmVzdWx0KGNvbXBhcmlzb25SZXN1bHQpOwogICAgICAgIH0KICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIkFnZ3JlZ2F0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKSArICIsIHBlbmFsdHlQb2ludHM9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICAgICArIGFnZ3JlZ2F0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmVzdWx0cy5wdXNoKHsKICAgICAgICAgICAga2V5OiBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICAgICAgdmFsdWU6IGRldmljZVByaW50UHJvZmlsZXNbal0KICAgICAgICB9KTsKICAgIH0KCiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXN1bHRzLnNvcnQoZnVuY3Rpb24oYSwgYikgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUoYS5rZXksIGIua2V5KTsKICAgIH0pOwogICAgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0ID0gcmVzdWx0c1swXS5rZXk7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU2VsZWN0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKQogICAgICAgICAgICArICIsIHBlbmFsdHlQb2ludHM9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgfQoKICAgIHNlbGVjdGVkUHJvZmlsZSA9IG51bGw7CiAgICBpZiAoc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgPD0gbWF4UGVuYWx0eVBvaW50cykgewogICAgICAgIHNlbGVjdGVkUHJvZmlsZSA9IHJlc3VsdHNbMF0udmFsdWU7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTZWxlY3RlZCBwcm9maWxlOiAiICsgc2VsZWN0ZWRQcm9maWxlICsKICAgICAgICAgICAgICAgICIgd2l0aCAiICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgKyAiIHBlbmFsdHkgcG9pbnRzIik7CiAgICAgICAgfQogICAgfQoKICAgIGlmIChzZWxlY3RlZFByb2ZpbGUgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyogdXBkYXRlIHByb2ZpbGUgKi8KICAgIHNlbGVjdGVkUHJvZmlsZS5wdXQoInNlbGVjdGlvbkNvdW50ZXIiLAogICAgICAgIGphdmEubGFuZy5JbnRlZ2VyLnZhbHVlT2YocGFyc2VJbnQoc2VsZWN0ZWRQcm9maWxlLmdldCgic2VsZWN0aW9uQ291bnRlciIpLCAxMCkgKyAxKSk7CiAgICBzZWxlY3RlZFByb2ZpbGUucHV0KCJsYXN0U2VsZWN0ZWREYXRlIiwgamF2YS5sYW5nLkxvbmcudmFsdWVPZihuZXcgRGF0ZSgpLmdldFRpbWUoKSkpOwogICAgc2VsZWN0ZWRQcm9maWxlLnB1dCgiZGV2aWNlUHJpbnQiLCBkZXZpY2VQcmludCk7CgogICAgdmFscyA9IFtdOwogICAgZm9yIChpID0gMDsgaSA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YWxzLnB1c2gob3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uKGRldmljZVByaW50UHJvZmlsZXNbaV0pKTsKICAgIH0KCiAgICBkYW8uc2F2ZURldmljZVByb2ZpbGVzKHVzZXJuYW1lLCByZWFsbSwgdmFscyk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIG1hdGNoRGV2aWNlUHJpbnQoKSB7CgogICAgaWYgKCF1c2VybmFtZSkgewogICAgICAgIGxvZ2dlci5lcnJvcigiVXNlcm5hbWUgbm90IHNldC4gQ2Fubm90IGNvbXBhcmUgdXNlcidzIGRldmljZSBwcmludCBwcm9maWxlcy4iKTsKICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICB9IGVsc2UgewoKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImNsaWVudCBkZXZpY2VQcmludDogIiArIGNsaWVudFNjcmlwdE91dHB1dERhdGEpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGdldFByb2ZpbGVzID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRXhwaXJlZFByb2ZpbGUoZGV2aWNlUHJpbnRQcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cGlyYXRpb25EYXRlID0gbmV3IERhdGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNlbGVjdGVkRGF0ZTsKICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uRGF0ZS5zZXREYXRlKGV4cGlyYXRpb25EYXRlLmdldERhdGUoKSAtIGNvbmZpZy5wcm9maWxlRXhwaXJhdGlvbik7CgogICAgICAgICAgICAgICAgICAgIGxhc3RTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShkZXZpY2VQcmludFByb2ZpbGUubGFzdFNlbGVjdGVkRGF0ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0U2VsZWN0ZWREYXRlIDwgZXhwaXJhdGlvbkRhdGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICBkYW8gPSBzaGFyZWRTdGF0ZS5nZXQoJ19EZXZpY2VJZERhbycpLAogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVzLAogICAgICAgICAgICAgICAgICAgICAgICBpdGVyOwoKICAgICAgICAgICAgICAgICAgICBwcm9maWxlcyA9IGRhby5nZXREZXZpY2VQcm9maWxlcyh1c2VybmFtZSwgcmVhbG0pOwoKICAgICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaXRlciA9IHByb2ZpbGVzLml0ZXJhdG9yKCk7CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgPSBpdGVyLm5leHQoKS5nZXRPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFeHBpcmVkUHJvZmlsZShwcm9maWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChwcm9maWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoInN0b3JlZCBub24tZXhwaXJlZCBwcm9maWxlczogIiArIHJlc3VsdHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRldmljZVByaW50ID0gSlNPTi5wYXJzZShjbGllbnRTY3JpcHRPdXRwdXREYXRhKSwKICAgICAgICAgICAgZGV2aWNlUHJpbnRQcm9maWxlcyA9IGdldFByb2ZpbGVzKCk7CgogICAgICAgIGlmICghaGFzUmVxdWlyZWRBdHRyaWJ1dGVzKGRldmljZVByaW50LCBjb25maWcuYXR0cmlidXRlcykpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZVByaW50Lmhhc1JlcXVpcmVkQXR0cmlidXRlczogZmFsc2UiKTsKICAgICAgICAgICAgLy8gV2lsbCBmYWlsIHRoaXMgbW9kdWxlIGJ1dCBmYWxsLXRocm91Z2ggdG8gbmV4dCBtb2R1bGUuIFdoaWNoIHNob3VsZCBiZSBPVFAuCiAgICAgICAgICAgIGF1dGhTdGF0ZSA9IEZBSUxFRDsKICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGNvbmZpZy5hdHRyaWJ1dGVzLCBkZXZpY2VQcmludCwgZGV2aWNlUHJpbnRQcm9maWxlcywgY29uZmlnLm1heFBlbmFsdHlQb2ludHMpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJkZXZpY2VQcmludC5oYXNWYWxpZFByb2ZpbGU6IHRydWUiKTsKICAgICAgICAgICAgYXV0aFN0YXRlID0gU1VDQ0VTUzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiZGV2aWNlUHJpbnQuaGFzVmFsaWRQcm9maWxlOiBmYWxzZSIpOwogICAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoJ2RldmljZVByaW50UHJvZmlsZScsIEpTT04uc3RyaW5naWZ5KGRldmljZVByaW50KSk7CiAgICAgICAgICAgIC8vIFdpbGwgZmFpbCB0aGlzIG1vZHVsZSBidXQgZmFsbC10aHJvdWdoIHRvIG5leHQgbW9kdWxlLiBXaGljaCBzaG91bGQgYmUgT1RQLgogICAgICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICAgICAgfQogICAgfQp9CgptYXRjaERldmljZVByaW50KCk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"10643e95-873a-4ec0-b713-a7f56760d179\",\"name\":\"FrodoTestScript4\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"157298c0-7d31-4059-a95b-eeb08473b7e5\",\"name\":\"Device Id (Match) - Client Side\",\"description\":\"Default global script for client side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGZvbnREZXRlY3RvciA9IChmdW5jdGlvbiAoKSB7CiAgICAvKioKICAgICAqIEphdmFTY3JpcHQgY29kZSB0byBkZXRlY3QgYXZhaWxhYmxlIGF2YWlsYWJpbGl0eSBvZiBhCiAgICAgKiBwYXJ0aWN1bGFyIGZvbnQgaW4gYSBicm93c2VyIHVzaW5nIEphdmFTY3JpcHQgYW5kIENTUy4KICAgICAqCiAgICAgKiBBdXRob3IgOiBMYWxpdCBQYXRlbAogICAgICogV2Vic2l0ZTogaHR0cDovL3d3dy5sYWxpdC5vcmcvbGFiL2phdmFzY3JpcHQtY3NzLWZvbnQtZGV0ZWN0LwogICAgICogTGljZW5zZTogQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wCiAgICAgKiAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAgICAqIFZlcnNpb246IDAuMTUgKDIxIFNlcCAyMDA5KQogICAgICogICAgICAgICAgQ2hhbmdlZCBjb21wYXJpc2lvbiBmb250IHRvIGRlZmF1bHQgZnJvbSBzYW5zLWRlZmF1bHQtZGVmYXVsdCwKICAgICAqICAgICAgICAgIGFzIGluIEZGMy4wIGZvbnQgb2YgY2hpbGQgZWxlbWVudCBkaWRuJ3QgZmFsbGJhY2sKICAgICAqICAgICAgICAgIHRvIHBhcmVudCBlbGVtZW50IGlmIHRoZSBmb250IGlzIG1pc3NpbmcuCiAgICAgKiBWZXJzaW9uOiAwLjIgKDA0IE1hciAyMDEyKQogICAgICogICAgICAgICAgQ29tcGFyaW5nIGZvbnQgYWdhaW5zdCBhbGwgdGhlIDMgZ2VuZXJpYyBmb250IGZhbWlsaWVzIGllLAogICAgICogICAgICAgICAgJ21vbm9zcGFjZScsICdzYW5zLXNlcmlmJyBhbmQgJ3NhbnMnLiBJZiBpdCBkb2Vzbid0IG1hdGNoIGFsbCAzCiAgICAgKiAgICAgICAgICB0aGVuIHRoYXQgZm9udCBpcyAxMDAlIG5vdCBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbQogICAgICogVmVyc2lvbjogMC4zICgyNCBNYXIgMjAxMikKICAgICAqICAgICAgICAgIFJlcGxhY2VkIHNhbnMgd2l0aCBzZXJpZiBpbiB0aGUgbGlzdCBvZiBiYXNlRm9udHMKICAgICAqLwogICAgLyoKICAgICAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMgRm9yZ2VSb2NrIEFTLgogICAgICovCiAgICB2YXIgZGV0ZWN0b3IgPSB7fSwgYmFzZUZvbnRzLCB0ZXN0U3RyaW5nLCB0ZXN0U2l6ZSwgaCwgcywgZGVmYXVsdFdpZHRoID0ge30sIGRlZmF1bHRIZWlnaHQgPSB7fSwgaW5kZXg7CgogICAgLy8gYSBmb250IHdpbGwgYmUgY29tcGFyZWQgYWdhaW5zdCBhbGwgdGhlIHRocmVlIGRlZmF1bHQgZm9udHMuCiAgICAvLyBhbmQgaWYgaXQgZG9lc24ndCBtYXRjaCBhbGwgMyB0aGVuIHRoYXQgZm9udCBpcyBub3QgYXZhaWxhYmxlLgogICAgYmFzZUZvbnRzID0gWydtb25vc3BhY2UnLCAnc2Fucy1zZXJpZicsICdzZXJpZiddOwoKICAgIC8vd2UgdXNlIG0gb3IgdyBiZWNhdXNlIHRoZXNlIHR3byBjaGFyYWN0ZXJzIHRha2UgdXAgdGhlIG1heGltdW0gd2lkdGguCiAgICAvLyBBbmQgd2UgdXNlIGEgTExpIHNvIHRoYXQgdGhlIHNhbWUgbWF0Y2hpbmcgZm9udHMgY2FuIGdldCBzZXBhcmF0ZWQKICAgIHRlc3RTdHJpbmcgPSAibW1tbW1tbW1tbWxsaSI7CgogICAgLy93ZSB0ZXN0IHVzaW5nIDcycHggZm9udCBzaXplLCB3ZSBtYXkgdXNlIGFueSBzaXplLiBJIGd1ZXNzIGxhcmdlciB0aGUgYmV0dGVyLgogICAgdGVzdFNpemUgPSAnNzJweCc7CgogICAgaCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07CgogICAgLy8gY3JlYXRlIGEgU1BBTiBpbiB0aGUgZG9jdW1lbnQgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgdGV4dCB3ZSB1c2UgdG8gdGVzdAogICAgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIHMuc3R5bGUuZm9udFNpemUgPSB0ZXN0U2l6ZTsKICAgIHMuaW5uZXJIVE1MID0gdGVzdFN0cmluZzsKICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHQgd2lkdGggZm9yIHRoZSB0aHJlZSBiYXNlIGZvbnRzCiAgICAgICAgcy5zdHlsZS5mb250RmFtaWx5ID0gYmFzZUZvbnRzW2luZGV4XTsKICAgICAgICBoLmFwcGVuZENoaWxkKHMpOwogICAgICAgIGRlZmF1bHRXaWR0aFtiYXNlRm9udHNbaW5kZXhdXSA9IHMub2Zmc2V0V2lkdGg7IC8vd2lkdGggZm9yIHRoZSBkZWZhdWx0IGZvbnQKICAgICAgICBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dID0gcy5vZmZzZXRIZWlnaHQ7IC8vaGVpZ2h0IGZvciB0aGUgZGVmdWFsdCBmb250CiAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgIH0KCiAgICBkZXRlY3Rvci5kZXRlY3QgPSBmdW5jdGlvbihmb250KSB7CiAgICAgICAgdmFyIGRldGVjdGVkID0gZmFsc2UsIGluZGV4LCBtYXRjaGVkOwogICAgICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgICAgIHMuc3R5bGUuZm9udEZhbWlseSA9IGZvbnQgKyAnLCcgKyBiYXNlRm9udHNbaW5kZXhdOyAvLyBuYW1lIG9mIHRoZSBmb250IGFsb25nIHdpdGggdGhlIGJhc2UgZm9udCBmb3IgZmFsbGJhY2suCiAgICAgICAgICAgIGguYXBwZW5kQ2hpbGQocyk7CiAgICAgICAgICAgIG1hdGNoZWQgPSAocy5vZmZzZXRXaWR0aCAhPT0gZGVmYXVsdFdpZHRoW2Jhc2VGb250c1tpbmRleF1dIHx8IHMub2Zmc2V0SGVpZ2h0ICE9PSBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dKTsKICAgICAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgICAgICAgICAgZGV0ZWN0ZWQgPSBkZXRlY3RlZCB8fCBtYXRjaGVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGV0ZWN0ZWQ7CiAgICB9OwoKICAgIHJldHVybiBkZXRlY3RvcjsKfSgpKTsKLyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAxNCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGNvbGxlY3RTY3JlZW5JbmZvID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBzY3JlZW5JbmZvID0ge307CiAgICAgICAgaWYgKHNjcmVlbikgewogICAgICAgICAgICBpZiAoc2NyZWVuLndpZHRoKSB7CiAgICAgICAgICAgICAgICBzY3JlZW5JbmZvLnNjcmVlbldpZHRoID0gc2NyZWVuLndpZHRoOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLmhlaWdodCkgewogICAgICAgICAgICAgICAgc2NyZWVuSW5mby5zY3JlZW5IZWlnaHQgPSBzY3JlZW4uaGVpZ2h0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLnBpeGVsRGVwdGgpIHsKICAgICAgICAgICAgICAgIHNjcmVlbkluZm8uc2NyZWVuQ29sb3VyRGVwdGggPSBzY3JlZW4ucGl4ZWxEZXB0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3Qgc2NyZWVuIGluZm9ybWF0aW9uLiBzY3JlZW4gaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzY3JlZW5JbmZvOwogICAgfSwKICAgIGNvbGxlY3RUaW1lem9uZUluZm8gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHRpbWV6b25lSW5mbyA9ICB7fSwgb2Zmc2V0ID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOwoKICAgICAgICBpZiAob2Zmc2V0KSB7CiAgICAgICAgICAgIHRpbWV6b25lSW5mby50aW1lem9uZSA9IG9mZnNldDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbm5vdCBjb2xsZWN0IHRpbWV6b25lIGluZm9ybWF0aW9uLiB0aW1lem9uZSBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aW1lem9uZUluZm87CiAgICB9LAogICAgY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbyA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgaWYgKG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IucGx1Z2lucykgewogICAgICAgICAgICB2YXIgcGx1Z2luc0luZm8gPSB7fSwgaSwgcGx1Z2lucyA9IG5hdmlnYXRvci5wbHVnaW5zOwogICAgICAgICAgICBwbHVnaW5zSW5mby5pbnN0YWxsZWRQbHVnaW5zID0gIiI7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGx1Z2luc0luZm8uaW5zdGFsbGVkUGx1Z2lucyA9IHBsdWdpbnNJbmZvLmluc3RhbGxlZFBsdWdpbnMgKyBwbHVnaW5zW2ldLmZpbGVuYW1lICsgIjsiOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcGx1Z2luc0luZm87CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBicm93c2VyIHBsdWdpbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLnBsdWdpbnMgaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgICAgIHJldHVybiB7fTsKICAgICAgICB9CgogICAgfSwKLy8gR2V0dGluZyBnZW9sb2NhdGlvbiB0YWtlcyBzb21lIHRpbWUgYW5kIGlzIGRvbmUgYXN5bmNocm9ub3VzbHksIGhlbmNlIG5lZWQgYSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgb25jZSBnZW9sb2NhdGlvbiBpcyByZXRyaWV2ZWQuCiAgICBjb2xsZWN0R2VvbG9jYXRpb25JbmZvID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIGdlb2xvY2F0aW9uSW5mbyA9IHt9LAogICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgICAgICAgICAgZ2VvbG9jYXRpb25JbmZvLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGU7CiAgICAgICAgICAgICAgICBnZW9sb2NhdGlvbkluZm8ubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGU7CiAgICAgICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgICAgICB9LCBlcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3QgZ2VvbG9jYXRpb24gaW5mb3JtYXRpb24uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVycm9yLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgY2FsbGJhY2soZ2VvbG9jYXRpb25JbmZvKTsKICAgICAgICAgICAgfTsKICAgICAgICBpZiAobmF2aWdhdG9yICYmIG5hdmlnYXRvci5nZW9sb2NhdGlvbikgewogICAgICAgICAgICAvLyBOQjogSWYgdXNlciBjaG9vc2VzICdOb3Qgbm93JyBvbiBGaXJlZm94IG5laXRoZXIgY2FsbGJhY2sgZ2V0cyBjYWxsZWQKICAgICAgICAgICAgLy8gICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NTUzMwogICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBnZW9sb2NhdGlvbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgIH0KICAgIH0sCiAgICBjb2xsZWN0QnJvd3NlckZvbnRzSW5mbyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZm9udHNJbmZvID0ge30sIGksIGZvbnRzTGlzdCA9IFsiY3Vyc2l2ZSIsIm1vbm9zcGFjZSIsInNlcmlmIiwic2Fucy1zZXJpZiIsImZhbnRhc3kiLCJkZWZhdWx0IiwiQXJpYWwiLCJBcmlhbCBCbGFjayIsCiAgICAgICAgICAgICJBcmlhbCBOYXJyb3ciLCJBcmlhbCBSb3VuZGVkIE1UIEJvbGQiLCJCb29rbWFuIE9sZCBTdHlsZSIsIkJyYWRsZXkgSGFuZCBJVEMiLCJDZW50dXJ5IiwiQ2VudHVyeSBHb3RoaWMiLAogICAgICAgICAgICAiQ29taWMgU2FucyBNUyIsIkNvdXJpZXIiLCJDb3VyaWVyIE5ldyIsIkdlb3JnaWEiLCJHZW50aXVtIiwiSW1wYWN0IiwiS2luZyIsIkx1Y2lkYSBDb25zb2xlIiwiTGFsaXQiLAogICAgICAgICAgICAiTW9kZW5hIiwiTW9ub3R5cGUgQ29yc2l2YSIsIlBhcHlydXMiLCJUYWhvbWEiLCJUZVgiLCJUaW1lcyIsIlRpbWVzIE5ldyBSb21hbiIsIlRyZWJ1Y2hldCBNUyIsIlZlcmRhbmEiLAogICAgICAgICAgICAiVmVyb25hIl07CiAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gIiI7CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBmb250c0xpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGZvbnREZXRlY3Rvci5kZXRlY3QoZm9udHNMaXN0W2ldKSkgewogICAgICAgICAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzICsgZm9udHNMaXN0W2ldICsgIjsiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb250c0luZm87CiAgICB9LAogICAgZGV2aWNlUHJpbnQgPSB7fTsKCmRldmljZVByaW50LnNjcmVlbiA9IGNvbGxlY3RTY3JlZW5JbmZvKCk7CmRldmljZVByaW50LnRpbWV6b25lID0gY29sbGVjdFRpbWV6b25lSW5mbygpOwpkZXZpY2VQcmludC5wbHVnaW5zID0gY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbygpOwpkZXZpY2VQcmludC5mb250cyA9IGNvbGxlY3RCcm93c2VyRm9udHNJbmZvKCk7CgppZiAobmF2aWdhdG9yLnVzZXJBZ2VudCkgewogICAgZGV2aWNlUHJpbnQudXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKfQppZiAobmF2aWdhdG9yLmFwcE5hbWUpIHsKICAgIGRldmljZVByaW50LmFwcE5hbWUgPSBuYXZpZ2F0b3IuYXBwTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcENvZGVOYW1lKSB7CiAgICBkZXZpY2VQcmludC5hcHBDb2RlTmFtZSA9IG5hdmlnYXRvci5hcHBDb2RlTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcFZlcnNpb24pIHsKICAgIGRldmljZVByaW50LmFwcFZlcnNpb24gPSBuYXZpZ2F0b3IuYXBwVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbikgewogICAgZGV2aWNlUHJpbnQuYXBwTWlub3JWZXJzaW9uID0gbmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmJ1aWxkSUQpIHsKICAgIGRldmljZVByaW50LmJ1aWxkSUQgPSBuYXZpZ2F0b3IuYnVpbGRJRDsKfQppZiAobmF2aWdhdG9yLnBsYXRmb3JtKSB7CiAgICBkZXZpY2VQcmludC5wbGF0Zm9ybSA9IG5hdmlnYXRvci5wbGF0Zm9ybTsKfQppZiAobmF2aWdhdG9yLmNwdUNsYXNzKSB7CiAgICBkZXZpY2VQcmludC5jcHVDbGFzcyA9IG5hdmlnYXRvci5jcHVDbGFzczsKfQppZiAobmF2aWdhdG9yLm9zY3B1KSB7CiAgICBkZXZpY2VQcmludC5vc2NwdSA9IG5hdmlnYXRvci5vc2NwdTsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3QpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3QgPSBuYXZpZ2F0b3IucHJvZHVjdDsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3RTdWIpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3RTdWIgPSBuYXZpZ2F0b3IucHJvZHVjdFN1YjsKfQppZiAobmF2aWdhdG9yLnZlbmRvcikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yID0gbmF2aWdhdG9yLnZlbmRvcjsKfQppZiAobmF2aWdhdG9yLnZlbmRvclN1YikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yU3ViID0gbmF2aWdhdG9yLnZlbmRvclN1YjsKfQppZiAobmF2aWdhdG9yLmxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5sYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnVzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQudXNlckxhbmd1YWdlID0gbmF2aWdhdG9yLnVzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQuYnJvd3Nlckxhbmd1YWdlID0gbmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnN5c3RlbUxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5zeXN0ZW1MYW5ndWFnZSA9IG5hdmlnYXRvci5zeXN0ZW1MYW5ndWFnZTsKfQoKLy8gQXR0ZW1wdCB0byBjb2xsZWN0IGdlby1sb2NhdGlvbiBpbmZvcm1hdGlvbiBhbmQgcmV0dXJuIHRoaXMgd2l0aCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgovLyBPdGhlcndpc2UsIGlmIGdlby1sb2NhdGlvbiBmYWlscyBvciB0YWtlcyBsb25nZXIgdGhhbiAzMCBzZWNvbmRzLCBhdXRvLXN1Ym1pdCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgphdXRvU3VibWl0RGVsYXkgPSAzMDAwMDsKb3V0cHV0LnZhbHVlID0gSlNPTi5zdHJpbmdpZnkoZGV2aWNlUHJpbnQpOwpjb2xsZWN0R2VvbG9jYXRpb25JbmZvKGZ1bmN0aW9uKGdlb2xvY2F0aW9uSW5mbykgewogICAgZGV2aWNlUHJpbnQuZ2VvbG9jYXRpb24gPSBnZW9sb2NhdGlvbkluZm87CiAgICBvdXRwdXQudmFsdWUgPSBKU09OLnN0cmluZ2lmeShkZXZpY2VQcmludCk7CiAgICBzdWJtaXQoKTsKfSk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"312e951f-70c5-49d2-a9ae-93aef909d5df\",\"name\":\"Salesforce Profile Normalization\",\"description\":\"Normalizes raw profile data from Salesforce\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZ2l2ZW5fbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmZhbWlseV9uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnBpY3R1cmUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJsb2NhbGUiLCByYXdQcm9maWxlLnpvbmVJbmZvKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"name\":\"shared\",\"description\":\"set the same shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdzaGFyZWRWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzaGFyZWQgYWNyb3NzIGFsbCBuZXN0ZWQgam91cm5leXMuIEl0IGNvbnRhaW5zIGFuIGluZGljYXRvciBpbiB3aGljaCBsZXZlbCBpdCB3YXMgbGFzdCBzZXQuJyk7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6325cf19-a49b-471e-8d26-7e4df76df0e2\",\"name\":\"Okta Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJPa3RhIHJhd1Byb2ZpbGU6ICIrcmF3UHJvZmlsZSkKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5wcmVmZXJyZWRfdXNlcm5hbWUpKSk=\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"58c824ae-84ed-4724-82cd-db128fc3f6c\",\"name\":\"Normalized Profile to Managed User\",\"description\":\"Converts a normalized social profile into a managed user\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgbWFuYWdlZFVzZXIgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlck5hbWUiLCBub3JtYWxpemVkUHJvZmlsZS51c2VybmFtZSkpKQoKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgicG9zdGFsQWRkcmVzcyIsIG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MpCmlmIChub3JtYWxpemVkUHJvZmlsZS5hZGRyZXNzTG9jYWxpdHkuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgiY2l0eSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NMb2NhbGl0eSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24uaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgic3RhdGVQcm92aW5jZSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24pCmlmIChub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInBvc3RhbENvZGUiLCBub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlKQppZiAobm9ybWFsaXplZFByb2ZpbGUuY291bnRyeS5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KCJjb3VudHJ5Iiwgbm9ybWFsaXplZFByb2ZpbGUuY291bnRyeSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBob25lLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInRlbGVwaG9uZU51bWJlciIsIG5vcm1hbGl6ZWRQcm9maWxlLnBob25lKQoKLy8gaWYgdGhlIGdpdmVuTmFtZSBhbmQgZmFtaWx5TmFtZSBpcyBudWxsIG9yIGVtcHR5Ci8vIHRoZW4gYWRkIGEgYm9vbGVhbiBmbGFnIHRvIHRoZSBzaGFyZWQgc3RhdGUgdG8gaW5kaWNhdGUgbmFtZXMgYXJlIG5vdCBwcmVzZW50Ci8vIHRoaXMgY291bGQgYmUgdXNlZCBlbHNld2hlcmUKLy8gZm9yIGVnLiB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gYSBzY3JpcHRlZCBkZWNpc2lvbiBub2RlIHRvIGJ5LXBhc3MgcGF0Y2hpbmcKLy8gdGhlIHVzZXIgb2JqZWN0IHdpdGggYmxhbmsgdmFsdWVzIHdoZW4gZ2l2ZW5OYW1lICBhbmQgZmFtaWx5TmFtZSBpcyBub3QgcHJlc2VudApib29sZWFuIG5vR2l2ZW5OYW1lID0gbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmFzU3RyaW5nKCk/LnRyaW0oKSkKYm9vbGVhbiBub0ZhbWlseU5hbWUgPSBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZmFtaWx5TmFtZS5hc1N0cmluZygpPy50cmltKCkpCnNoYXJlZFN0YXRlLnB1dCgibmFtZUVtcHR5T3JOdWxsIiwgbm9HaXZlbk5hbWUgJiYgbm9GYW1pbHlOYW1lKQoKcmV0dXJuIG1hbmFnZWRVc2VyCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"name\":\"mode\",\"description\":\"Check if mode has already been set.\",\"script\":\"LyogbW9kZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDb2xsZWN0IG1vZGUgaWYgbm90IGFscmVhZHkgc2V0IGFuZCBzZXQgb3V0Y29tZSB0byBtb2RlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSAnc2hhcmVkIGFuZCBsZXZlbCcKICogLSAnc2hhcmVkIG9ubHknCiAqIC0gJ2xldmVsIG9ubHknCiAqIC0gJ25vbmUnCiAqLwooZnVuY3Rpb24gKCkgewogIHZhciBtb2RlID0gbm9kZVN0YXRlLmdldCgnbW9kZScpOwogIGlmIChtb2RlKSB7CiAgICBvdXRjb21lID0gbW9kZS5hc1N0cmluZygpOwogICAgdmFyIGxldmVsID0gbm9kZVN0YXRlLmdldCgnbGV2ZWwnKS5hc0ludGVnZXIoKSArIDE7CiAgICBsb2dnZXIuZXJyb3IoJ21vZGU6IG1vZGU9JyArIG1vZGUuYXNTdHJpbmcoKSArICcsIGxldmVsPScgKyBsZXZlbCk7CiAgICBzaGFyZWRTdGF0ZS5wdXQoJ2xldmVsJywgbGV2ZWwpOwogIH0KICBlbHNlIHsKICAgIHZhciBjaG9pY2VzID0gWydzaGFyZWQgYW5kIGxldmVsJywgJ3NoYXJlZCBvbmx5JywgJ2xldmVsIG9ubHknLCAnbm9uZSddOwogIAogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DaG9pY2VDYWxsYmFjawogICAgKQoKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKFsKICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soJ0Nob29zZSB0ZXN0IG1vZGUnLCBjaG9pY2VzLCAwLCBmYWxzZSkKICAgICAgXSkuYnVpbGQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBjaG9pY2UgPSBwYXJzZUludChjYWxsYmFja3MuZ2V0KDApLmdldFNlbGVjdGVkSW5kZXhlcygpWzBdKTsKICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgnbW9kZScsIGNob2ljZXNbY2hvaWNlXSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2xldmVsJywgMCk7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKGNob2ljZXNbY2hvaWNlXSkuYnVpbGQoKTsKICAgIH0KICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"36863ffb-40ec-48b9-94b1-9a99f71cc3b5\",\"name\":\"OIDC Claims Script\",\"description\":\"Default global script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3d97c436-42c0-4dd0-a571-ea6f34f752b3\",\"name\":\"Itsme Profile Normalization\",\"description\":\"Normalizes raw profile data from Itsme\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKaW1wb3J0IG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUKCkpzb25WYWx1ZSBtYW5hZ2VkVXNlciA9IGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuc3ViKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmdpdmVuX25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5mYW1pbHlfbmFtZSksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQpyZXR1cm4gbWFuYWdlZFVzZXI=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c234ba0b-58a1-4cfd-9567-09edde980745\",\"name\":\"ForgeRock Internal: OAuth2 Access Token Modification Script\",\"description\":\"Internal token modification script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwovLyBTY3JpcHQgaXMgaW50ZW50aW9uYWxseSBlbXB0eQo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":1433147666269,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"25e6c06d-cf70-473b-bd28-26931edc476b\",\"name\":\"OAuth2 Validate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Validation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgdmFsaWRhdGVzIHRoZSByZXF1ZXN0ZWQgc2NvcGVzIGFnYWluc3QgdGhlIGFsbG93ZWQgc2NvcGVzLgogKiBJZiBubyBzY29wZXMgYXJlIHJlcXVlc3RlZCwgZGVmYXVsdCBzY29wZXMgYXJlIGFzc3VtZWQuCiAqIFRoZSBzY3JpcHQgaGFzIGZvdXIgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgZGlmZmVyZW50IE9BdXRoMiBmbG93czoKICogICAgICAtIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlCiAqICAgICAgLSB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUKICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHJlcXVlc3RlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgVGhlIHNldCBvZiByZXF1ZXN0ZWQgc2NvcGVzLgogKiBkZWZhdWx0U2NvcGVzIC0gU2V0PFN0cmluZz4gKDEpLgogKiAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBkZWZhdWx0IHNjb3Blcy4KICogYWxsb3dlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgYWxsb3dlZCBzY29wZXMuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIGRlYnVnIGxvZ2dlciBpbnN0YW5jZToKICogICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgICAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9BVVRIMl9WQUxJREFURV9TQ09QRQogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKgogKiBUaHJvd3MgSW52YWxpZFNjb3BlRXhjZXB0aW9uOgogKiAgICAgIC0gaWYgdGhlcmUgYXJlIG5vIHNjb3BlcyByZXF1ZXN0ZWQgYW5kIGRlZmF1bHQgc2NvcGVzIGFyZSBlbXB0eQogKiAgICAgIC0gaWYgYSByZXF1ZXN0ZWQgc2NvcGUgaXMgbm90IGFsbG93ZWQKICoKICogUmV0dXJuIC0gYSBTZXQ8U3RyaW5nPiBvZiB2YWxpZGF0ZWQgc2NvcGVzICgxKS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICgyKSBDbGllbnQgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svaHR0cC9DbGllbnQuaHRtbC4KICovCgovKioKICogRGVmYXVsdCB2YWxpZGF0ZSBzY29wZSBzY3JpcHQuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZVNjb3BlcyAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkU2NvcGVFeGNlcHRpb24KICAgICk7CgogICAgdmFyIHNjb3BlczsKICAgIGlmIChyZXF1ZXN0ZWRTY29wZXMgPT0gbnVsbCB8fCByZXF1ZXN0ZWRTY29wZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgc2NvcGVzID0gZGVmYXVsdFNjb3BlczsKICAgIH0gZWxzZSB7CiAgICAgICAgc2NvcGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KGFsbG93ZWRTY29wZXMpOwogICAgICAgIHNjb3Blcy5yZXRhaW5BbGwocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICBpZiAocmVxdWVzdGVkU2NvcGVzLnNpemUoKSA+IHNjb3Blcy5zaXplKCkpIHsKICAgICAgICAgICAgdmFyIGludmFsaWRTY29wZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICAgICAgaW52YWxpZFNjb3Blcy5yZW1vdmVBbGwoYWxsb3dlZFNjb3Blcyk7CiAgICAgICAgICAgIHRocm93IG5ldyBmckphdmEuSW52YWxpZFNjb3BlRXhjZXB0aW9uKCdVbmtub3duL2ludmFsaWQgc2NvcGUocyknKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKHNjb3BlcyA9PSBudWxsIHx8IHNjb3Blcy5pc0VtcHR5KCkpIHsKICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRTY29wZUV4Y2VwdGlvbignTm8gc2NvcGUgcmVxdWVzdGVkIGFuZCBubyBkZWZhdWx0IHNjb3BlIGNvbmZpZ3VyZWQnKTsKICAgIH0KICAgIHJldHVybiBzY29wZXM7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlICgpIHsKICAgIHJldHVybiB2YWxpZGF0ZVNjb3BlcygpOwp9CgpmdW5jdGlvbiB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_VALIDATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"8e298710-b55e-4085-a464-88a375a4004b\",\"name\":\"Twitter Profile Normalization\",\"description\":\"Normalizes raw profile data from Twitter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkX3N0ciksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnByb2ZpbGVfaW1hZ2VfdXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnNjcmVlbl9uYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"85523e71-2d77-4577-b078-6f9674cc54e2\",\"name\":\"Saml2 IDP Adapter Always Auth\",\"description\":\"Always redirect browser pre-auth\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4yL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL1NBTUwySWRlbnRpdHlQcm92aWRlckFkYXB0ZXIuaHRtbAogKiBOb3RlIHRoYXQgdGhlIGluaXRpYWxpemUgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIHNjcmlwdHMuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzLiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMgZm9yIHRoZSB2YXJpYWJsZXMgYXZhaWxhYmxlIHRvIGl0LgogKgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZwogKiAgICAgRW50aXR5IElEIGZvciB0aGUgaG9zdGVkIElEUAogKiByZWFsbSAtIFN0cmluZwogKiAgICAgUmVhbG0gb2YgdGhlIGhvc3RlZCBJRFAKICogaWRwQWRhcHRlclNjcmlwdEhlbHBlciAtIElkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEpCiAqICAgICBBbiBpbnN0YW5jZSBvZiBJZHBBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIHJlcXVlc3QgLSBIdHRwU2VydmxldFJlcXVlc3QgKDIpCiAqICAgICBTZXJ2bGV0IHJlcXVlc3Qgb2JqZWN0CiAqIHJlc3BvbnNlIC0gSHR0cFNlcnZsZXRSZXNwb25zZSAoMykKICogICAgIFNlcnZsZXQgcmVzcG9uc2Ugb2JqZWN0CiAqIGF1dGhuUmVxdWVzdCAtIEF1dGhuUmVxdWVzdCAoNCkKICogICAgIFRoZSBvcmlnaW5hbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHNlbnQgZnJvbSBTUAogKiByZXFJZCAtIFN0cmluZwogKiAgICAgVGhlIGlkIHRvIHVzZSBmb3IgY29udGludWF0aW9uIG9mIHByb2Nlc3NpbmcgaWYgdGhlIGFkYXB0ZXIgcmVkaXJlY3RzCiAqIHJlcyAtIFJlc3BvbnNlICg1KQogKiAgICAgVGhlIFNBTUwgUmVzcG9uc2UKICogc2Vzc2lvbiAtIFNTT1Rva2VuICg2KQogKiAgICAgVGhlIHNpbmdsZSBzaWduLW9uIHNlc3Npb24uIFRoZSByZWZlcmVuY2UgdHlwZSBvZiB0aGlzIGlzIE9iamVjdCBhbmQgd291bGQgbmVlZCB0byBiZSBjYXN0ZWQgdG8gU1NPVG9rZW4uCiAqIHJlbGF5U3RhdGUgLSBTdHJpbmcKICogICAgIFRoZSByZWxheVN0YXRlIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSByZWRpcmVjdAogKiBmYXVsdENvZGUgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBjb2RlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgU0FNTCByZXNwb25zZQogKiBmYXVsdERldGFpbCAtIFN0cmluZwogKiAgICAgdGhlIGZhdWx0IGRldGFpbCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogbG9nZ2VyIC0gTG9nZ2VyIGluc3RhbmNlCiAqICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLjxzY3JpcHQgbmFtZT4KICoKICogVGhyb3dzIFNBTUwyRXhjZXB0aW9uICg3KToKICogICAgIGZvciBhbnkgZXhjZXB0aW9ucyBvY2N1cnJpbmcgaW4gdGhlIGFkYXB0ZXIuIFRoZSBmZWRlcmF0aW9uIHByb2Nlc3Mgd2lsbCBjb250aW51ZQogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBpZHBBZGFwdGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL1Jlc3BvbnNlLmh0bWwuCiAqICg2KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvY29tbW9uL1NBTUwyRXhjZXB0aW9uLmh0bWwuCiAqLwoKLyoKICogVGVtcGxhdGUvZGVmYXVsdCBzY3JpcHQgZm9yIFNBTUwyIElEUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTaW5nbGVTaWduT24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNpbmdsZVNpZ25PbiIpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZUF1dGhlbnRpY2F0aW9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlQXV0aGVudGljYXRpb24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZUF1dGhlbnRpY2F0aW9uIik7CiAgICByZXR1cm4gdHJ1ZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZFJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBoYXBwZW5lZCBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTZW5kUmVzcG9uc2UgKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNlbmRSZXNwb25zZSIpOwogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IGF1dGhuUmVxdWVzdDogIithdXRoblJlcXVlc3QpOwogICAgICByZXNwb25zZS5zZW5kUmVkaXJlY3QoImh0dHBzOi8vaWRjLnNjaGV1YmVyLmlvL2FtL1hVSS8/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPURpc3BhdGNoZXImRm9yY2VBdXRoPXRydWUmZ290bz0iK3JlbGF5U3RhdGUpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpZ25SZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICByZXMKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2lnblJlc3BvbnNlICgpIHsKICAgICAgbG9nZ2VyLmVycm9yKCJDaGljYWdvOiBwcmVTaWduUmVzcG9uc2UiKTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZEZhaWx1cmVSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGZhdWx0Q29kZQogKiAgICAgZmF1bHREZXRhaWwKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2VuZEZhaWx1cmVSZXNwb25zZSAoKSB7CiAgICAgIGxvZ2dlci5lcnJvcigiQ2hpY2FnbzogcHJlU2VuZEZhaWx1cmVSZXNwb25zZSIpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"name\":\"level\",\"description\":\"set per level shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdsZXZlbCcgKyBsZXZlbCArICdWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzZXQgYXQgZWFjaCBsZXZlbCBvZiB0aGUgbmVzdGVkIGpvdXJuZXlzLiBJdCBjb250YWlucyBhbiBpbmRpY2F0b3IgaW4gd2hpY2ggbGV2ZWwgaXQgd2FzIHNldC4nKTsKfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3f93ef6e-e54a-4393-aba1-f322656db28a\",\"name\":\"OAuth2 Authorize Endpoint Data Provider Script\",\"description\":\"Default global script for OAuth2 Authorize Endpoint Data Provider\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcmV0dXJuIGFkZGl0aW9uYWwgZGF0YSB3aGVuIGF1dGhvcml6ZSByZXF1ZXN0IGlzIGNhbGxlZC4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LgogKgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cwogKgogKiBsb2dnZXIgLSBEZWJ1ZyAoMykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSAiU2NyaXB0ZWRBdXRob3JpemVFbmRwb2ludERhdGFQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FVVEhPUklaRV9FTkRQT0lOVF9EQVRBX1BST1ZJREVSLgogKgogKiBzY3JpcHROYW1lIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHNjcmlwdAogKgogKiBSZXR1cm4gLSBhIE1hcDxTdHJpbmcsIFN0cmluZz4gb2YgYWRkaXRpb25hbCBkYXRhICg0KS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgzKSBEZWJ1ZyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBhdXRob3JpemUgZW5kcG9pbnQgZGF0YSBwcm92aWRlciBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCi8qIEVYQU1QTEUKdmFyIG1hcCA9IG5ldyBqYXZhLnV0aWwuSGFzaE1hcCgpOwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGEoKSB7CgogICAgLy9JZiBjb25zdGFudCBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkCiAgICBtYXAucHV0KCJoZWxsbyIsICJ3b3JsZCIpOwoKICAgIC8vSWYgc29tZSBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkIGZyb20gdGhpcmQgcGFydHkgc2VydmljZQogICAgYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCk7CgogICAgLy9JZiB0aGVyZSBpcyBhIG5lZWQgdG8gcmV0dXJuIHNvbWUgdXNlciBzZXNzaW9uIGRhdGEKICAgIGFkZEFkZGl0aW9uYWxEYXRhRnJvbVNlc3Npb25Qcm9wZXJ0aWVzKCkKCiAgICByZXR1cm4gbWFwOwp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCkgewogIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLlNlcnZlckV4Y2VwdGlvbgogICAgKTsKICB0cnkgewogICAgICAgIC8vT2J0YWluIGFkZGl0aW9uYWwgZGF0YSBieSBwZXJmb3JtaW5nIGEgUkVTVCBjYWxsIHRvIGFuIGV4dGVybmFsIHNlcnZpY2UKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgICAgIHJlcXVlc3Quc2V0VXJpKCJodHRwczovL3RoaXJkLnBhcnR5LmFwcC9oZWxsby5qc3AiKTsKICAgICAgICByZXF1ZXN0LnNldE1ldGhvZCgiUE9TVCIpOwogICAgICAgIC8vcmVxdWVzdC5zZXRFbnRpdHkoImZvbz1iYXImaGVsbG89d29ybGQiKTsKICAgICAgICByZXF1ZXN0LnNldEVudGl0eShqc29uKG9iamVjdCgKICAgICAgICAgICAgICAgICAgICBmaWVsZCgiZm9vIiwgImJhciIpKSkpOwogICAgICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXRPclRocm93KCk7CiAgICAgICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwogICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICBtYXAucHV0KCJzb21lS2V5IixyZXN1bHQuZ2V0KCJzb21lS2V5IikpOwogIH0gY2F0Y2ggKGVycikgewogICAgIHRocm93IG5ldyBmckphdmEuU2VydmVyRXhjZXB0aW9uKGVycik7CiAgfQp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tU2Vzc2lvblByb3BlcnRpZXMoKSB7CiAgLy9BZGQgYWRkaXRpb25hbCBkYXRhIGZyb20gc2Vzc2lvbiBwcm9wZXJ0eSB2YWx1ZXMKICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeyAvLyBzZXNzaW9uIGlzIG5vdCBhdmFpbGFibGUgZm9yIHJlc291cmNlIG93bmVyIHBhc3N3b3JkIGNyZWRlbnRpYWxzIGdyYW50CiAgICAgbWFwLnB1dCgiaXBBZGRyZXNzIiwgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgiSG9zdCIpKQogICB9Cn07CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKSk7Cn07CgphZGRBZGRpdGlvbmFsRGF0YSgpOwoqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"472534ec-a25f-468d-a606-3fb1935190df\",\"name\":\"WeChat Profile Normalization\",\"description\":\"Normalizes raw profile data from WeChat\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLm9wZW5pZCksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uaWNrbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5oZWFkaW1ndXJsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLm5pY2tuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"name\":\"Check Username\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"da56fe60-8b38-4c46-a405-d6b306d4b336\",\"name\":\"OAuth2 Evaluate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Evaluation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcG9wdWxhdGUgdGhlIHNjb3BlcyB3aXRoIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlcyB3aGVuIHRoZSB0b2tlbmluZm8gZW5kcG9pbnQgaXMgY2FsbGVkLgogKiBGb3IgZXhhbXBsZSwgaWYgb25lIG9mIHRoZSBzY29wZXMgaXMgbWFpbCwgQU0gc2V0cyBtYWlsIHRvIHRoZSByZXNvdXJjZSBvd25lcidzIGVtYWlsIGFkZHJlc3MgaW4gdGhlIHRva2VuIGluZm9ybWF0aW9uIHJldHVybmVkLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDIpLgogKiAgICAgICAgICAgIFRoZSBjbGllbnQncyBpZGVudGl0eSBpZiBwcmVzZW50IG9yIHRoZSByZXNvdXJjZSBvd25lcidzIGlkZW50aXR5LiBDYW4gYmUgbnVsbC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0VWQUxVQVRFX1NDT1BFCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoMykuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIGEgTWFwPFN0cmluZywgT2JqZWN0PiBvZiB0aGUgYWNjZXNzIHRva2VuJ3MgaW5mb3JtYXRpb24gKDQpLgogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBBY2Nlc3NUb2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vYXV0aDIvY29yZS9BY2Nlc3NUb2tlbi5odG1sLgogKiAoMikgQU1JZGVudGl0eSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9pZG0vQU1JZGVudGl0eS5odG1sLgogKiAoMykgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBldmFsdWF0ZSBzY29wZSBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgbWFwID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7CiAgICBpZiAoaWRlbnRpdHkgIT09IG51bGwpIHsKICAgICAgICB2YXIgc2NvcGVzID0gYWNjZXNzVG9rZW4uZ2V0U2NvcGUoKS50b0FycmF5KCk7CiAgICAgICAgc2NvcGVzLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKHNjb3BlKS50b0FycmF5KCk7CiAgICAgICAgICAgIG1hcC5wdXQoc2NvcGUsIGF0dHJpYnV0ZXMuam9pbigiLCIpKTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKCdpZGVudGl0eSBpcyBudWxsJyk7CiAgICB9CiAgICByZXR1cm4gbWFwOwp9KCkpOw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_EVALUATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"8862ca8f-7770-4af5-a888-ac0df0947f36\",\"name\":\"LinkedIn Profile Normalization\",\"description\":\"Normalizes raw profile data from LinkedIn\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5maXJzdE5hbWUubG9jYWxpemVkLmdldCgwKSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3ROYW1lLmxvY2FsaXplZC5nZXQoMCkpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucHJvZmlsZVBpY3R1cmUuZGlzcGxheUltYWdlKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVsZW1lbnRzLmdldCgwKS5nZXQoImhhbmRsZX4iKS5lbWFpbEFkZHJlc3MpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZWxlbWVudHMuZ2V0KDApLmdldCgiaGFuZGxlfiIpLmVtYWlsQWRkcmVzcykpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1244e639-4a31-401d-ab61-d75133d8dc9e\",\"name\":\"Instagram Profile Normalization\",\"description\":\"Normalizes raw profile data from Instagram\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1f389a3d-21cf-417c-a6d3-42ea620071f0\",\"name\":\"ForgeRock Internal: OIDC Claims Script\",\"description\":\"Internal OIDC Claims script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"9de3eb62-f131-4fac-a294-7bd170fd4acb\",\"name\":\"Scripted Policy Condition\",\"description\":\"Default global script for Scripted Policy Conditions\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qKgogKiBUaGlzIGlzIGEgUG9saWN5IENvbmRpdGlvbiBleGFtcGxlIHNjcmlwdC4gSXQgZGVtb25zdHJhdGVzIGhvdyB0byBhY2Nlc3MgYSB1c2VyJ3MgaW5mb3JtYXRpb24sCiAqIHVzZSB0aGF0IGluZm9ybWF0aW9uIGluIGV4dGVybmFsIEhUVFAgY2FsbHMgYW5kIG1ha2UgYSBwb2xpY3kgZGVjaXNpb24gYmFzZWQgb24gdGhlIG91dGNvbWUuCiAqLwoKdmFyIHVzZXJBZGRyZXNzLCB1c2VySVAsIHJlc291cmNlSG9zdDsKCmlmICh2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkpIHsKCiAgICB2YXIgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9IGdldENvdW50cnlGcm9tVXNlckFkZHJlc3MoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJDb3VudHJ5IHJldHJpZXZlZCBmcm9tIHVzZXIncyBhZGRyZXNzOiAiICsgY291bnRyeUZyb21Vc2VyQWRkcmVzcyk7CiAgICB2YXIgY291bnRyeUZyb21Vc2VySVAgPSBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpOwogICAgbG9nZ2VyLm1lc3NhZ2UoIkNvdW50cnkgcmV0cmlldmVkIGZyb20gdXNlcidzIElQOiAiICsgY291bnRyeUZyb21Vc2VySVApOwogICAgdmFyIGNvdW50cnlGcm9tUmVzb3VyY2VVUkkgPSBnZXRDb3VudHJ5RnJvbVJlc291cmNlVVJJKCk7CiAgICBsb2dnZXIubWVzc2FnZSgiQ291bnRyeSByZXRyaWV2ZWQgZnJvbSByZXNvdXJjZSBVUkk6ICIgKyBjb3VudHJ5RnJvbVJlc291cmNlVVJJKTsKCiAgICBpZiAoY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21Vc2VySVAgJiYgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21SZXNvdXJjZVVSSSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIFN1Y2NlZWRlZCIpOwogICAgICAgIHJlc3BvbnNlQXR0cmlidXRlcy5wdXQoImNvdW50cnlPZk9yaWdpbiIsIFtjb3VudHJ5RnJvbVVzZXJBZGRyZXNzXSk7CiAgICAgICAgYXV0aG9yaXplZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIEZhaWxlZCIpOwogICAgICAgIGF1dGhvcml6ZWQgPSBmYWxzZTsKICAgIH0KCn0gZWxzZSB7CiAgICBsb2dnZXIubWVzc2FnZSgiUmVxdWlyZWQgcGFyYW1ldGVycyBub3QgZm91bmQuIEF1dGhvcml6YXRpb24gRmFpbGVkLiIpOwogICAgYXV0aG9yaXplZCA9IGZhbHNlOwp9CgovKioKICogVXNlIHRoZSB1c2VyJ3MgYWRkcmVzcyB0byBsb29rdXAgdGhlaXIgY291bnRyeSBvZiByZXNpZGVuY2UuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgdXNlcidzIGNvdW50cnkgb2YgcmVzaWRlbmNlLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21Vc2VyQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlckFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgZ2VvY29kZSA9IEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvY29kZS5yZXN1bHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGdlb2NvZGUucmVzdWx0c1tpXTsKICAgICAgICB2YXIgajsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgcmVzdWx0LmFkZHJlc3NfY29tcG9uZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAocmVzdWx0LmFkZHJlc3NfY29tcG9uZW50c1tpXS50eXBlc1swXSA9PSAiY291bnRyeSIpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYWRkcmVzc19jb21wb25lbnRzW2ldLmxvbmdfbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKLyoqCiAqIFVzZSB0aGUgdXNlcidzIElQIHRvIGxvb2t1cCB0aGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqLwpmdW5jdGlvbiBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgdXNlcklQKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdC5jb3VudHJ5OwogICAgfQp9CgovKioKICogVXNlIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UncyBob3N0IG5hbWUgdG8gbG9va3VwIHRoZSBjb3VudHJ5IHdoZXJlIHRoZSByZXNvdXJjZSBpcyBob3N0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBpbiB3aGljaCB0aGUgcmVzb3VyY2UgaXMgaG9zdGVkLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21SZXNvdXJjZVVSSSgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgZW5jb2RlVVJJQ29tcG9uZW50KHJlc291cmNlSG9zdCkpOwogICAgICByZXF1ZXN0LnNldE1ldGhvZCgiR0VUIik7CgogICAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3QpLmdldCgpOwogICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwoKICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIGlmIChyZXN1bHQpIHsKICAgICAgICByZXR1cm4gcmVzdWx0LmNvdW50cnk7CiAgICB9Cn0KCi8qKgogKiBSZXRyaWV2ZSBhbmQgdmFsaWRhdGUgdGhlIHZhcmlhYmxlcyByZXF1aXJlZCB0byBtYWtlIHRoZSBleHRlcm5hbCBIVFRQIGNhbGxzLgogKgogKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2lsbCBiZSB0cnVlIGlmIHZhbGlkYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkgewogICAgdmFyIHVzZXJBZGRyZXNzU2V0ID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKCJwb3N0YWxBZGRyZXNzIik7CiAgICBpZiAodXNlckFkZHJlc3NTZXQgPT0gbnVsbCB8fCB1c2VyQWRkcmVzc1NldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gYWRkcmVzcyBzcGVjaWZpZWQgZm9yIHVzZXI6ICIgKyB1c2VybmFtZSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdXNlckFkZHJlc3MgPSB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIGFkZHJlc3M6ICIgKyB1c2VyQWRkcmVzcyk7CgogICAgaWYgKCFlbnZpcm9ubWVudCkgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJObyBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiB0aGUgZXZhbHVhdGlvbiByZXF1ZXN0LiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB2YXIgaXBTZXQgPSBlbnZpcm9ubWVudC5nZXQoIklQIik7CiAgICBpZiAoaXBTZXQgPT0gbnVsbCB8fCBpcFNldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gSVAgc3BlY2lmaWVkIGluIHRoZSBldmFsdWF0aW9uIHJlcXVlc3QgZW52aXJvbm1lbnQgcGFyYW1ldGVycy4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB1c2VySVAgPSBpcFNldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIElQOiAiICsgdXNlcklQKTsKCiAgICBpZiAoIXJlc291cmNlVVJJKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIHJlc291cmNlIFVSSSBzcGVjaWZpZWQuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmVzb3VyY2VIb3N0ID0gcmVzb3VyY2VVUkkubWF0Y2goL14oLio6XC9cLykod3d3XC4pPyhbQS1aYS16MC05XC1cLl0rKSg6WzAtOV0rKT8oLiopJC8pWzNdOwogICAgbG9nZ2VyLm1lc3NhZ2UoIlJlc291cmNlIGhvc3Q6ICIgKyByZXNvdXJjZUhvc3QpOwoKICAgIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"POLICY_CONDITION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"name\":\"debug\",\"description\":\"Display sharedState, transientState, and headers.\",\"script\":\"LyogZGVidWcKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogRGlzcGxheSBzaGFyZWRTdGF0ZSwgdHJhbnNpZW50U3RhdGUsIGFuZCBoZWFkZXJzLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwp2YXIgYW5jaG9yID0gImFuY2hvci0iLmNvbmNhdChnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4JykpOwp2YXIgaGFsaWduID0gImxlZnQiOwp2YXIgbWVzc2FnZSA9ICI8cD48Yj5TaGFyZWQgU3RhdGU8L2I+Ojxici8+Ii5jb25jYXQoCiAgICAgIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpLmNvbmNhdCgKICAgICI8cD48Yj5UcmFuc2llbnQgU3RhdGU8L2I+Ojxici8+IikuY29uY2F0KAogICAgICB0cmFuc2llbnRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+UmVxdWVzdCBIZWFkZXJzPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgICAgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikKdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwidGV4dC1sZWZ0XCI7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIikuY29uY2F0KG1lc3NhZ2UpLmNvbmNhdCgiJztcbiIpLmNvbmNhdCgKICAiICB9XG4iKS5jb25jYXQoCiAgIn0pIikKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawopCmlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgIGFuY2hvcgogICAgICAgICksCiAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICApLmJ1aWxkKCkKfQplbHNlIHsKICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0KCiAvKgogICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAqIAogICogRXhhbXBsZToKICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICogJ3h4eC14eHgnIHByb2R1Y2VzICc0MzItNTIxJwogICovCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxMHwwOwogICAgICAgIHZhciB2ID0gcjsKICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"23143919-6b78-40c3-b25e-beca19b229e0\",\"name\":\"GitHub Profile Normalization (VS)\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJHaXRIdWIgcmF3UHJvZmlsZTogIityYXdQcm9maWxlKQoKcmV0dXJuIGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZmlyc3RfbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3RfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5waWN0dXJlLmRhdGEudXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLmVtYWlsKSkp\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"58d29080-4563-480b-89bb-1e7719776a21\",\"name\":\"Google Profile Normalization\",\"description\":\"Normalizes raw profile data from Google\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c827d2b4-3608-4693-868e-bbcf86bd87c7\",\"name\":\"Scripted Module - Client Side\",\"description\":\"Default global script for client side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTYtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qIERlZmF1bHQgQXV0aGVudGljYXRpb24gY2xpZW50IHNpZGUgc2NyaXB0IHRvIHVzZSBhcyBhIHRlbXBsYXRlIGZvciBuZXcgc2NyaXB0cyAqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6b3cfd48-62d3-48ff-a96f-fe8f3a22ab30\",\"name\":\"Amazon Profile Normalization\",\"description\":\"Normalizes raw profile data from Amazon\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"7e3d7067-d50f-4674-8c76-a3e13a810c33\",\"name\":\"Scripted Module - Server Side\",\"description\":\"Default global script for server side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgp2YXIgU1RBUlRfVElNRSA9IDk7ICAvLyA5YW0KdmFyIEVORF9USU1FICAgPSAxNzsgLy8gNXBtCnZhciBsb25naXR1ZGUsIGxhdGl0dWRlOwp2YXIgbG9jYWxUaW1lOwoKbG9nZ2VyLm1lc3NhZ2UoIlN0YXJ0aW5nIHNjcmlwdGVkIGF1dGhlbnRpY2F0aW9uIik7CmxvZ2dlci5tZXNzYWdlKCJVc2VyOiAiICsgdXNlcm5hbWUpOwoKdmFyIHVzZXJQb3N0YWxBZGRyZXNzID0gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKTsKbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgYWRkcmVzczogIiArIHVzZXJQb3N0YWxBZGRyZXNzKTsKCmdldExvbmdpdHVkZUxhdGl0dWRlRnJvbVVzZXJQb3N0YWxBZGRyZXNzKCk7CmdldExvY2FsVGltZSgpOwoKbG9nZ2VyLm1lc3NhZ2UoIkN1cnJlbnQgdGltZSBhdCB0aGUgdXNlcnMgbG9jYXRpb246ICIgKyBsb2NhbFRpbWUuZ2V0SG91cnMoKSk7CmlmIChsb2NhbFRpbWUuZ2V0SG91cnMoKSA8IFNUQVJUX1RJTUUgfHwgbG9jYWxUaW1lLmdldEhvdXJzKCkgPiBFTkRfVElNRSkgewogICAgbG9nZ2VyLmVycm9yKCJMb2dpbiBmb3JiaWRkZW4gb3V0c2lkZSB3b3JrIGhvdXJzISIpOwogICAgYXV0aFN0YXRlID0gRkFJTEVEOwp9IGVsc2UgewogICAgbG9nZ2VyLm1lc3NhZ2UoIkF1dGhlbnRpY2F0aW9uIGFsbG93ZWQhIik7CiAgICBhdXRoU3RhdGUgPSBTVUNDRVNTOwp9CgpmdW5jdGlvbiBnZXRMb25naXR1ZGVMYXRpdHVkZUZyb21Vc2VyUG9zdGFsQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlclBvc3RhbEFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwogICAgICAvL3RoZSBhYm92ZSBVUkkgaGFzIHRvIGJlIGV4dGVuZGVkIHdpdGggYW4gQVBJX0tFWSBpZiB1c2VkIGluIGEgZnJlcXVlbnQgbWFubmVyCiAgICAgIC8vc2VlIGRvY3VtZW50YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9nZW9jb2RpbmcvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIGdlb2NvZGUgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIHZhciBpOwogICAgZm9yIChpID0gMDsgaSA8IGdlb2NvZGUucmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciByZXN1bHQgPSBnZW9jb2RlLnJlc3VsdHNbaV07CiAgICAgICAgbGF0aXR1ZGUgPSByZXN1bHQuZ2VvbWV0cnkubG9jYXRpb24ubGF0OwogICAgICAgIGxvbmdpdHVkZSA9IHJlc3VsdC5nZW9tZXRyeS5sb2NhdGlvbi5sbmc7CgogICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJsYXRpdHVkZToiICsgbGF0aXR1ZGUgKyAiIGxvbmdpdHVkZToiICsgbG9uZ2l0dWRlKTsKICAgIH0KfQoKZnVuY3Rpb24gZ2V0TG9jYWxUaW1lKCkgewoKICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7CiAgICB2YXIgbG9jYXRpb24gPSAibG9jYXRpb249IiArIGxhdGl0dWRlICsgIiwiICsgbG9uZ2l0dWRlOwogICAgdmFyIHRpbWVzdGFtcCA9ICJ0aW1lc3RhbXA9IiArIG5vdzsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS90aW1lem9uZS9qc29uPyIgKyBsb2NhdGlvbiArICImIiArIHRpbWVzdGFtcCk7CiAgICAgIHJlcXVlc3Quc2V0TWV0aG9kKCJHRVQiKTsKICAgICAgLy90aGUgYWJvdmUgVVJJIGhhcyB0byBiZSBleHRlbmRlZCB3aXRoIGFuIEFQSV9LRVkgaWYgdXNlZCBpbiBhIGZyZXF1ZW50IG1hbm5lcgogICAgICAvL3NlZSBkb2N1bWVudGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vdGltZXpvbmUvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIHRpbWV6b25lID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICB2YXIgbG9jYWxUaW1lc3RhbXAgPSBwYXJzZUludChub3cpICsgcGFyc2VJbnQodGltZXpvbmUuZHN0T2Zmc2V0KSArIHBhcnNlSW50KHRpbWV6b25lLnJhd09mZnNldCk7CiAgICBsb2NhbFRpbWUgPSBuZXcgRGF0ZShsb2NhbFRpbWVzdGFtcCoxMDAwKTsKfQoKZnVuY3Rpb24gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKSB7CiAgICB2YXIgdXNlckFkZHJlc3NTZXQgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCAicG9zdGFsQWRkcmVzcyIpOwogICAgaWYgKHVzZXJBZGRyZXNzU2V0ID09IG51bGwgfHwgdXNlckFkZHJlc3NTZXQuaXNFbXB0eSgpKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIGFkZHJlc3Mgc3BlY2lmaWVkIGZvciB1c2VyOiAiICsgdXNlcm5hbWUpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKQp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"d58977ed-0542-4147-8197-973ef7300191\",\"name\":\"Custom Device Match Script\",\"description\":\"Custom Device Match Script\",\"script\":\"LyoKICogQ3VzdG9tIERldmljZSBNYXRjaCBTY3JpcHQKICovCgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c4f22465-2368-4e27-8013-e6399974fd48\",\"name\":\"SAML2 IDP Attribute Mapper Script\",\"description\":\"Default global script for SAML2 IDP Attribute Mapper\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSBvYmplY3RzIGZvciB0aGUgSURQIGZyYW1ld29yayB0byBpbnNlcnQgaW50byB0aGUgZ2VuZXJhdGVkIEFzc2VydGlvbi4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgICAgICBUaGUgaG9zdGVkIGVudGl0eSBJRC4KICogcmVtb3RlRW50aXR5SWQgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgICAgVGhlIHJlbW90ZSBlbnRpdHkgSUQuCiAqIHJlYWxtIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGluZyB0by4KICogbG9nZ2VyIC0gQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5TQU1MMl9JRFBfQVRUUklCVVRFX01BUFBFUgogKiBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgLSBJZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgKDIpCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFuIElkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlciBpbnN0YW5jZSBjb250YWluaW5nIG1ldGhvZHMgdXNlZCBmb3IgSURQIGF0dHJpYnV0ZSBtYXBwaW5nLgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb246CiAqICAgICAgLSBvbiBmYWlsaW5nIHRvIG1hcCB0aGUgSURQIGF0dHJpYnV0ZXMuCiAqCiAqIFJldHVybiAtIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSAoMykgb2JqZWN0cy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgSWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaHRtbC4KICogKDMpIEF0dHJpYnV0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9hc3NlcnRpb24vQXR0cmlidXRlLmh0bWwuCiAqLwoKLyoqCiAqIERlZmF1bHQgU0FNTDIgSURQIEF0dHJpYnV0ZSBNYXBwZXIuCiAqLwpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKCkgewogICAgdmFyIGZySmF2YSA9IEphdmFJbXBvcnRlcigKICAgICAgICBjb20uc3VuLmlkZW50aXR5LnNhbWwyLmNvbW1vbi5TQU1MMkV4Y2VwdGlvbgogICAgKTsKCiAgICBjb25zdCBkZWJ1Z01ldGhvZCA9ICJTY3JpcHRlZElEUEF0dHJpYnV0ZU1hcHBlci5nZXRBdHRyaWJ1dGVzOjogIjsKCiAgICB0cnkgewoKICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1Nlc3Npb25WYWxpZChzZXNzaW9uKSkgewogICAgICAgICAgICBsb2dnZXIuZXJyb3IoZGVidWdNZXRob2QgKyAiSW52YWxpZCBzZXNzaW9uLiIpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHZhciBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0UmVtb3RlU1BDb25maWdBdHRyaWJ1dGVNYXAocmVhbG0sIHJlbW90ZUVudGl0eUlkKTsKICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJSZW1vdGUgU1AgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICBpZiAoY29uZmlnTWFwID09IG51bGwgfHwgY29uZmlnTWFwLmlzRW1wdHkoKSkgewogICAgICAgICAgICBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0SG9zdGVkSURQQ29uZmlnQXR0cmlidXRlTWFwKHJlYWxtLCBob3N0ZWRFbnRpdHlJZCk7CiAgICAgICAgICAgIGlmIChjb25maWdNYXAgPT0gbnVsbCB8fCBjb25maWdNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJDb25maWd1cmF0aW9uIG1hcCBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKGRlYnVnTWV0aG9kICsgIkhvc3RlZCBJRFAgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICB9CgogICAgICAgIHZhciBhdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoKTsKICAgICAgICB2YXIgc3RyaW5nVmFsdWVNYXAgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKICAgICAgICB2YXIgYmluYXJ5VmFsdWVNYXA7CiAgICAgICAgdmFyIGxvY2FsQXR0cmlidXRlOwoKICAgICAgICAvLyBEb24ndCB0cnkgdG8gcmVhZCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBkYXRhc3RvcmUgaWYgdGhlIGlnbm9yZWQgcHJvZmlsZSBpcyBlbmFibGVkIGluIHRoaXMgcmVhbG0uCiAgICAgICAgaWYgKCFpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaXNJZ25vcmVkUHJvZmlsZShzZXNzaW9uLCByZWFsbSkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIFJlc29sdmUgYXR0cmlidXRlcyB0byBiZSByZWFkIGZyb20gdGhlIGRhdGFzdG9yZS4KICAgICAgICAgICAgICAgIHZhciBzdHJpbmdBdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KCk7CiAgICAgICAgICAgICAgICB2YXIgYmluYXJ5QXR0cmlidXRlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgIHdoaWxlIChrZXlJdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlJdGVyLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBsb2NhbEF0dHJpYnV0ZSA9IGNvbmZpZ01hcC5nZXQoa2V5KTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1N0YXRpY0F0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc0JpbmFyeUF0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHRyZWF0IGFzIGJlaW5nIGJpbmFyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5QXR0cmlidXRlcy5hZGQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLnJlbW92ZUJpbmFyeUF0dHJpYnV0ZUZsYWcobG9jYWxBdHRyaWJ1dGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMuYWRkKGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXN0cmluZ0F0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWVNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0QXR0cmlidXRlcyhzZXNzaW9uLCBzdHJpbmdBdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghYmluYXJ5QXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBiaW5hcnlWYWx1ZU1hcCA9IGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5nZXRCaW5hcnlBdHRyaWJ1dGVzKHNlc3Npb24sIGJpbmFyeUF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGRlYnVnTWV0aG9kICsgIkVycm9yIGFjY2Vzc2luZyB0aGUgZGF0YXN0b3JlLiAiICsgZXJyb3IpOwogICAgICAgICAgICAgICAgLy9jb250aW51ZSB0byBjaGVjayBpbiBzc290b2tlbi4KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICB3aGlsZSAoa2V5SXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgdmFyIGtleSA9IGtleUl0ZXIubmV4dCgpCiAgICAgICAgICAgIHZhciBuYW1lRm9ybWF0ID0gbnVsbDsKICAgICAgICAgICAgdmFyIHNhbWxBdHRyaWJ1dGUgPSBrZXk7CiAgICAgICAgICAgIGxvY2FsQXR0cmlidXRlID0gY29uZmlnTWFwLmdldChrZXkpOwogICAgICAgICAgICAvLyBjaGVjayBpZiBzYW1sQXR0cmlidXRlIGhhcyBmb3JtYXQgbmFtZUZvcm1hdHxzYW1sQXR0cmlidXRlCiAgICAgICAgICAgIHZhciBzYW1sQXR0cmlidXRlcyA9IFN0cmluZyhuZXcgamF2YS5sYW5nLlN0cmluZyhzYW1sQXR0cmlidXRlKSk7CiAgICAgICAgICAgIHZhciB0b2tlbnMgPSBzYW1sQXR0cmlidXRlcy5zcGxpdCgnfCcpOwoKICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICBuYW1lRm9ybWF0ID0gdG9rZW5zWzBdOwogICAgICAgICAgICAgICAgc2FtbEF0dHJpYnV0ZSA9IHRva2Vuc1sxXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVZhbHVlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzU3RhdGljQXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdGF0aWMgZmxhZyBiZWZvcmUgdXNpbmcgaXQgYXMgdGhlIHN0YXRpYyB2YWx1ZQogICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlU3RhdGljQXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoW2xvY2FsQXR0cmlidXRlXSk7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJBZGRpbmcgc3RhdGljIHZhbHVlIHt9IGZvciBhdHRyaWJ1dGUgbmFtZWQge30iLCBsb2NhbEF0dHJpYnV0ZSwgc2FtbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzQmluYXJ5QXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZmxhZyBhcyBub3QgdXNlZCBmb3IgbG9va3VwCiAgICAgICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlQmluYXJ5QXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzID0gaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldEJpbmFyeUF0dHJpYnV0ZVZhbHVlcyhzYW1sQXR0cmlidXRlLCBsb2NhbEF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5VmFsdWVNYXApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWVNYXAgIT0gbnVsbCAmJiAhc3RyaW5nVmFsdWVNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlcyA9IHN0cmluZ1ZhbHVlTWFwLmdldChsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoZGVidWdNZXRob2QgKyAie30gc3RyaW5nIHZhbHVlIG1hcCB3YXMgZW1wdHkgb3IgbnVsbC4iLCBsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSB1c2VycyBzc29Ub2tlbgogICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlcyA9PSBudWxsIHx8IGF0dHJpYnV0ZVZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJVc2VyIHByb2ZpbGUgZG9lcyBub3QgaGF2ZSB2YWx1ZSBmb3Ige30sIGNoZWNraW5nIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldFByb3BlcnR5U2V0KHNlc3Npb24sIGxvY2FsQXR0cmlidXRlKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZXMgPT0gbnVsbCB8fCBhdHRyaWJ1dGVWYWx1ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJ7fSBub3QgZm91bmQgaW4gdXNlciBwcm9maWxlIG9yIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuYWRkKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5jcmVhdGVTQU1MQXR0cmlidXRlKHNhbWxBdHRyaWJ1dGUsIG5hbWVGb3JtYXQsIGF0dHJpYnV0ZVZhbHVlcykpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXR0cmlidXRlczsKCiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGxvZ2dlci5lcnJvcihkZWJ1Z01ldGhvZCArICJFcnJvciBtYXBwaW5nIElEUCBhdHRyaWJ1dGVzLiAiICsgZXJyb3IpOwogICAgICAgIHRocm93IG5ldyBmckphdmEuU0FNTDJFeGNlcHRpb24oZXJyb3IpOwogICAgfQp9CgpnZXRBdHRyaWJ1dGVzKCk7\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ATTRIBUTE_MAPPER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"424da748-82cc-4b54-be6f-82bd64d82a74\",\"name\":\"Yahoo Profile Normalization\",\"description\":\"Normalizes raw profile data from Yahoo\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"403cf226-6051-4368-8b72-9ba14f9a5140\",\"name\":\"VKontakte Profile Normalization\",\"description\":\"Normalizes raw profile data from VKontakte\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGhvdG9fNTApLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"5e854779-6ec1-4c39-aeba-0477e0986646\",\"name\":\"Config Provider Node Script\",\"description\":\"Script to provide values for a config provider node\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKioKICogVGhlIGZvbGxvd2luZyBzY3JpcHQgaXMgYSBzaW1wbGlmaWVkIHRlbXBsYXRlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0byBidWlsZAogKiB1cCBhIGNvbmZpZyBNYXAgb2JqZWN0IHdpdGggY3VzdG9tIHZhbHVlcy4gVGhlIENvbmZpZyBQcm92aWRlciBOb2RlIHdpbGwgdGhlbgogKiBwcm92aWRlIHRoaXMgY29uZmlnIE1hcCB0byB0aGUgZGVzaXJlZCBub2RlIHR5cGUuIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBNYXAKICogeW91IGJ1aWxkIGhlcmUgaXMgbmFtZWQgJ2NvbmZpZycuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKgogKiBub2RlU3RhdGUgLSBOb2RlIFN0YXRlICgxKQogKiAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoaXMgcmVwcmVzZW50cyB0aGUgY3VycmVudCB2YWx1ZXMgc3RvcmVkIGluIHRoZSBub2RlIHN0YXRlLgogKgogKiBpZFJlcG9zaXRvcnkgLSBQcm9maWxlIERhdGEgKDIpCiAqICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgYSByZXBvc2l0b3J5IHRvIHJldHJpZXZlIHVzZXIgaW5mb3JtYXRpb24uCiAqCiAqIHNlY3JldHMgLSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAoMykKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBTZWNyZXRzIEFQSSBmcm9tIGEgc2NyaXB0aW5nIGNvbnRleHQuCiAqCiAqIHJlcXVlc3RIZWFkZXJzICg0KSAtIE1hcCAoNSkKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIGZvciBhY2Nlc3NpbmcgaGVhZGVycyBpbiB0aGUgbG9naW4gcmVxdWVzdC4KICoKICogbG9nZ2VyIC0gRGVidWcgTG9nZ2luZyAoNikKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2UuCiAqCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoNykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cy4KICoKICogcmVhbG0gLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqCiAqIGV4aXN0aW5nU2Vzc2lvbiAtIE1hcDxTdHJpbmcsIFN0cmluZz4gKDUpCiAqICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LiBUaGUgcmV0dXJuZWQgbWFwIGZyb20KICogICAgICAgICAgU1NPVG9rZW4uZ2V0UHJvcGVydGllcygpICg4KQogKgogKiByZXF1ZXN0UGFyYW1ldGVycyAtIE1hcCAoNSkKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBwYXJhbWV0ZXJzLgogKgogKgogKiBPdXRwdXRzOgogKgogKiBjb25maWcgLSBNYXAgKDUpCiAqICAgICAgICAgICBEZWZpbmUgYW5kIGZpbGwgYSBNYXAgb2JqZWN0IG5hbWVkICdjb25maWcnIHdpdGggY3VzdG9tIHZhbHVlcywgdGhpcyB3aWxsIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlCiAqICAgICAgICAgICBhc3NvY2lhdGVkIG5vZGUgc2VsZWN0ZWQgaW4gdGhlIENvbmZpZ1Byb3ZpZGVyTm9kZS4KICoKICogUmVmZXJlbmNlOgogKiAoMSkgTm9kZSBTdGF0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9pZGNsb3VkLWFtL2xhdGVzdC9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtbm9kZVN0YXRlCiAqICgyKSBQcm9maWxlIERhdGEgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4xL2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1pZC1yZXBvCiAqICgzKSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjEvYXV0aGVudGljYXRpb24tZ3VpZGUvc2NyaXB0aW5nLWFwaS1ub2RlLmh0bWwjc2NyaXB0aW5nLWFwaS1hdXRobi1zZWNyZXRzCiAqICg0KSBSZXF1ZXN0IEhlYWRlcnMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtcmVxdWVzdEhlYWRlcnMuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL01hcC5odG1sCiAqICg2KSBEZWJ1ZyBMb2dnaW5nIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogKDcpIEhUVFAgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg4KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqLwoKY29uZmlnID0gewogICAgImtleTAiOiB7InN1YktleSI6ICJ2YWx1ZTAifSwKICAgICJrZXkxIjogInZhbHVlMSIKfTs=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"CONFIG_PROVIDER_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"cf3515f0-8278-4ee3-a530-1bad7424c416\",\"name\":\"Alpha OIDC Claims Script\",\"description\":\"Default alpha realm script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"d22f9a0c-426a-4466-b95e-d0f125b0d5fa\",\"name\":\"OAuth2 Access Token Modification Script\",\"description\":\"Default global script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"73cecbfc-dad0-4395-be6a-6858ee3a80e5\",\"name\":\"Microsoft Profile Normalization\",\"description\":\"Normalizes raw profile data from Microsoft\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlOYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbk5hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5zdXJuYW1lKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"a7a78773-445b-4eca-bb93-409e86bced81\",\"name\":\"GitHub Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUubG9naW4pKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"01e1a3c0-038b-4c16-956a-6c9d89328cff\",\"name\":\"Authentication Tree Decision Node Script\",\"description\":\"Default global script for a scripted decision node\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKb3V0Y29tZSA9ICJ0cnVlIjsK\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"dbe0bf9a-72aa-49d5-8483-9db147985a47\",\"name\":\"ADFS Profile Normalization (JS)\",\"description\":\"Normalizes raw profile data from ADFS\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIHRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIKICogaW4gYSBzdGFuZGFyZCBmb3JtIGV4cGVjdGVkIGJ5IHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogcmF3UHJvZmlsZSAtIFRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvdmlkZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIuCiAqICAgICAgICAgICAgICBKc29uVmFsdWUgKDEpLgogKiBsb2dnZXIgLSBUaGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiByZWFsbSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqIHJlcXVlc3RIZWFkZXJzIC0gVHJlZU1hcCAoMikuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFjY2Vzc2luZyBoZWFkZXJzIGluIHRoZSBsb2dpbiByZXF1ZXN0OgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1yZXF1ZXN0SGVhZGVycy4KICogcmVxdWVzdFBhcmFtZXRlcnMgLSBUcmVlTWFwICgyKS4KICogICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFyYW1ldGVycy4KICogc2VsZWN0ZWRJZHAgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgVGhlIHNvY2lhbCBpZGVudGl0eSBwcm92aWRlciBuYW1lLiBGb3IgZXhhbXBsZTogZ29vZ2xlLgogKiBzaGFyZWRTdGF0ZSAtIExpbmtlZEhhc2hNYXAgKDMpLgogKiAgICAgICAgICAgICAgIFRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgc3RhdGUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRyZWUgYW5kIGFsbG93cyBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gdGhlIHN0YXRlbGVzcyBub2RlczoKICogICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoLW5vZGVzL2NvcmUtYWN0aW9uLmh0bWwjYWNjZXNzaW5nLXRyZWUtc3RhdGUuCiAqIHRyYW5zaWVudFN0YXRlIC0gTGlua2VkSGFzaE1hcCAoMykuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCBmb3Igc3RvcmluZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdGhhdCBtdXN0IG5vdCBsZWF2ZSB0aGUgc2VydmVyIHVuZW5jcnlwdGVkLAogKiAgICAgICAgICAgICAgICAgIGFuZCB0aGF0IG1heSBub3QgbmVlZCB0byBwZXJzaXN0IGJldHdlZW4gYXV0aGVudGljYXRpb24gcmVxdWVzdHMgZHVyaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBzZXNzaW9uOgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGgtbm9kZXMvY29yZS1hY3Rpb24uaHRtbCNhY2Nlc3NpbmctdHJlZS1zdGF0ZS4KICoKICogUmV0dXJuIC0gYSBKc29uVmFsdWUgKDEpLgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqCiAqICAgICAgICAgIFRoaXMgc2NyaXB0J3MgbGFzdCBzdGF0ZW1lbnQgc2hvdWxkIHJlc3VsdCBpbiBhIEpzb25WYWx1ZSAoMSkgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAqICAgICAgICAgIHsKICogICAgICAgICAgICAgIHsiZGlzcGxheU5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZW1haWwiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZmFtaWx5TmFtZSI6ICJjb3JyZXNwb25kaW5nLXNvY2lhbC1pZGVudGl0eS1wcm92aWRlci12YWx1ZSJ9LAogKiAgICAgICAgICAgICAgeyJnaXZlbk5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiaWQiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsibG9jYWxlIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InBob3RvVXJsIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InVzZXJuYW1lIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0KICogICAgICAgICAgfQogKgogKiAgICAgICAgICBUaGUgY29uc3VtZXIgb2YgdGhpcyBkYXRhIGRlZmluZXMgd2hpY2gga2V5cyBhcmUgcmVxdWlyZWQgYW5kIHdoaWNoIGFyZSBvcHRpb25hbC4KICogICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlIGFuZCwKICogICAgICAgICAgdWx0aW1hdGVseSwgdGhlIG1hbmFnZWQgb2JqZWN0IGNyZWF0ZWQvdXBkYXRlZCB3aXRoIHRoaXMgZGF0YQogKiAgICAgICAgICB3aWxsIGV4cGVjdCBjZXJ0YWluIGtleXMgdG8gYmUgcG9wdWxhdGVkLgogKiAgICAgICAgICBJbiBzb21lIGNvbW1vbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB0aGUgZm9sbG93aW5nIGtleXMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vdCBlbXB0eToKICogICAgICAgICAgdXNlcm5hbWUsIGdpdmVuTmFtZSwgZmFtaWx5TmFtZSwgZW1haWwuCiAqCiAqICAgICAgICAgIEZyb20gUkZDNDUxNzogQSB2YWx1ZSBvZiB0aGUgRGlyZWN0b3J5IFN0cmluZyBzeW50YXggaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKICogICAgICAgICAgYXJiaXRyYXJ5IGNoYXJhY3RlcnMgZnJvbSB0aGUgVW5pdmVyc2FsIENoYXJhY3RlciBTZXQgKFVDUykuCiAqICAgICAgICAgIEEgemVyby1sZW5ndGggY2hhcmFjdGVyIHN0cmluZyBpcyBub3QgcGVybWl0dGVkLgogKgogKiAoMSkgSnNvblZhbHVlIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2pzb24vSnNvblZhbHVlLmh0bWwuCiAqICgyKSBUcmVlTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9UcmVlTWFwLmh0bWwuCiAqICgzKSBMaW5rZWRIYXNoTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqLwoKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQogICAgKTsKCiAgICB2YXIgbm9ybWFsaXplZFByb2ZpbGVEYXRhID0gZnJKYXZhLkpzb25WYWx1ZS5qc29uKGZySmF2YS5Kc29uVmFsdWUub2JqZWN0KCkpOwogIAogICAgICAvL2xvZ2dlci5tZXNzYWdlKCdTZWd1aW4gcmF3UHJvZmlsZTogJytyYXdQcm9maWxlKTsKCiAgICBub3JtYWxpemVkUHJvZmlsZURhdGEucHV0KCdpZCcsIHJhd1Byb2ZpbGUuZ2V0KCdzdWInKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2Rpc3BsYXlOYW1lJywgcmF3UHJvZmlsZS5nZXQoJ2dpdmVuTmFtZScpLmFzU3RyaW5nKCkgKyAnICcgKyByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2VtYWlsJywgcmF3UHJvZmlsZS5nZXQoJ21haWwnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2dpdmVuTmFtZScsIHJhd1Byb2ZpbGUuZ2V0KCdnaXZlbk5hbWUnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2ZhbWlseU5hbWUnLCByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ3VzZXJuYW1lJywgcmF3UHJvZmlsZS5nZXQoJ3VwbicpLmFzU3RyaW5nKCkpOwogICAgbm9ybWFsaXplZFByb2ZpbGVEYXRhLnB1dCgncm9sZXMnLCByYXdQcm9maWxlLmdldCgncm9sZXMnKS5hc1N0cmluZygpKTsKICAKICAgICAgLy9sb2dnZXIubWVzc2FnZSgnU2VndWluIG5vcm1hbGl6ZWRQcm9maWxlRGF0YTogJytub3JtYWxpemVkUHJvZmlsZURhdGEpOwoKICAgIHJldHVybiBub3JtYWxpemVkUHJvZmlsZURhdGE7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"400e48ba-3f13-4144-ac7b-f824ea8e98c5\",\"name\":\"OAuth2 JWT Issuer Script\",\"description\":\"Default global script for scripted JWT Issuers\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgdG8gZGVyaXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIGR5bmFtaWMgSldUIGlzc3VlciBmcm9tIHRoZSBpc3N1ZXIgc3RyaW5nLgogKiBBIEpXVCBpc3N1ZXIgaXMgbWFkZSB1cCBvZiB0aGUgZm9sbG93aW5nOgogKiAgIC0gaXNzdWVyIC0gdGhlIGlkZW50aWZpZXIgb2YgdGhlIGVudGl0eSB0aGF0IGlzc3VlcyBKV1RzCiAqICAgLSByZXNvdXJjZSBvd25lciBzdWJqZWN0IGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCBpZGVudGlmaWVzIHRoZSByZXNvdXJjZSBvd25lcgogKiAgIC0gY29uc2VudGVkIHNjb3BlIGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCByZXByZXNlbnRzIHNjb3BlIHRoYXQgdGhlIHJlc291cmNlIG93bmVyCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYWxyZWFkeSBjb25zZW50ZWQgdG8gZXh0ZXJuYWxseQogKiAgIC0gYXV0aG9yaXplZCBzdWJqZWN0cyAtIHRoZSBzZXQgb2YgcHJpbmNpcGFsIGlkZW50aWZpZXJzIHRoYXQgYXJlIGF1dGhvcml6ZWQgdG8gYmUgdXNlZCBhcyByZXNvdXJjZSBvd25lcnMKICogICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgaXNzdWVyCiAqICAgLSBKV0tzIC0gZWl0aGVyIGEgc2V0IG9mIEpXS3Mgb3IgY29ubmVjdGlvbiBkZXRhaWxzIGZvciBvYnRhaW5pbmcgdGhhdCBzZXQsIHRoYXQgYXJlIHRoZSBwdWJsaWMga2V5cyB0aGF0CiAqICAgICAgICAgICAgY2FuIHZlcmlmeSB0aGUgc2lnbmF0dXJlIG9uIHRoZSBpc3N1ZWQgSldUcy4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIGlzc3VlciAtIFN0cmluZwogKiAgICAgICAgICBUaGUgaXNzdWVyIGZyb20gdGhlIGJlYXJlciBKV1QuCiAqIHJlYWxtIC0gU3RyaW5nCiAqICAgICAgICAgVGhlIHBhdGggb2YgdGhlIHJlYWxtIHRoYXQgaXMgaGFuZGxpbmcgdGhlIHJlcXVlc3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIHNjcmlwdCBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5PQVVUSDJfU0NSSVBURURfSldUX0lTU1VFUi4KICogaHR0cENsaWVudCAtIEhUVFAgQ2xpZW50ICgxKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgSFRUUCBDbGllbnQgaW5zdGFuY2U6CiAqICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC4KICogaWRSZXBvc2l0b3J5IC0gSWRlbnRpdHkgUmVwb3NpdG9yeSAoMikuIEFsd2F5cyBwcmVzZW50LgogKiBzZWNyZXRzIC0gU2VjcmV0cyBhY2Nlc3NvciAoMykuIEFsd2F5cyBwcmVzZW50LgogKgogKiBSZXR1cm4gLSBvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLlRydXN0ZWRKd3RJc3N1ZXJDb25maWcgKDQpIC0gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRydXN0ZWQgSldUIGlzc3Vlci4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgyKSBTY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuYW0vc2NyaXB0aW5nL2FwaS9pZGVudGl0eS9TY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeS5odG1sLgogKiAoMykgU2NyaXB0ZWRTZWNyZXRzIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5hbS9zY3JpcHRpbmcvYXBpL3NlY3JldHMvU2NyaXB0ZWRTZWNyZXRzLmh0bWwuCiAqICg0KSBUcnVzdGVkSnd0SXNzdWVyQ29uZmlnIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1RydXN0ZWRKd3RJc3N1ZXJDb25maWcuaHRtbC4KICovCgovKiBFWEFNUExFCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVHJ1c3RlZEp3dElzc3VlckNvbmZpZywKICAgICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbnMKICAgICk7CgogICAgdmFyIGlzcyA9IGlkUmVwb3NpdG9yeS5nZXRJZGVudGl0eShpc3N1ZXIpOwogICAgaWYgKGlzcyA9PSBudWxsKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoJ05vIGlzc3VlciBmb3VuZCBmb3I6ICcraXNzdWVyKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGxvZ2dlci5tZXNzYWdlKCdGb3VuZCBpc3N1ZXI6ICcraXNzKTsKICAgIC8vIGluIHRoaXMgZXhhbXBsZSBlaXRoZXIgYSBKV0sgc2V0IG9yIGEgVVJJIHRvIGEgSldLIHNldCBhcmUgaW4gdGhlIHBvc3RhbEFkZHJlc3MgYXR0cmlidXRlCiAgICB2YXIgandrc0F0dHJzID0gaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygncG9zdGFsQWRkcmVzcycpOwogICAgdmFyIGp3a1NldCA9IGp3a3NBdHRycy5sZW5ndGggPT09IDAgPyBudWxsIDogandrc0F0dHJzWzBdOwogICAgdmFyIGNvbmZpZyA9IG5ldyBmckphdmEuVHJ1c3RlZEp3dElzc3VlckNvbmZpZygKICAgICAgICBpc3N1ZXIsCiAgICAgICAgJ3N1YicsCiAgICAgICAgJ3Njb3BlJywKICAgICAgICAvLyBpbiB0aGlzIGV4YW1wbGUsIHZhbGlkIHN1YmplY3RzIGFyZSBzdG9yZWQgaW4gdGhlIG1haWwgYXR0cmlidXRlCiAgICAgICAgaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygnbWFpbCcpLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCd7JykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCdodHRwJykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgICc1IG1pbnV0ZXMnLAogICAgICAgICcxIG1pbnV0ZScKICAgICk7CiAgICByZXR1cm4gY29uZmlnOwp9KCkpOwoqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_SCRIPTED_JWT_ISSUER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"59f84396-71e4-4c1d-a6ae-c4fc624d9752\",\"name\":\"Test-Script-1\",\"description\":\"A test script that uses an environment variable and a secret variable\",\"script\":\"Ly8gQ2FsY3VsYXRlIEU9bWNeMiB1c2luZyBtID0gNDIKY29uc3QgYzIgPSBzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi50ZXN0LnZhcmlhYmxlLmxpZ2h0Iik7CmNvbnNvbGUubG9nKGBFID0gJHs0MiAqIGMyICogYzJ9YCk7Ci8vIENhbGN1bGF0ZSB0aGUgYXJlYSBvZiBhIGNpcmNsZSB3aXRoIHJhZGl1cyByID0gNDIKY29uc3QgcGkgPSBwYXJzZUZsb2F0KHN5c3RlbUVudi5nZXRQcm9wZXJ0eSgiZXN2LnRlc3Quc2VjcmV0LnBpIikpOwpjb25zb2xlLmxvZyhgQSA9ICR7cGkgKiA0MiAqIDQyfWApOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"248b8a56-df81-4b1b-b4ba-45d994f6504c\",\"name\":\"SAML2 IDP Adapter Script\",\"description\":\"Default global script for SAML2 IDP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9TQU1MMklkZW50aXR5UHJvdmlkZXJBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBJZHBBZGFwdGVyU2NyaXB0SGVscGVyICgxKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgSWRwQWRhcHRlclNjcmlwdEhlbHBlciBjb250YWluaW5nIGhlbHBlciBtZXRob2RzLiBTZWUgSmF2YWRvYyBmb3IgbW9yZSBkZXRhaWxzLgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgyKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDMpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDQpCiAqICAgICBUaGUgb3JpZ2luYWwgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IGZyb20gU1AKICogcmVxSWQgLSBTdHJpbmcKICogICAgIFRoZSBpZCB0byB1c2UgZm9yIGNvbnRpbnVhdGlvbiBvZiBwcm9jZXNzaW5nIGlmIHRoZSBhZGFwdGVyIHJlZGlyZWN0cwogKiByZXMgLSBSZXNwb25zZSAoNSkKICogICAgIFRoZSBTQU1MIFJlc3BvbnNlCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNikKICogICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLiBUaGUgcmVmZXJlbmNlIHR5cGUgb2YgdGhpcyBpcyBPYmplY3QgYW5kIHdvdWxkIG5lZWQgdG8gYmUgY2FzdGVkIHRvIFNTT1Rva2VuLgogKiByZWxheVN0YXRlIC0gU3RyaW5nCiAqICAgICBUaGUgcmVsYXlTdGF0ZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgcmVkaXJlY3QKICogZmF1bHRDb2RlIC0gU3RyaW5nCiAqICAgICB0aGUgZmF1bHQgY29kZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogZmF1bHREZXRhaWwgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBkZXRhaWwgdGhhdCB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBTQU1MIHJlc3BvbnNlCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwuCiAqICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuPHNjcmlwdCBuYW1lPgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb24gKDcpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL0F1dGhuUmVxdWVzdC5odG1sLgogKiAoNSkgUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvUmVzcG9uc2UuaHRtbC4KICogKDYpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBJRFAgQWRhcHRlciBzY3JpcHRlZCBwbHVnaW4uCiAqLwoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2luZ2xlU2lnbk9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlU2lnbk9uICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlQXV0aGVudGljYXRpb246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVBdXRoZW50aWNhdGlvbiAoKSB7CiAgICByZXR1cm4gZmFsc2U7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNlbmRSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgcmVxSWQKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIGJyb3dzZXIgcmVkaXJlY3Rpb24gaGFwcGVuZWQgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2VuZFJlc3BvbnNlICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2lnblJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIHJlcwogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTaWduUmVzcG9uc2UgKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgZmF1bHRDb2RlCiAqICAgICBmYXVsdERldGFpbAogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlICgpIHsKfQ==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e232cff3-2460-47cd-80b2-36c86c0d0f06\",\"name\":\"Alpha endUserUIClient OAuth2 Access Token Modification Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBpZiAoc2NvcGVzLmNvbnRhaW5zKCdmcjphdXRvYWNjZXNzOionKSB8fCBzY29wZXMuY29udGFpbnMoJ2ZyOmlnYToqJykgfHwgc2NvcGVzLmNvbnRhaW5zKCdmcjppZGM6YW5hbHl0aWNzOionKSkgewogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBjb20uc3VuLmlkZW50aXR5LmlkbS5JZFR5cGUKICAgICk7CiAgICB2YXIgZ3JvdXBzID0gW107CiAgICBpZGVudGl0eS5nZXRNZW1iZXJzaGlwcyhmci5JZFR5cGUuR1JPVVApLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkgewogICAgICBncm91cHMucHVzaChncm91cC5nZXRBdHRyaWJ1dGUoJ2NuJykudG9BcnJheSgpWzBdKTsKICAgIH0pOwogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ2dyb3VwcycsIGdyb3Vwcyk7CiAgfQp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"743351b3-001a-4ec8-b3ac-a674ddb8de22\",\"name\":\"UOP Enrich Session\",\"description\":\"Enrich user session with UOP class ID.\",\"script\":\"LyogVU9QIEVucmljaCBTZXNzaW9uCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIEFkZCBjdXJyZW50IGNsYXNzIElEIHRvIHVzZXIgc2Vzc2lvbi4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuIAogKiBJdCByZXF1aXJlcyB0aGUgSWRlbnRpZnkgRXhpc3RpbmcgVXNlciBub2RlIGJlZm9yZSBpdCBpcyBiZWluZyBjYWxsZWQuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAtIGZhbHNlCiAqLwpsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBzdGFydCIpOwpvdXRjb21lID0gImZhbHNlIjsKCmlmIChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBnb2luZyB0byBlbnJpY2ggc2Vzc2lvbiB3aXRoIGNsYXNzIGlkOiAiLmNvbmNhdChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpKTsKICAKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaQogICAgKTsKCiAgICB3aXRoIChmcikgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJVT1AgRW5yaWNoIFNlc3Npb246IEVuZCAob3V0Y29tZT0iLmNvbmNhdChvdXRjb21lKS5jb25jYXQoIikiKSk7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8ob3V0Y29tZSkucHV0U2Vzc2lvblByb3BlcnR5KCJVT1BDbGFzc0lEIiwgc2hhcmVkU3RhdGUuZ2V0KCJ1b3BDdXJyZW50Q2xhc3NJRCIpKS5idWlsZCgpOwogICAgfQogIAp9IGVsc2UgewogICAgbG9nZ2VyLmVycm9yKCJVT1AgRW5yaWNoIFNlc3Npb246IG5vIGNsYXNzZXMhIik7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBFbmQgKG91dGNvbWU9Ii5jb25jYXQob3V0Y29tZSkuY29uY2F0KCIpIikpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"484e6246-dbc6-4288-97e6-54e55431402e\",\"name\":\"Apple Profile Normalization\",\"description\":\"Normalizes raw profile data from Apple\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICoKICogSW4gc29tZSBjb21tb24gZGVmYXVsdCBjb25maWd1cmF0aW9ucywgdGhlIGZvbGxvd2luZyBrZXlzIGFyZSByZXF1aXJlZCB0byBiZSBub3QgZW1wdHk6CiAqIHVzZXJuYW1lLCBnaXZlbk5hbWUsIGZhbWlseU5hbWUsIGVtYWlsLgogKgogKiBGcm9tIFJGQzQ1MTc6IEEgdmFsdWUgb2YgdGhlIERpcmVjdG9yeSBTdHJpbmcgc3ludGF4IGlzIGEgc3RyaW5nIG9mIG9uZSBvciBtb3JlCiAqIGFyYml0cmFyeSBjaGFyYWN0ZXJzIGZyb20gdGhlIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0IChVQ1MpLgogKiBBIHplcm8tbGVuZ3RoIGNoYXJhY3RlciBzdHJpbmcgaXMgbm90IHBlcm1pdHRlZC4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKU3RyaW5nIGVtYWlsID0gImNoYW5nZUBtZS5jb20iClN0cmluZyBzdWJqZWN0SWQgPSByYXdQcm9maWxlLnN1YgpTdHJpbmcgZmlyc3ROYW1lID0gIiAiClN0cmluZyBsYXN0TmFtZSA9ICIgIgpTdHJpbmcgdXNlcm5hbWUgPSBzdWJqZWN0SWQKU3RyaW5nIG5hbWUKCmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgiZW1haWwiKSAmJiByYXdQcm9maWxlLmVtYWlsLmlzTm90TnVsbCgpKXsgLy8gVXNlciBjYW4gZWxlY3QgdG8gbm90IHNoYXJlIHRoZWlyIGVtYWlsCiAgICBlbWFpbCA9IHJhd1Byb2ZpbGUuZW1haWwuYXNTdHJpbmcoKQogICAgdXNlcm5hbWUgPSBlbWFpbAp9CmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgibmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5pc05vdE51bGwoKSkgewogICAgaWYgKHJhd1Byb2ZpbGUubmFtZS5pc0RlZmluZWQoImZpcnN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5maXJzdE5hbWUuaXNOb3ROdWxsKCkpIHsKICAgICAgICBmaXJzdE5hbWUgPSByYXdQcm9maWxlLm5hbWUuZmlyc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KICAgIGlmIChyYXdQcm9maWxlLm5hbWUuaXNEZWZpbmVkKCJsYXN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5sYXN0TmFtZS5pc05vdE51bGwoKSkgewogICAgICAgIGxhc3ROYW1lID0gcmF3UHJvZmlsZS5uYW1lLmxhc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KfQoKbmFtZSA9IChmaXJzdE5hbWU/LnRyaW0oKSA/IGZpcnN0TmFtZSA6ICIiKSArIChsYXN0TmFtZT8udHJpbSgpID8gKChmaXJzdE5hbWU/LnRyaW0oKSA/ICIgIiA6ICIiKSArIGxhc3ROYW1lKSA6ICIiKQpuYW1lID0gICghbmFtZT8udHJpbSgpKSA/ICIgIiA6IG5hbWUKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCBzdWJqZWN0SWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIG5hbWUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIGVtYWlsKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgZmlyc3ROYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIGxhc3ROYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCB1c2VybmFtZSkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":59,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 464939, + "text": "{\"result\":[{\"_id\":\"703dab1a-1921-4981-98dd-b8e5349d8548\",\"name\":\"Device Id (Match) - Server Side\",\"description\":\"Default global script for server side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAyMyBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIFNjYWxhckNvbXBhcmF0b3IgPSB7fSwgU2NyZWVuQ29tcGFyYXRvciA9IHt9LCBNdWx0aVZhbHVlQ29tcGFyYXRvciA9IHt9LCBVc2VyQWdlbnRDb21wYXJhdG9yID0ge30sIEdlb2xvY2F0aW9uQ29tcGFyYXRvciA9IHt9OwoKdmFyIGNvbmZpZyA9IHsKICAgIHByb2ZpbGVFeHBpcmF0aW9uOiAzMCwgICAgICAgICAgICAgIC8vaW4gZGF5cwogICAgbWF4UHJvZmlsZXNBbGxvd2VkOiA1LAogICAgbWF4UGVuYWx0eVBvaW50czogMCwKICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBzY3JlZW46IHsKICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICAgIGNvbXBhcmF0b3I6IFNjcmVlbkNvbXBhcmF0b3IsCiAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDUwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHBsdWdpbnM6IHsKICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2luczogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmb250czogewogICAgICAgICAgICBpbnN0YWxsZWRGb250czogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogU2NhbGFyQ29tcGFyYXRvciwKICAgICAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdXNlckFnZW50OiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgICBjb21wYXJhdG9yOiBVc2VyQWdlbnRDb21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBpZ25vcmVWZXJzaW9uOiB0cnVlLAogICAgICAgICAgICAgICAgcGVuYWx0eVBvaW50czogMTAwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdlb2xvY2F0aW9uOiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSwKICAgICAgICAgICAgY29tcGFyYXRvcjogR2VvbG9jYXRpb25Db21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBhbGxvd2VkUmFuZ2U6IDEwMCwgICAgICAgICAgICAvL2luIG1pbGVzCiAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJhdG9yIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCgp2YXIgYWxsLCBhbnksIGNhbGN1bGF0ZURpc3RhbmNlLCBjYWxjdWxhdGVJbnRlcnNlY3Rpb24sIGNhbGN1bGF0ZVBlcmNlbnRhZ2UsIG51bGxPclVuZGVmaW5lZCwgc3BsaXRBbmRUcmltLAogICAgdW5kZWZpbmVkTG9jYXRpb247CgovLyBDb21wYXJpc29uUmVzdWx0CgovKioKICogQ29uc3RydWN0cyBhbiBpbnN0YW5jZSBvZiBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gcGVuYWx0eSBwb2ludHMuCiAqCiAqIEBwYXJhbSBwZW5hbHR5UG9pbnRzIChOdW1iZXIpIFRoZSBwZW5hbHR5IHBvaW50cyBmb3IgdGhlIGNvbXBhcmlzb24gKGRlZmF1bHRzIHRvIDApLgogKiBAcGFyYW0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSAoYm9vbGVhbikgV2hldGhlciB0aGUgY3VycmVudCB2YWx1ZSBjb250YWlucyBtb3JlIGluZm9ybWF0aW9uCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIHRoZSBzdG9yZWQgdmFsdWUgKGRlZmF1bHRzIHRvIGZhbHNlKS4KICovCmZ1bmN0aW9uIENvbXBhcmlzb25SZXN1bHQoKSB7CgogICAgdmFyIHBlbmFsdHlQb2ludHMgPSAwLAogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBmYWxzZTsKCiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQpIHsKICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBhcmd1bWVudHNbMV07CiAgICB9CgogICAgaWYgKGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkICYmIGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgaWYgKHR5cGVvZihhcmd1bWVudHNbMF0pID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSA9IGFyZ3VtZW50c1swXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIH0KICAgIH0KCiAgICB0aGlzLnBlbmFsdHlQb2ludHMgPSBwZW5hbHR5UG9pbnRzOwogICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZTsKCn0KCkNvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUyA9IG5ldyBDb21wYXJpc29uUmVzdWx0KDApOwoKLyoqCiAqIFN0YXRpYyBtZXRob2QgZm9yIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcuCiAqCiAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkuCiAqLwpDb21wYXJpc29uUmVzdWx0LmlzU3VjY2Vzc2Z1bCA9ICBmdW5jdGlvbihjb21wYXJpc29uUmVzdWx0KSB7CiAgICByZXR1cm4gY29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKTsKfTsKCgovKioKICogU3RhdGljIG1ldGhvZCBmb3IgZnVuY3Rpb25hbCBwcm9ncmFtbWluZy4KICoKICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gIGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHJldHVybiBjb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU7Cn07CgovKioKICogQ29tcGFyaXNvbiBmdW5jdGlvbiB0aGF0IGNhbiBiZSBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCB0byBhcnJheS5zb3J0CiAqLwpDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUgPSBmdW5jdGlvbihmaXJzdCwgc2Vjb25kKSB7CiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGZpcnN0KSAmJiBudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAwOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoZmlyc3QpKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAxOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoZmlyc3QucGVuYWx0eVBvaW50cyAhPT0gc2Vjb25kLnBlbmFsdHlQb2ludHMpIHsKICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnBlbmFsdHlQb2ludHMgLSBzZWNvbmQucGVuYWx0eVBvaW50czsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gKGZpcnN0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCkgLSAoc2Vjb25kLmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCk7CiAgICAgICAgfQogICAgfQp9OwoKLyoqCiAqIEFtYWxnYW1hdGVzIHRoZSBnaXZlbiBDb21wYXJpc29uUmVzdWx0IGludG8gdGhpcyBDb21wYXJpc29uUmVzdWx0LgogKgogKiBAcGFyYW0gY29tcGFyaXNvblJlc3VsdCBUaGUgQ29tcGFyaXNvblJlc3VsdCB0byBpbmNsdWRlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5wcm90b3R5cGUuYWRkQ29tcGFyaXNvblJlc3VsdCA9IGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHRoaXMucGVuYWx0eVBvaW50cyArPSBjb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHM7CiAgICBpZiAoY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKSB7CiAgICAgICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlOwogICAgfQp9OwoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBubyBwZW5hbHR5IHBvaW50cyBoYXZlIGJlZW4gYXNzaWduZWQgZm9yIHRoZSBjb21wYXJpc29uLgogKgogKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgY29tcGFyaXNvbiB3YXMgc3VjY2Vzc2Z1bC4KICovCkNvbXBhcmlzb25SZXN1bHQucHJvdG90eXBlLmlzU3VjY2Vzc2Z1bCA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZCh0aGlzLnBlbmFsdHlQb2ludHMpIHx8IHRoaXMucGVuYWx0eVBvaW50cyA9PT0gMDsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gc2ltcGxlIG9iamVjdHMgKFN0cmluZ3xOdW1iZXIpIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybwogKiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIGN1cnJlbnQgdmFsdWUuCiAqIEBwYXJhbSBzdG9yZWRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIHN0b3JlZCB2YWx1ZS4KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0LgogKi8KU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlID0gZnVuY3Rpb24gKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUsIGNvbmZpZykgewogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlN0cmluZ0NvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOnN0b3JlZFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoc3RvcmVkVmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOmNvbmZpZzogIiArIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpOwogICAgfQogICAgaWYgKGNvbmZpZy5wZW5hbHR5UG9pbnRzID09PSAwKSB7CiAgICAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUzsKICAgIH0KCiAgICBpZiAoIW51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgfHwgY3VycmVudFZhbHVlICE9PSBzdG9yZWRWYWx1ZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoIW51bGxPclVuZGVmaW5lZChjdXJyZW50VmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KHRydWUpOwogICAgfQoKICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7Cn07CgovKioKICogQ29tcGFyZXMgdHdvIHNjcmVlbnMgYW5kIGlmIHRoZXkgYXJlIGVxdWFsIHRoZW4gcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB6ZXJvIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLAogKiBvdGhlcndpc2UgcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiB7CiAqICAgICAgICAgICAgInNjcmVlbldpZHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBoZWlnaHQuCiAqICAgICAgICAgICAgInNjcmVlbkNvbG91ckRlcHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBjb2xvdXIgZGVwdGguCiAqICAgICAgICB9CiAqIEBwYXJhbSBzdG9yZWRWYWx1ZTogewogKiAgICAgICAgICAgICJzY3JlZW5XaWR0aCI6IChOdW1iZXIpIFRoZSBzdG9yZWQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIHN0b3JlZCBjbGllbnQgc2NyZWVuIGhlaWdodC4KICogICAgICAgICAgICAic2NyZWVuQ29sb3VyRGVwdGgiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGNsaWVudCBzY3JlZW4gY29sb3VyIGRlcHRoLgogKiAgICAgICAgfQogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgInBlbmFsdHlQb2ludHMiOiAoTnVtYmVyKSBUaGUgbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzLgogKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovClNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTY3JlZW5Db21wYXJhdG9yLmNvbXBhcmU6Y3VycmVudFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICBjdXJyZW50VmFsdWUgPSB7c2NyZWVuV2lkdGg6IG51bGwsIHNjcmVlbkhlaWdodDogbnVsbCwgc2NyZWVuQ29sb3VyRGVwdGg6IG51bGx9OwogICAgfQogICAgaWYgKG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBzdG9yZWRWYWx1ZSA9IHtzY3JlZW5XaWR0aDogbnVsbCwgc2NyZWVuSGVpZ2h0OiBudWxsLCBzY3JlZW5Db2xvdXJEZXB0aDogbnVsbH07CiAgICB9CgogICAgdmFyIGNvbXBhcmlzb25SZXN1bHRzID0gWwogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuV2lkdGgsIHN0b3JlZFZhbHVlLnNjcmVlbldpZHRoLCBjb25maWcpLAogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuSGVpZ2h0LCBzdG9yZWRWYWx1ZS5zY3JlZW5IZWlnaHQsIGNvbmZpZyksCiAgICAgICAgU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlKGN1cnJlbnRWYWx1ZS5zY3JlZW5Db2xvdXJEZXB0aCwgc3RvcmVkVmFsdWUuc2NyZWVuQ29sb3VyRGVwdGgsIGNvbmZpZyldOwoKICAgIGlmIChhbGwoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKSkgewogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChhbnkoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSkpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgfQp9OwoKLyoqCiAqIFNwbGl0cyBib3RoIHZhbHVlcyB1c2luZyBkZWxpbWl0ZXIsIHRyaW1zIGV2ZXJ5IHZhbHVlIGFuZCBjb21wYXJlcyBjb2xsZWN0aW9ucyBvZiB2YWx1ZXMuCiAqIFJldHVybnMgemVyby1yZXN1bHQgZm9yIHNhbWUgbXVsdGktdmFsdWUgYXR0cmlidXRlcy4KICoKICogSWYgY29sbGVjdGlvbnMgYXJlIG5vdCBzYW1lIGNoZWNrcyBpZiBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaXMgbGVzcyBvciBlcXVhbCBtYXhEaWZmZXJlbmNlcyBvcgogKiBwZXJjZW50YWdlIG9mIGRpZmZlcmVuY2UgaXMgbGVzcyBvciBlcXVhbCBtYXhQZXJjZW50YWdlRGlmZmVyZW5jZS4KICoKICogSWYgeWVzIHRoZW4gcmV0dXJucyB6ZXJvLXJlc3VsdCB3aXRoIGFkZGl0aW9uYWwgaW5mbywgZWxzZSByZXR1cm5zIHBlbmFsdHlQb2ludHMtcmVzdWx0LgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlOiAoU3RyaW5nKSBUaGUgc3RvcmVkIHZhbHVlLgogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgIm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlIjogKE51bWJlcikgVGhlIG1heCBkaWZmZXJlbmNlIHBlcmNlbnRhZ2UgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgaXMgYXNzaWduZWQuCiAqICAgICAgICAgICAgIm1heERpZmZlcmVuY2VzIjogKE51bWJlcikgVGhlIG1heCBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgcG9pbnRzIGFyZSBhc3NpZ25lZC4KICogICAgICAgICAgICAicGVuYWx0eVBvaW50cyI6IChOdW1iZXIpIFRoZSBudW1iZXIgb2YgcGVuYWx0eSBwb2ludHMuCiAgKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovCk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgdmFyIGRlbGltaXRlciA9ICI7IiwKICAgICAgICBjdXJyZW50VmFsdWVzID0gc3BsaXRBbmRUcmltKGN1cnJlbnRWYWx1ZSwgZGVsaW1pdGVyKSwKICAgICAgICBzdG9yZWRWYWx1ZXMgPSBzcGxpdEFuZFRyaW0oc3RvcmVkVmFsdWUsIGRlbGltaXRlciksCiAgICAgICAgbWF4TnVtYmVyT2ZFbGVtZW50cyA9IE1hdGgubWF4KGN1cnJlbnRWYWx1ZXMubGVuZ3RoLCBzdG9yZWRWYWx1ZXMubGVuZ3RoKSwKICAgICAgICBudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9IGNhbGN1bGF0ZUludGVyc2VjdGlvbihjdXJyZW50VmFsdWVzLCBzdG9yZWRWYWx1ZXMpLmxlbmd0aCwKICAgICAgICBudW1iZXJPZkRpZmZlcmVuY2VzID0gbWF4TnVtYmVyT2ZFbGVtZW50cyAtIG51bWJlck9mVGhlU2FtZUVsZW1lbnRzLAogICAgICAgIHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzID0gY2FsY3VsYXRlUGVyY2VudGFnZShudW1iZXJPZkRpZmZlcmVuY2VzLCBtYXhOdW1iZXJPZkVsZW1lbnRzKTsKCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKHN0b3JlZFZhbHVlKSAmJiAhbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UobnVtYmVyT2ZUaGVTYW1lRWxlbWVudHMgKyAiIG9mICIgKyBtYXhOdW1iZXJPZkVsZW1lbnRzICsgIiBhcmUgc2FtZSIpOwogICAgfQoKICAgIGlmIChtYXhOdW1iZXJPZkVsZW1lbnRzID09PSAwKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBubyBhdHRyaWJ1dGVzIGZvdW5kIGluIGJvdGggcHJvZmlsZXMiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9PT0gbWF4TnVtYmVyT2ZFbGVtZW50cykgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJJZ25vcmVkIGJlY2F1c2UgYWxsIGF0dHJpYnV0ZXMgYXJlIHNhbWUiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZkRpZmZlcmVuY2VzID4gY29uZmlnLm1heERpZmZlcmVuY2VzKSB7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJXb3VsZCBiZSBpZ25vcmVkIGlmIG5vdCBtb3JlIHRoYW4gIiArIGNvbmZpZy5tYXhEaWZmZXJlbmNlcyArICIgZGlmZmVyZW5jZXMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KCiAgICBpZiAocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgPiBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgKyAiIHBlcmNlbnRzIGFyZSBkaWZmZXJlbnQiKTsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIldvdWxkIGJlIGlnbm9yZWQgaWYgbm90IG1vcmUgdGhhbiAiICsgY29uZmlnLm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlICsgIiBwZXJjZW50Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChjb25maWcucGVuYWx0eVBvaW50cyk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBudW1iZXIgb2YgZGlmZmVyZW5jZXMoIiArIG51bWJlck9mRGlmZmVyZW5jZXMgKyAiKSBub3QgbW9yZSB0aGFuICIKICAgICAgICAgICAgKyBjb25maWcubWF4RGlmZmVyZW5jZXMpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzICsgIiBwZXJjZW50cyBhcmUgZGlmZmVyZW50Iik7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBub3QgbW9yZSB0aGFuICIgKyBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UgKyAiIHBlcmNlbnQiKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdCh0cnVlKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gVXNlciBBZ2VudCBTdHJpbmdzIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybyBwZW5hbHR5CiAqIHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlIChTdHJpbmcpIFRoZSBzdG9yZWQgdmFsdWUuCiAqIEBwYXJhbSBjb25maWc6IHsKICogICAgICAgICAgICAiaWdub3JlVmVyc2lvbiI6IChib29sZWFuKSBJZiB0aGUgdmVyc2lvbiBudW1iZXJzIGluIHRoZSBVc2VyIEFnZW50IFN0cmluZ3Mgc2hvdWxkIGJlIGlnbm9yZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb21wYXJpc29uLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBBIENvbXBhcmlzb25SZXN1bHQuCiAqLwpVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiVXNlckFnZW50Q29tcGFyYXRvci5jb21wYXJlOmN1cnJlbnRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgaWYgKGNvbmZpZy5pZ25vcmVWZXJzaW9uKSB7CiAgICAgICAgLy8gcmVtb3ZlIHZlcnNpb24gbnVtYmVyCiAgICAgICAgY3VycmVudFZhbHVlID0gbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgPyBudWxsIDogY3VycmVudFZhbHVlLnJlcGxhY2UoL1tcZFwuXSsvZywgIiIpLnRyaW0oKTsKICAgICAgICBzdG9yZWRWYWx1ZSA9IG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkgPyBudWxsIDogc3RvcmVkVmFsdWUucmVwbGFjZSgvW1xkXC5dKy9nLCAiIikudHJpbSgpOwogICAgfQoKICAgIHJldHVybiBTY2FsYXJDb21wYXJhdG9yLmNvbXBhcmUoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gbG9jYXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50IGEgZGVncmVlIG9mIGRpZmZlcmVuY2UuCiAqCiAqIEBwYXJhbSBjdXJyZW50VmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgY3VycmVudCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGN1cnJlbnQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcGFyYW0gc3RvcmVkVmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxhdGl0dWRlLgogKiAgICAgICAgICAgICJsb25naXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJhbGxvd2VkUmFuZ2UiOiAoTnVtYmVyKSBUaGUgbWF4IGRpZmZlcmVuY2UgYWxsb3dlZCBpbiB0aGUgdHdvIGxvY2F0aW9ucywgYmVmb3JlIHRoZSBwZW5hbHR5IGlzIGFzc2lnbmVkLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KKiAgICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0CiAqLwpHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiR2VvbG9jYXRpb25Db21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICAvLyBDaGVjayBmb3IgdW5kZWZpbmVkIHN0b3JlZCBvciBjdXJyZW50IGxvY2F0aW9ucwoKICAgIGlmICh1bmRlZmluZWRMb2NhdGlvbihjdXJyZW50VmFsdWUpICYmIHVuZGVmaW5lZExvY2F0aW9uKHN0b3JlZFZhbHVlKSkgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CiAgICBpZiAodW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiAhdW5kZWZpbmVkTG9jYXRpb24oc3RvcmVkVmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KICAgIGlmICghdW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiB1bmRlZmluZWRMb2NhdGlvbihzdG9yZWRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgLy8gQm90aCBsb2NhdGlvbnMgZGVmaW5lZCwgdGhlcmVmb3JlIHBlcmZvcm0gY29tcGFyaXNvbgoKICAgIHZhciBkaXN0YW5jZSA9IGNhbGN1bGF0ZURpc3RhbmNlKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUpOwoKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJEaXN0YW5jZSBiZXR3ZWVuICgiICsgY3VycmVudFZhbHVlLmxhdGl0dWRlICsgIiwiICsgY3VycmVudFZhbHVlLmxvbmdpdHVkZSArICIpIGFuZCAoIiArCiAgICAgICAgICAgIHN0b3JlZFZhbHVlLmxhdGl0dWRlICsgIiwiICsgc3RvcmVkVmFsdWUubG9uZ2l0dWRlICsgIikgaXMgIiArIGRpc3RhbmNlICsgIiBtaWxlcyIpOwogICAgfQoKICAgIGlmIChwYXJzZUZsb2F0KGRpc3RhbmNlLnRvUHJlY2lzaW9uKDUpKSA9PT0gMCkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJMb2NhdGlvbiBpcyB0aGUgc2FtZSIpOwogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CgogICAgaWYgKGRpc3RhbmNlIDw9IGNvbmZpZy5hbGxvd2VkUmFuZ2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlRvbGVyYXRlZCBiZWNhdXNlIGRpc3RhbmNlIG5vdCBtb3JlIHRoZW4gIiArIGNvbmZpZy5hbGxvd2VkUmFuZ2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiV291bGQgYmUgaWdub3JlZCBpZiBkaXN0YW5jZSBub3QgbW9yZSB0aGVuICIgKyBjb25maWcuYWxsb3dlZFJhbmdlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KfTsKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi8vICAgICAgICAgICAgICAgICAgICBEZXZpY2UgUHJpbnQgTG9naWMgLSBETyBOT1QgTU9ESUZZICAgICAgICAgICAgICAgICAgICAgLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwoKLy8gVXRpbGl0eSBmdW5jdGlvbnMKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgZXZhbHVhdGluZyBmdW5jdGlvbiBmIG9uIGVhY2ggZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYWxsID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn07CgovKioKICogUmV0dXJucyB0cnVlIGlmIGV2YWx1YXRpbmcgZnVuY3Rpb24gZiBvbiBhbnkgZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYW55ID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGxvY2F0aW9uIGlzIG51bGwgb3IgaGFzIHVuZGVmaW5lZCBsb25naXR1ZGUgb3IgbGF0aXR1ZGUgdmFsdWVzLgogKgogKiBAcGFyYW0gbG9jYXRpb246IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBsb25naXR1ZGUuCiAqICAgICAgICB9CiAqIEByZXR1cm4gYm9vbGVhbgogKi8KdW5kZWZpbmVkTG9jYXRpb24gPSBmdW5jdGlvbihsb2NhdGlvbikgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZChsb2NhdGlvbikgfHwgbnVsbE9yVW5kZWZpbmVkKGxvY2F0aW9uLmxhdGl0dWRlKSB8fCBudWxsT3JVbmRlZmluZWQobG9jYXRpb24ubG9uZ2l0dWRlKTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLgogKgogKiBAcGFyYW0gdmFsdWU6IGEgdmFsdWUgb2YgYW55IHR5cGUKICogQHJldHVybiBib29sZWFuCiAqLwpudWxsT3JVbmRlZmluZWQgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7Cn07CgovKioKICogQ2FsY3VsYXRlcyB0aGUgZGlzdGFuY2VzIGJldHdlZW4gdGhlIHR3byBsb2NhdGlvbnMuCiAqCiAqIEBwYXJhbSBmaXJzdDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBmaXJzdCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGZpcnN0IGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIHNlY29uZDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcmV0dXJuIE51bWJlciBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdHdvIGxvY2F0aW9ucy4KICovCmNhbGN1bGF0ZURpc3RhbmNlID0gZnVuY3Rpb24oZmlyc3QsIHNlY29uZCkgewogICAgdmFyIGZhY3RvciA9IChNYXRoLlBJIC8gMTgwKSwKICAgICAgICB0aGV0YSwKICAgICAgICBkaXN0OwogICAgZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkZWdyZWVzKSB7CiAgICAgICAgcmV0dXJuIGRlZ3JlZXMgKiBmYWN0b3I7CiAgICB9CiAgICBmdW5jdGlvbiByYWRpYW5zVG9EZWdyZWVzKHJhZGlhbnMpIHsKICAgICAgICByZXR1cm4gcmFkaWFucyAvIGZhY3RvcjsKICAgIH0KICAgIHRoZXRhID0gZmlyc3QubG9uZ2l0dWRlIC0gc2Vjb25kLmxvbmdpdHVkZTsKICAgIGRpc3QgPSBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKyBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHRoZXRhKSk7CiAgICBkaXN0ID0gTWF0aC5hY29zKGRpc3QpOwogICAgZGlzdCA9IHJhZGlhbnNUb0RlZ3JlZXMoZGlzdCk7CiAgICBkaXN0ID0gZGlzdCAqIDYwICogMS4xNTE1OwogICAgcmV0dXJuIGRpc3Q7Cn07CgovKioKICogQ29udmVydHMgYSBTdHJpbmcgaG9sZGluZyBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMgaW50byBhbiBhcnJheS4KICoKICogQHBhcmFtIHRleHQgKFN0cmluZykgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMuCiAqIEBwYXJhbSBkZWxpbWl0ZXIgKFN0cmluZykgVGhlIGNoYXJhY3RlciBkZWxpbWl0aW5nIHZhbHVlcyB3aXRoaW4gdGhlIHRleHQgU3RyaW5nLgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMuCiAqLwpzcGxpdEFuZFRyaW0gPSBmdW5jdGlvbih0ZXh0LCBkZWxpbWl0ZXIpIHsKCiAgICB2YXIgcmVzdWx0cyA9IFtdLAogICAgICAgIGksCiAgICAgICAgdmFsdWVzLAogICAgICAgIHZhbHVlOwogICAgaWYgKHRleHQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KCiAgICB2YWx1ZXMgPSB0ZXh0LnNwbGl0KGRlbGltaXRlcik7CiAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFsdWUgPSB2YWx1ZXNbaV0udHJpbSgpOwogICAgICAgIGlmICh2YWx1ZSAhPT0gIiIpIHsKICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdHM7Cn07CgovKioKICogQ29udmVydHMgdmFsdWUgdG8gYSBwZXJjZW50YWdlIG9mIHJhbmdlLgogKgogKiBAcGFyYW0gdmFsdWUgKE51bWJlcikgVGhlIGFjdHVhbCBudW1iZXIgdG8gYmUgY29udmVydGVkIHRvIGEgcGVyY2VudGFnZS4KICogQHBhcmFtIHJhbmdlIChOdW1iZXIpIFRoZSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzIChpLmUuIHJlcHJlc2VudHMgMTAwJSkuCiAqIEByZXR1cm4gKE51bWJlcikgVGhlIHBlcmNlbnRhZ2UuCiAqLwpjYWxjdWxhdGVQZXJjZW50YWdlID0gZnVuY3Rpb24odmFsdWUsIHJhbmdlKSB7CiAgICBpZiAocmFuZ2UgPT09IDApIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBwYXJzZUZsb2F0KCh2YWx1ZSAvIHJhbmdlKS50b1ByZWNpc2lvbigyKSkgKiAxMDA7Cn07CgovKioKICogQ3JlYXRlcyBhIG5ldyBhcnJheSBjb250YWluaW5nIG9ubHkgdGhvc2UgZWxlbWVudHMgZm91bmQgaW4gYm90aCBhcnJheXMgcmVjZWl2ZWQgYXMgYXJndW1lbnRzLgogKgogKiBAcGFyYW0gZmlyc3QgKEFycmF5KSBUaGUgZmlyc3QgYXJyYXkuCiAqIEBwYXJhbSBzZWNvbmQgKEFycmF5KSBUaGUgc2Vjb25kIGFycmF5LgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGVsZW1lbnRzIHRoYXQgZm91bmQgaW4gZmlyc3QgYW5kIHNlY29uZC4KICovCmNhbGN1bGF0ZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGZpcnN0LCBzZWNvbmQpIHsKICAgIHJldHVybiBmaXJzdC5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgIHJldHVybiBzZWNvbmQuaW5kZXhPZihlbGVtZW50KSAhPT0gLTE7CiAgICB9KTsKfTsKCmZ1bmN0aW9uIGdldFZhbHVlKG9iaiwgYXR0cmlidXRlUGF0aCkgewogICAgdmFyIHZhbHVlID0gb2JqLAogICAgICAgIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cmlidXRlUGF0aC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICB2YWx1ZSA9IHZhbHVlW2F0dHJpYnV0ZVBhdGhbaV1dOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwp9CgoKZnVuY3Rpb24gaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWcpIHsKICAgIHJldHVybiBhdHRyaWJ1dGVDb25maWcuY29tcGFyYXRvciAhPT0gdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcsIGF0dHJpYnV0ZVBhdGgpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBbXSwKICAgICAgICBhdHRyaWJ1dGVOYW1lLAogICAgICAgIGF0dHJQYXRocywKICAgICAgICBhdHRyUGF0aCwKICAgICAgICBpOwoKICAgIGZvciAoYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVDb25maWcpIHsKICAgICAgICBpZiAoYXR0cmlidXRlQ29uZmlnLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZU5hbWUpKSB7CgogICAgICAgICAgICBpZiAoaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWdbYXR0cmlidXRlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBhdHRyUGF0aCA9IGF0dHJpYnV0ZVBhdGguc2xpY2UoKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRoLnB1c2goYXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVQYXRocy5wdXNoKGF0dHJQYXRoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJQYXRoID0gYXR0cmlidXRlUGF0aC5zbGljZSgpOwogICAgICAgICAgICAgICAgYXR0clBhdGgucHVzaChhdHRyaWJ1dGVOYW1lKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRocyA9IGdldEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZ1thdHRyaWJ1dGVOYW1lXSwgYXR0clBhdGgpOwogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGF0dHJQYXRocy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVBhdGhzLnB1c2goYXR0clBhdGhzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYXR0cmlidXRlUGF0aHM7Cn0KCmZ1bmN0aW9uIGdldERldmljZVByaW50QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnKSB7CiAgICByZXR1cm4gZ2V0QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnLCBbXSk7Cn0KCmZ1bmN0aW9uIGhhc1JlcXVpcmVkQXR0cmlidXRlcyhkZXZpY2VQcmludCwgYXR0cmlidXRlQ29uZmlnKSB7CgogICAgdmFyIGF0dHJpYnV0ZVBhdGhzID0gZ2V0RGV2aWNlUHJpbnRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcpLAogICAgICAgIGksCiAgICAgICAgYXR0clZhbHVlLAogICAgICAgIGF0dHJDb25maWc7CgogICAgZm9yIChpID0gMDsgaSA8IGF0dHJpYnV0ZVBhdGhzLmxlbmd0aDsgaSsrKSB7CgogICAgICAgIGF0dHJWYWx1ZSA9IGdldFZhbHVlKGRldmljZVByaW50LCBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICBpZiAoYXR0ckNvbmZpZy5yZXF1aXJlZCAmJiBhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBsb2dnZXIud2FybmluZygiRGV2aWNlIFByaW50IHByb2ZpbGUgbWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUsICIgKyBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZSBwcmludCBoYXMgcmVxdWlyZWQgYXR0cmlidXRlcyIpOwogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGF0dHJpYnV0ZUNvbmZpZywgZGV2aWNlUHJpbnQsIGRldmljZVByaW50UHJvZmlsZXMsIG1heFBlbmFsdHlQb2ludHMpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBnZXREZXZpY2VQcmludEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZyksCiAgICAgICAgZGFvID0gc2hhcmVkU3RhdGUuZ2V0KCdfRGV2aWNlSWREYW8nKSwKICAgICAgICByZXN1bHRzLAogICAgICAgIGosCiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQsCiAgICAgICAgaSwKICAgICAgICBjdXJyZW50VmFsdWUsCiAgICAgICAgc3RvcmVkVmFsdWUsCiAgICAgICAgYXR0ckNvbmZpZywKICAgICAgICBjb21wYXJpc29uUmVzdWx0LAogICAgICAgIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICBzZWxlY3RlZFByb2ZpbGUsCiAgICAgICAgY3VyRGV2aWNlUHJpbnRQcm9maWxlLAogICAgICAgIHZhbHM7CgogICAgcmVzdWx0cyA9IFtdOwogICAgZm9yIChqID0gMDsgaiA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBjdXJEZXZpY2VQcmludFByb2ZpbGUgPSBKU09OLnBhcnNlKG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvbihkZXZpY2VQcmludFByb2ZpbGVzW2pdKSk7CiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQgPSBuZXcgQ29tcGFyaXNvblJlc3VsdCgpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdHRyaWJ1dGVQYXRocy5sZW5ndGg7IGkrKykgewoKICAgICAgICAgICAgY3VycmVudFZhbHVlID0gZ2V0VmFsdWUoZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgc3RvcmVkVmFsdWUgPSBnZXRWYWx1ZShjdXJEZXZpY2VQcmludFByb2ZpbGUuZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICAgICAgaWYgKHN0b3JlZFZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb21wYXJpc29uUmVzdWx0ID0gbmV3IENvbXBhcmlzb25SZXN1bHQoYXR0ckNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbXBhcmlzb25SZXN1bHQgPSBhdHRyQ29uZmlnLmNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBhdHRyQ29uZmlnLmFyZ3MpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJDb21wYXJpbmcgYXR0cmlidXRlIHBhdGg6ICIgKyBhdHRyaWJ1dGVQYXRoc1tpXQogICAgICAgICAgICAgICAgICAgICsgIiwgQ29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkgKyAiLCBwZW5hbHR5UG9pbnRzPSIKICAgICAgICAgICAgICAgICAgICArIGNvbXBhcmlzb25SZXN1bHQucGVuYWx0eVBvaW50cyArICIsIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU9IgogICAgICAgICAgICAgICAgICAgICsgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5hZGRDb21wYXJpc29uUmVzdWx0KGNvbXBhcmlzb25SZXN1bHQpOwogICAgICAgIH0KICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIkFnZ3JlZ2F0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKSArICIsIHBlbmFsdHlQb2ludHM9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICAgICArIGFnZ3JlZ2F0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmVzdWx0cy5wdXNoKHsKICAgICAgICAgICAga2V5OiBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICAgICAgdmFsdWU6IGRldmljZVByaW50UHJvZmlsZXNbal0KICAgICAgICB9KTsKICAgIH0KCiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXN1bHRzLnNvcnQoZnVuY3Rpb24oYSwgYikgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUoYS5rZXksIGIua2V5KTsKICAgIH0pOwogICAgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0ID0gcmVzdWx0c1swXS5rZXk7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU2VsZWN0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKQogICAgICAgICAgICArICIsIHBlbmFsdHlQb2ludHM9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgfQoKICAgIHNlbGVjdGVkUHJvZmlsZSA9IG51bGw7CiAgICBpZiAoc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgPD0gbWF4UGVuYWx0eVBvaW50cykgewogICAgICAgIHNlbGVjdGVkUHJvZmlsZSA9IHJlc3VsdHNbMF0udmFsdWU7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTZWxlY3RlZCBwcm9maWxlOiAiICsgc2VsZWN0ZWRQcm9maWxlICsKICAgICAgICAgICAgICAgICIgd2l0aCAiICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgKyAiIHBlbmFsdHkgcG9pbnRzIik7CiAgICAgICAgfQogICAgfQoKICAgIGlmIChzZWxlY3RlZFByb2ZpbGUgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyogdXBkYXRlIHByb2ZpbGUgKi8KICAgIHNlbGVjdGVkUHJvZmlsZS5wdXQoInNlbGVjdGlvbkNvdW50ZXIiLAogICAgICAgIGphdmEubGFuZy5JbnRlZ2VyLnZhbHVlT2YocGFyc2VJbnQoc2VsZWN0ZWRQcm9maWxlLmdldCgic2VsZWN0aW9uQ291bnRlciIpLCAxMCkgKyAxKSk7CiAgICBzZWxlY3RlZFByb2ZpbGUucHV0KCJsYXN0U2VsZWN0ZWREYXRlIiwgamF2YS5sYW5nLkxvbmcudmFsdWVPZihuZXcgRGF0ZSgpLmdldFRpbWUoKSkpOwogICAgc2VsZWN0ZWRQcm9maWxlLnB1dCgiZGV2aWNlUHJpbnQiLCBkZXZpY2VQcmludCk7CgogICAgdmFscyA9IFtdOwogICAgZm9yIChpID0gMDsgaSA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YWxzLnB1c2gob3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uKGRldmljZVByaW50UHJvZmlsZXNbaV0pKTsKICAgIH0KCiAgICBkYW8uc2F2ZURldmljZVByb2ZpbGVzKHVzZXJuYW1lLCByZWFsbSwgdmFscyk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIG1hdGNoRGV2aWNlUHJpbnQoKSB7CgogICAgaWYgKCF1c2VybmFtZSkgewogICAgICAgIGxvZ2dlci5lcnJvcigiVXNlcm5hbWUgbm90IHNldC4gQ2Fubm90IGNvbXBhcmUgdXNlcidzIGRldmljZSBwcmludCBwcm9maWxlcy4iKTsKICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICB9IGVsc2UgewoKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImNsaWVudCBkZXZpY2VQcmludDogIiArIGNsaWVudFNjcmlwdE91dHB1dERhdGEpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGdldFByb2ZpbGVzID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRXhwaXJlZFByb2ZpbGUoZGV2aWNlUHJpbnRQcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cGlyYXRpb25EYXRlID0gbmV3IERhdGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNlbGVjdGVkRGF0ZTsKICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uRGF0ZS5zZXREYXRlKGV4cGlyYXRpb25EYXRlLmdldERhdGUoKSAtIGNvbmZpZy5wcm9maWxlRXhwaXJhdGlvbik7CgogICAgICAgICAgICAgICAgICAgIGxhc3RTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShkZXZpY2VQcmludFByb2ZpbGUubGFzdFNlbGVjdGVkRGF0ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0U2VsZWN0ZWREYXRlIDwgZXhwaXJhdGlvbkRhdGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICBkYW8gPSBzaGFyZWRTdGF0ZS5nZXQoJ19EZXZpY2VJZERhbycpLAogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVzLAogICAgICAgICAgICAgICAgICAgICAgICBpdGVyOwoKICAgICAgICAgICAgICAgICAgICBwcm9maWxlcyA9IGRhby5nZXREZXZpY2VQcm9maWxlcyh1c2VybmFtZSwgcmVhbG0pOwoKICAgICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaXRlciA9IHByb2ZpbGVzLml0ZXJhdG9yKCk7CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgPSBpdGVyLm5leHQoKS5nZXRPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFeHBpcmVkUHJvZmlsZShwcm9maWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChwcm9maWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoInN0b3JlZCBub24tZXhwaXJlZCBwcm9maWxlczogIiArIHJlc3VsdHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRldmljZVByaW50ID0gSlNPTi5wYXJzZShjbGllbnRTY3JpcHRPdXRwdXREYXRhKSwKICAgICAgICAgICAgZGV2aWNlUHJpbnRQcm9maWxlcyA9IGdldFByb2ZpbGVzKCk7CgogICAgICAgIGlmICghaGFzUmVxdWlyZWRBdHRyaWJ1dGVzKGRldmljZVByaW50LCBjb25maWcuYXR0cmlidXRlcykpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZVByaW50Lmhhc1JlcXVpcmVkQXR0cmlidXRlczogZmFsc2UiKTsKICAgICAgICAgICAgLy8gV2lsbCBmYWlsIHRoaXMgbW9kdWxlIGJ1dCBmYWxsLXRocm91Z2ggdG8gbmV4dCBtb2R1bGUuIFdoaWNoIHNob3VsZCBiZSBPVFAuCiAgICAgICAgICAgIGF1dGhTdGF0ZSA9IEZBSUxFRDsKICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGNvbmZpZy5hdHRyaWJ1dGVzLCBkZXZpY2VQcmludCwgZGV2aWNlUHJpbnRQcm9maWxlcywgY29uZmlnLm1heFBlbmFsdHlQb2ludHMpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJkZXZpY2VQcmludC5oYXNWYWxpZFByb2ZpbGU6IHRydWUiKTsKICAgICAgICAgICAgYXV0aFN0YXRlID0gU1VDQ0VTUzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiZGV2aWNlUHJpbnQuaGFzVmFsaWRQcm9maWxlOiBmYWxzZSIpOwogICAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoJ2RldmljZVByaW50UHJvZmlsZScsIEpTT04uc3RyaW5naWZ5KGRldmljZVByaW50KSk7CiAgICAgICAgICAgIC8vIFdpbGwgZmFpbCB0aGlzIG1vZHVsZSBidXQgZmFsbC10aHJvdWdoIHRvIG5leHQgbW9kdWxlLiBXaGljaCBzaG91bGQgYmUgT1RQLgogICAgICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICAgICAgfQogICAgfQp9CgptYXRjaERldmljZVByaW50KCk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"bae52680-c1ea-4a4b-be80-25db364d822a\",\"name\":\"wks-ReadUserName\",\"description\":\"Reading userName from Query Parameter \",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKb3V0Y29tZSA9ICJmYWxzZSI7CmlmIChyZXF1ZXN0UGFyYW1ldGVycy5nZXQoInVzZXJOYW1lIikpIHsKICAgIHZhciB1c2VyTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChyZXF1ZXN0UGFyYW1ldGVycy5nZXQoInVzZXJOYW1lIikuZ2V0KDApKTsKICAgIHZhciBvYmplY3RBdHRyaWJ1dGVzID0gewogICAgICB1c2VyTmFtZTogdXNlck5hbWUKICAgIH0KICBzaGFyZWRTdGF0ZS5wdXQoIm9iamVjdEF0dHJpYnV0ZXMiLCBvYmplY3RBdHRyaWJ1dGVzKTsKICBvdXRjb21lID0gInRydWUiOwp9Ci8qCmlmIChyZXF1ZXN0UGFyYW1ldGVycy5nZXQoImVtYWlsIikpIHsKICAgIHZhciBleHRlcm5hbGVtYWlsID0gcmVxdWVzdFBhcmFtZXRlcnMuZ2V0KCJlbWFpbCIpLmdldCgwKTsKICAgIHZhciBkZWNvZGVkRW1haWwgPSBkZWNvZGVVUklDb21wb25lbnQoZXh0ZXJuYWxlbWFpbCk7CiAgICB2YXIgb2JqZWN0QXR0cmlidXRlcyA9IHsKICAgICAgZnJJbmRleGVkU3RyaW5nNTogZGVjb2RlZEVtYWlsCiAgICB9CiAgc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgb2JqZWN0QXR0cmlidXRlcyk7CiAgb3V0Y29tZSA9ICJ0cnVlIjsKfQoqLwoKCgoK\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"8862ca8f-7770-4af5-a888-ac0df0947f36\",\"name\":\"LinkedIn Profile Normalization\",\"description\":\"Normalizes raw profile data from LinkedIn\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5maXJzdE5hbWUubG9jYWxpemVkLmdldCgwKSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3ROYW1lLmxvY2FsaXplZC5nZXQoMCkpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucHJvZmlsZVBpY3R1cmUuZGlzcGxheUltYWdlKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVsZW1lbnRzLmdldCgwKS5nZXQoImhhbmRsZX4iKS5lbWFpbEFkZHJlc3MpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZWxlbWVudHMuZ2V0KDApLmdldCgiaGFuZGxlfiIpLmVtYWlsQWRkcmVzcykpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"0cc09f53-7183-4829-a93a-1b3308318ba9\",\"name\":\"havePush.js\",\"description\":\"null\",\"script\":\"dmFyIHB1c2hEZXZpY2VQcm9maWxlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKSwgInB1c2hEZXZpY2VQcm9maWxlcyIpOwppZihwdXNoRGV2aWNlUHJvZmlsZXMubGVuPjApIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7Cn0KZWxzZSB7CiAgb3V0Y29tZSA9ICJmYWxzZSI7Cgp9Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3f93ef6e-e54a-4393-aba1-f322656db28a\",\"name\":\"OAuth2 Authorize Endpoint Data Provider Script\",\"description\":\"Default global script for OAuth2 Authorize Endpoint Data Provider\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcmV0dXJuIGFkZGl0aW9uYWwgZGF0YSB3aGVuIGF1dGhvcml6ZSByZXF1ZXN0IGlzIGNhbGxlZC4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LgogKgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cwogKgogKiBsb2dnZXIgLSBEZWJ1ZyAoMykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSAiU2NyaXB0ZWRBdXRob3JpemVFbmRwb2ludERhdGFQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FVVEhPUklaRV9FTkRQT0lOVF9EQVRBX1BST1ZJREVSLgogKgogKiBzY3JpcHROYW1lIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHNjcmlwdAogKgogKiBSZXR1cm4gLSBhIE1hcDxTdHJpbmcsIFN0cmluZz4gb2YgYWRkaXRpb25hbCBkYXRhICg0KS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgzKSBEZWJ1ZyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBhdXRob3JpemUgZW5kcG9pbnQgZGF0YSBwcm92aWRlciBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCi8qIEVYQU1QTEUKdmFyIG1hcCA9IG5ldyBqYXZhLnV0aWwuSGFzaE1hcCgpOwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGEoKSB7CgogICAgLy9JZiBjb25zdGFudCBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkCiAgICBtYXAucHV0KCJoZWxsbyIsICJ3b3JsZCIpOwoKICAgIC8vSWYgc29tZSBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkIGZyb20gdGhpcmQgcGFydHkgc2VydmljZQogICAgYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCk7CgogICAgLy9JZiB0aGVyZSBpcyBhIG5lZWQgdG8gcmV0dXJuIHNvbWUgdXNlciBzZXNzaW9uIGRhdGEKICAgIGFkZEFkZGl0aW9uYWxEYXRhRnJvbVNlc3Npb25Qcm9wZXJ0aWVzKCkKCiAgICByZXR1cm4gbWFwOwp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCkgewogIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLlNlcnZlckV4Y2VwdGlvbgogICAgKTsKICB0cnkgewogICAgICAgIC8vT2J0YWluIGFkZGl0aW9uYWwgZGF0YSBieSBwZXJmb3JtaW5nIGEgUkVTVCBjYWxsIHRvIGFuIGV4dGVybmFsIHNlcnZpY2UKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgICAgIHJlcXVlc3Quc2V0VXJpKCJodHRwczovL3RoaXJkLnBhcnR5LmFwcC9oZWxsby5qc3AiKTsKICAgICAgICByZXF1ZXN0LnNldE1ldGhvZCgiUE9TVCIpOwogICAgICAgIC8vcmVxdWVzdC5zZXRFbnRpdHkoImZvbz1iYXImaGVsbG89d29ybGQiKTsKICAgICAgICByZXF1ZXN0LnNldEVudGl0eShqc29uKG9iamVjdCgKICAgICAgICAgICAgICAgICAgICBmaWVsZCgiZm9vIiwgImJhciIpKSkpOwogICAgICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXRPclRocm93KCk7CiAgICAgICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwogICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICBtYXAucHV0KCJzb21lS2V5IixyZXN1bHQuZ2V0KCJzb21lS2V5IikpOwogIH0gY2F0Y2ggKGVycikgewogICAgIHRocm93IG5ldyBmckphdmEuU2VydmVyRXhjZXB0aW9uKGVycik7CiAgfQp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tU2Vzc2lvblByb3BlcnRpZXMoKSB7CiAgLy9BZGQgYWRkaXRpb25hbCBkYXRhIGZyb20gc2Vzc2lvbiBwcm9wZXJ0eSB2YWx1ZXMKICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeyAvLyBzZXNzaW9uIGlzIG5vdCBhdmFpbGFibGUgZm9yIHJlc291cmNlIG93bmVyIHBhc3N3b3JkIGNyZWRlbnRpYWxzIGdyYW50CiAgICAgbWFwLnB1dCgiaXBBZGRyZXNzIiwgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgiSG9zdCIpKQogICB9Cn07CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKSk7Cn07CgphZGRBZGRpdGlvbmFsRGF0YSgpOwoqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e232cff3-2460-47cd-80b2-36c86c0d0f06\",\"name\":\"Alpha endUserUIClient OAuth2 Access Token Modification Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBpZiAoc2NvcGVzLmNvbnRhaW5zKCdmcjphdXRvYWNjZXNzOionKSB8fCBzY29wZXMuY29udGFpbnMoJ2ZyOmlnYToqJykgfHwgc2NvcGVzLmNvbnRhaW5zKCdmcjppZGM6YW5hbHl0aWNzOionKSkgewogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBjb20uc3VuLmlkZW50aXR5LmlkbS5JZFR5cGUKICAgICk7CiAgICB2YXIgZ3JvdXBzID0gW107CiAgICBpZGVudGl0eS5nZXRNZW1iZXJzaGlwcyhmci5JZFR5cGUuR1JPVVApLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkgewogICAgICBncm91cHMucHVzaChncm91cC5nZXRBdHRyaWJ1dGUoJ2NuJykudG9BcnJheSgpWzBdKTsKICAgIH0pOwogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ2dyb3VwcycsIGdyb3Vwcyk7CiAgfQp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6aa47a41-af3d-4df3-a7a1-b1766cfeaf6b\",\"name\":\"wks-NEO-Twillio\",\"description\":\"null\",\"script\":\"LyoqCiAqIEBmaWxlIFRoaXMgc2NyaXB0IGRlbGl2ZXJzIGEgbWVzc2FnZSB3aXRoIHZhbHVlcyBmcm9tIHNoYXJlZCBzdGF0ZSB2aWEgVHdpbGlvIFNNUywgdXNpbmcgdGhlIGN1cnJlbnQgdXNlcidzIHRlbGVwaG9uZU51bWJlcgogKiBAdmVyc2lvbiAwLjEuMQogKiBAa2V5d29yZHMgc21zIG90cCBtZmEgdHdpbGlvIAogKi8KCi8qKgogKiBFbnZpcm9ubWVudCBzcGVjaWZpYyBUd2lsaW8gY29uZmlnIAogKi8KCnZhciB0d2lsaW9BY2NvdW50U2lkID0gIjxzZWNyZXQ+IjsgICAKdmFyIHR3aWxpb0FwaUtleVNpZCA9ICI8c2VjcmV0PiI7CnZhciB0d2lsaW9BcGlLZXlTZWNyZXQgPSAiPHNlY3JldD4iOwp2YXIgdHdpbGlvTWVzc2FnaW5nU2VydmljZVNpZCA9ICI8c2VjcmV0PiI7CnZhciB0d2lsaW9QaG9uZU51bWJlckZyb20gPSAiPHNlY3JldD4iOyAgICAKCi8qKgogKiBGdWxsIENvbmZpZ3VyYXRpb24gCiAqLwoKdmFyIGNvbmZpZyA9IHsKICAgIGFjY291bnRTaWQ6IHR3aWxpb0FjY291bnRTaWQsICAgIAogICAgYXBpS2V5U2lkOiB0d2lsaW9BcGlLZXlTaWQsCiAgICBhcGlLZXlTZWNyZXQ6IHR3aWxpb0FwaUtleVNlY3JldCwKICAgIHBob25lTnVtYmVyRnJvbTogdHdpbGlvUGhvbmVOdW1iZXJGcm9tLCAKICAgIG1lc3NhZ2luZ1NlcnZpY2VTaWQ6IHR3aWxpb01lc3NhZ2luZ1NlcnZpY2VTaWQsIAogICAgYmFzZVVyaTogImh0dHBzOi8vYXBpLnR3aWxpby5jb20vMjAxMC0wNC0wMSIsCiAgICBzaGFyZWRTdGF0ZUlkRmllbGQ6ICJfaWQiLAogICAgcGhvbmVOdW1iZXJGaWVsZDogInRlbGVwaG9uZU51bWJlciIsCiAgICBtZXNzYWdlVGVtcGxhdGU6ICJZb3VyIHNlY3VyaXR5IGNvZGUgaXMge3tvbmVUaW1lUGFzc3dvcmR9fSIsCiAgICBub2RlTmFtZTogInR3aWxpb1NtcyIKfTsKCi8qKgogKiBOb2RlIG91dGNvbWVzCiAqLwoKIHZhciBOb2RlT3V0Y29tZSA9IHsKICAgIERFTElWRVJFRDogICJkZWxpdmVyZWQiLAogICAgQVVUSEZBSUxFRDogImF1dGhGYWlsZWQiLAogICAgTk9QSE9ORTogICAgIm5vUGhvbmUiLAogICAgRVJST1I6ICAgICAgImVycm9yIgp9OwoKLyoqCiAqIEV4dGVybmFsIGRlcGVuZGVuY2llcwogKi8KCnZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sudXRpbC5lbmNvZGUuQmFzZTY0LAogICAgamF2YS5sYW5nLlN0cmluZwopOwoKLyoqCiAqIEFkZCB0aGUgbm9kZSBpbmZvIHByZWZpeCB0byBhIGxvZyBtZXNzYWdlCiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gdGhlIG1lc3NhZ2UgYm9keQogKiBAcmV0dXJucyBhIHRhZ2dlZCB2ZXJzaW9uIG9mIHRoZSBtZXNzYWdlCiAqLwpmdW5jdGlvbiB0YWcobWVzc2FnZSkgewogICAgcmV0dXJuICIqKioiLmNvbmNhdChjb25maWcubm9kZU5hbWUpLmNvbmNhdCgiICIpLmNvbmNhdChtZXNzYWdlKTsKfQoKLyoqCiAqIExvZyBhbiBIVFRQIHJlc3BvbnNlCiAqIAogKiBAcGFyYW0ge1Jlc3BvbnNlfSBIVFRQIHJlc3BvbnNlIG9iamVjdAogKi8KZnVuY3Rpb24gbG9nUmVzcG9uc2UocmVzcG9uc2UpIHsKICAgIGxvZ2dlci5tZXNzYWdlKHRhZygiU2NyaXB0ZWQgTm9kZSBIVFRQIFJlc3BvbnNlOiAiICsgcmVzcG9uc2UuZ2V0U3RhdHVzKCkgKyAiLCBCb2R5OiAiICsgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpKTsKfQoKLyoqCiAqIFJlc29sdmUgaGFuZGxlYmFyIHBsYWNlaG9sZGVycyBmcm9tIHNoYXJlZCBzdGF0ZQogKiAKICogQHBhcmFtIHt0ZW1wbGF0ZX0gaGFuZGxlYmFyIHRlbXBsYXRlCiAqLwpmdW5jdGlvbiByZXNvbHZlUGxhY2Vob2xkZXJzKHRlbXBsYXRlKSB7CiAgY29uc3QgcmVnZXggPSAve3suKj99fS9nOwogIGNvbnN0IHZhcmlhYmxlcyA9IHRlbXBsYXRlLm1hdGNoKHJlZ2V4KTsKCiAgaWYgKCF2YXJpYWJsZXMpIHsKICAgIHJldHVybiB0ZW1wbGF0ZTsKICB9CiAgCiAgdmFyIHJlc3VsdCA9IHRlbXBsYXRlOwogIAogIHZhcmlhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIHN1YihlbGVtZW50KSB7IAogICAgdmFyIHZhck5hbWUgPSBlbGVtZW50LnJlcGxhY2UoL1t7fV0vZywiIik7CiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShlbGVtZW50LHNoYXJlZFN0YXRlLmdldCh2YXJOYW1lKSk7CiAgfSk7CiAgCiAgcmV0dXJuIHJlc3VsdDsKfQoKLyoqCiAqIFNlbmQgYW4gU01TIHZpYSBUd2lsaW8KICogCiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIHRleHQgb2YgdGhlIG1lc3NhZ2UgdG8gc2VuZAogKiBAcGFyYW0ge3N0cmluZ30gbnVtYmVyRnJvbSAtIFRoZSBvcmlnaW5hdGluZyBwaG9uZSBudW1iZXIvc2hvcnRjb2RlCiAqIEBwYXJhbSB7c3RyaW5nfSBudW1iZXJUbyAtIFRoZSBwaG9uZSBudW1iZXIgdG8gc2VuZCB0bwogKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnaW5nU2VydmljZVNpZCAtIFR3aWxpbyBtZXNzYWdpbmcgc2VydmljZSBTSUQKICogQHBhcmFtIHtzdHJpZ30gdXJpIC0gVGhlIFVSSSBvZiB0aGUgVHdpbGlvIEFQSSBlbmRwb2ludCAKICogQHBhcmFtIHtzdHJpbmd9IHNpZCAtIFRoZSBUd2lsaW8gYWNjb3VudCBvciBBUEkga2V5IFNJRAogKiBAcGFyYW0geyp9IHNlY3JldCAtIFRoZSBUd2lsaW8gYWNjb3VudCBhdXRoa2V5IG9yIEFQSSBrZXkgc2VjcmV0CiAqIEByZXR1cm5zIC0gQSBub2RlIG91dGNvbWUgCiAqLwpmdW5jdGlvbiBzZW5kU01TKG1lc3NhZ2UsIG51bWJlckZyb20sIG51bWJlclRvLCBtZXNzYWdpbmdTZXJ2aWNlU2lkLCB1cmksIHNpZCwgc2VjcmV0KSB7CgogICAgbG9nZ2VyLm1lc3NhZ2UodGFnKCJDYWxsaW5nIFR3aWxpbyBlbmRwb2ludCAiICsgdXJpKSk7CiAgICBsb2dnZXIubWVzc2FnZSh0YWcoIlNlbmRpbmcgdG8gIiArIG51bWJlclRvKSk7CgogICAgLy8gVHdpbGlvIHNlZW1zIG5vdCB0byBleHBlY3QgdGhlIGZvcm0gdmFsdWVzIHRvIGJlIFVSTCBlbmNvZGVkCgogICAgY29uc3QgcmVxdWVzdEJvZHkgPSAiQm9keT0iLmNvbmNhdChlbmNvZGVVUklDb21wb25lbnQobWVzc2FnZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoIiZGcm9tPSIpLmNvbmNhdChudW1iZXJGcm9tKSAgCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoIiZUbz0iKS5jb25jYXQobnVtYmVyVG8pCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoIiZNZXNzYWdpbmdTZXJ2aWNlU2lkPSIpLmNvbmNhdChtZXNzYWdpbmdTZXJ2aWNlU2lkKTsKICAKICAgIGxvZ2dlci5tZXNzYWdlKHRhZygiTWVzc2FnZSBib2R5ICIgKyByZXF1ZXN0Qm9keSkpOwoKICAgIGNvbnN0IGJhc2ljQXV0aCA9IGZyLkJhc2U2NC5lbmNvZGUoZnIuU3RyaW5nKHNpZC5jb25jYXQoIjoiKS5jb25jYXQoc2VjcmV0KSkuZ2V0Qnl0ZXMoKSk7CiAgICAKICAgIHZhciByZXNwb25zZTsKCiAgICB0cnkgewogICAgICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIlBPU1QiKTsKICAgICAgICByZXF1ZXN0LnNldFVyaSh1cmkpOwogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIgKyBiYXNpY0F1dGgpOwogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgcmVxdWVzdC5nZXRFbnRpdHkoKS5zZXRTdHJpbmcocmVxdWVzdEJvZHkpOwoKICAgICAgICByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIH0KICAgIGNhdGNoIChlKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKHRhZygiRXhjZXB0aW9uIGNhbGxpbmcgdHdpbGlvIGVuZHBvaW50ICIgKyBlKSk7CiAgICAgICAgcmV0dXJuIE5vZGVPdXRjb21lLkVSUk9SOwogICAgfQoKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLmdldFN0YXR1cygpLmdldENvZGUoKTsKCiAgICBpZiAoc3RhdHVzID09PSA0MDEpIHsKICAgICAgICBsb2dnZXIuZXJyb3IodGFnKCJUd2lsaW8gYXV0aGVudGljYXRpb24gZmFpbGVkIikpOwogICAgICAgIHJldHVybiBOb2RlT3V0Y29tZS5BVVRIRkFJTEVEOyAgICAKICAgIH0KCiAgICBpZiAoc3RhdHVzICE9PSAyMDEpIHsKICAgICAgICBsb2dnZXIuZXJyb3IodGFnKCJCYWQgSFRUUCByZXNwb25zZSBmcm9tIFR3aWxpbzogIiArIHN0YXR1cykpOwogICAgICAgIHJldHVybiBOb2RlT3V0Y29tZS5FUlJPUjsgICAgCiAgICB9CgogICAgdmFyIHJlc3BvbnNlSnNvbiA9IHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpOwoKICAgIGlmICghcmVzcG9uc2VKc29uKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKHRhZygiTm8gcmVzcG9uc2UgYm9keSIpKTsKICAgICAgICByZXR1cm4gTm9kZU91dGNvbWUuRVJST1I7ICAgIAogICAgfQoKICAgIHZhciByZXNwb25zZU9iaiA9IEpTT04ucGFyc2UocmVzcG9uc2VKc29uKTsKCiAgICBpZiAoIXJlc3BvbnNlT2JqKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKHRhZygiQ291bGRuJ3QgcGFyc2UgcmVzcG9uc2UgYm9keSIpKTsKICAgICAgICByZXR1cm4gTm9kZU91dGNvbWUuRVJST1I7ICAgIAogICAgfQoKICAgIGlmICghKHJlc3BvbnNlT2JqLmhhc093blByb3BlcnR5KCJzaWQiKSkpIHsKICAgICAgICBsb2dnZXIuZXJyb3IodGFnKCJObyBzaWQgcHJvcGVydHkgaW4gVHdpbGlvIHJlc3BvbnNlIikpOwogICAgICAgIHJldHVybiBOb2RlT3V0Y29tZS5FUlJPUjsKICAgIH0gIAoKICAgIGxvZ2dlci5tZXNzYWdlKHRhZygibWVzc2FnZSBkZWxpdmVyZWQgc3VjY2Vzc2Z1bGx5IikpOwogICAgcmV0dXJuIE5vZGVPdXRjb21lLkRFTElWRVJFRDsKfQoKLyoqCiAqIE5vZGUgZW50cnkgcG9pbnQKICovCgpsb2dnZXIubWVzc2FnZSh0YWcoIm5vZGUgZXhlY3V0aW5nIikpOwoKdmFyIGlkOwp2YXIgdGVsZXBob25lTnVtYmVyczsKdmFyIG51bWJlclRvOwoKaWYgKCEoaWQgPSBzaGFyZWRTdGF0ZS5nZXQoY29uZmlnLnNoYXJlZFN0YXRlSWRGaWVsZCkpKSB7CiAgICBsb2dnZXIuZXJyb3IodGFnKCJObyBpZCBpbiBzaGFyZWQgc3RhdGUiKSk7CiAgICBvdXRjb21lID0gTm9kZU91dGNvbWUuRVJST1I7Cn0KZWxzZSBpZiAoISh0ZWxlcGhvbmVOdW1iZXJzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShpZCwgY29uZmlnLnBob25lTnVtYmVyRmllbGQpKSkgewogICAgbG9nZ2VyLmVycm9yKHRhZygiTm8gcGhvbmUgbnVtYmVycyBmb3IgdXNlciIpKTsKICAgIG91dGNvbWUgPSBOb2RlT3V0Y29tZS5OT1BIT05FOwp9CmVsc2UgaWYgKCEobnVtYmVyVG8gPSB0ZWxlcGhvbmVOdW1iZXJzLnRvQXJyYXkoKVswXSkpIHsKICAgIGxvZ2dlci5lcnJvcih0YWcoIm5vIHRlbGVwaG9uZU51bWJlciIpKTsKICAgIG91dGNvbWUgPSBOb2RlT3V0Y29tZS5OT1BIT05FOwp9CmVsc2UgaWYgKG51bWJlclRvID09PSAiIikgewogICAgbG9nZ2VyLmVycm9yKHRhZygiYmxhbmsgdGVsZXBob25lTnVtYmVyIikpOwogICAgb3V0Y29tZSA9IE5vZGVPdXRjb21lLk5PUEhPTkU7Cn0KZWxzZSB7CiAgICB2YXIgbWVzc2FnZSA9IHJlc29sdmVQbGFjZWhvbGRlcnMoY29uZmlnLm1lc3NhZ2VUZW1wbGF0ZSk7CiAgICB2YXIgdHdpbGlvVXJpID0gY29uZmlnLmJhc2VVcmkuY29uY2F0KCIvQWNjb3VudHMvIikuY29uY2F0KGNvbmZpZy5hY2NvdW50U2lkKS5jb25jYXQoIi9NZXNzYWdlcy5qc29uIik7CiAgICBvdXRjb21lID0gc2VuZFNNUyhtZXNzYWdlLCBjb25maWcucGhvbmVOdW1iZXJGcm9tLCBudW1iZXJUbywgY29uZmlnLm1lc3NhZ2luZ1NlcnZpY2VTaWQsIHR3aWxpb1VyaSwgY29uZmlnLmFwaUtleVNpZCwgY29uZmlnLmFwaUtleVNlY3JldCk7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"400e48ba-3f13-4144-ac7b-f824ea8e98c5\",\"name\":\"OAuth2 JWT Issuer Script\",\"description\":\"Default global script for scripted JWT Issuers\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgdG8gZGVyaXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIGR5bmFtaWMgSldUIGlzc3VlciBmcm9tIHRoZSBpc3N1ZXIgc3RyaW5nLgogKiBBIEpXVCBpc3N1ZXIgaXMgbWFkZSB1cCBvZiB0aGUgZm9sbG93aW5nOgogKiAgIC0gaXNzdWVyIC0gdGhlIGlkZW50aWZpZXIgb2YgdGhlIGVudGl0eSB0aGF0IGlzc3VlcyBKV1RzCiAqICAgLSByZXNvdXJjZSBvd25lciBzdWJqZWN0IGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCBpZGVudGlmaWVzIHRoZSByZXNvdXJjZSBvd25lcgogKiAgIC0gY29uc2VudGVkIHNjb3BlIGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCByZXByZXNlbnRzIHNjb3BlIHRoYXQgdGhlIHJlc291cmNlIG93bmVyCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYWxyZWFkeSBjb25zZW50ZWQgdG8gZXh0ZXJuYWxseQogKiAgIC0gYXV0aG9yaXplZCBzdWJqZWN0cyAtIHRoZSBzZXQgb2YgcHJpbmNpcGFsIGlkZW50aWZpZXJzIHRoYXQgYXJlIGF1dGhvcml6ZWQgdG8gYmUgdXNlZCBhcyByZXNvdXJjZSBvd25lcnMKICogICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgaXNzdWVyCiAqICAgLSBKV0tzIC0gZWl0aGVyIGEgc2V0IG9mIEpXS3Mgb3IgY29ubmVjdGlvbiBkZXRhaWxzIGZvciBvYnRhaW5pbmcgdGhhdCBzZXQsIHRoYXQgYXJlIHRoZSBwdWJsaWMga2V5cyB0aGF0CiAqICAgICAgICAgICAgY2FuIHZlcmlmeSB0aGUgc2lnbmF0dXJlIG9uIHRoZSBpc3N1ZWQgSldUcy4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIGlzc3VlciAtIFN0cmluZwogKiAgICAgICAgICBUaGUgaXNzdWVyIGZyb20gdGhlIGJlYXJlciBKV1QuCiAqIHJlYWxtIC0gU3RyaW5nCiAqICAgICAgICAgVGhlIHBhdGggb2YgdGhlIHJlYWxtIHRoYXQgaXMgaGFuZGxpbmcgdGhlIHJlcXVlc3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIHNjcmlwdCBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5PQVVUSDJfU0NSSVBURURfSldUX0lTU1VFUi4KICogaHR0cENsaWVudCAtIEhUVFAgQ2xpZW50ICgxKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgSFRUUCBDbGllbnQgaW5zdGFuY2U6CiAqICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC4KICogaWRSZXBvc2l0b3J5IC0gSWRlbnRpdHkgUmVwb3NpdG9yeSAoMikuIEFsd2F5cyBwcmVzZW50LgogKiBzZWNyZXRzIC0gU2VjcmV0cyBhY2Nlc3NvciAoMykuIEFsd2F5cyBwcmVzZW50LgogKgogKiBSZXR1cm4gLSBvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLlRydXN0ZWRKd3RJc3N1ZXJDb25maWcgKDQpIC0gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRydXN0ZWQgSldUIGlzc3Vlci4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgyKSBTY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuYW0vc2NyaXB0aW5nL2FwaS9pZGVudGl0eS9TY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeS5odG1sLgogKiAoMykgU2NyaXB0ZWRTZWNyZXRzIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5hbS9zY3JpcHRpbmcvYXBpL3NlY3JldHMvU2NyaXB0ZWRTZWNyZXRzLmh0bWwuCiAqICg0KSBUcnVzdGVkSnd0SXNzdWVyQ29uZmlnIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1RydXN0ZWRKd3RJc3N1ZXJDb25maWcuaHRtbC4KICovCgovKiBFWEFNUExFCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVHJ1c3RlZEp3dElzc3VlckNvbmZpZywKICAgICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbnMKICAgICk7CgogICAgdmFyIGlzcyA9IGlkUmVwb3NpdG9yeS5nZXRJZGVudGl0eShpc3N1ZXIpOwogICAgaWYgKGlzcyA9PSBudWxsKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoJ05vIGlzc3VlciBmb3VuZCBmb3I6ICcraXNzdWVyKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGxvZ2dlci5tZXNzYWdlKCdGb3VuZCBpc3N1ZXI6ICcraXNzKTsKICAgIC8vIGluIHRoaXMgZXhhbXBsZSBlaXRoZXIgYSBKV0sgc2V0IG9yIGEgVVJJIHRvIGEgSldLIHNldCBhcmUgaW4gdGhlIHBvc3RhbEFkZHJlc3MgYXR0cmlidXRlCiAgICB2YXIgandrc0F0dHJzID0gaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygncG9zdGFsQWRkcmVzcycpOwogICAgdmFyIGp3a1NldCA9IGp3a3NBdHRycy5sZW5ndGggPT09IDAgPyBudWxsIDogandrc0F0dHJzWzBdOwogICAgdmFyIGNvbmZpZyA9IG5ldyBmckphdmEuVHJ1c3RlZEp3dElzc3VlckNvbmZpZygKICAgICAgICBpc3N1ZXIsCiAgICAgICAgJ3N1YicsCiAgICAgICAgJ3Njb3BlJywKICAgICAgICAvLyBpbiB0aGlzIGV4YW1wbGUsIHZhbGlkIHN1YmplY3RzIGFyZSBzdG9yZWQgaW4gdGhlIG1haWwgYXR0cmlidXRlCiAgICAgICAgaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygnbWFpbCcpLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCd7JykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCdodHRwJykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgICc1IG1pbnV0ZXMnLAogICAgICAgICcxIG1pbnV0ZScKICAgICk7CiAgICByZXR1cm4gY29uZmlnOwp9KCkpOwoqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_SCRIPTED_JWT_ISSUER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"73cecbfc-dad0-4395-be6a-6858ee3a80e5\",\"name\":\"Microsoft Profile Normalization\",\"description\":\"Normalizes raw profile data from Microsoft\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlOYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbk5hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5zdXJuYW1lKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"b7259916-71ed-4675-8c5a-de86a80e4aed\",\"name\":\"FrodoTestScript2\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"39e615b2-898e-4178-ba30-f58bcc095797\",\"name\":\"Save MFA Preference\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkKKTsKd2l0aCAoZnIpIHsKICAKICB2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCiAgdmFyIG1mYVByZWZBdHRyaWJ1dGUgPSAiZnItYXR0ci1pbXVsdGkyIgogIHZhciBtZmFUeXBlID0gIiI7CiAgCiAgaWYgKHNoYXJlZFN0YXRlLmdldCgid2ViLWF1dGhuLWNoYWxsZW5nZSIpICE9IG51bGwpIHsKICAgIG1mYVR5cGUgPSAid2ViYXV0aG4iOwogIH0gZWxzZSBpZiAoc2hhcmVkU3RhdGUuZ2V0KCJwdXNoUmVnaXN0cmF0aW9uVGltZW91dCIpICE9IG51bGwpIHsKICAgICAgIG1mYVR5cGUgPSAicHVzaCIKICB9CiAgCiAgaWRSZXBvc2l0b3J5LmFkZEF0dHJpYnV0ZSh1c2VybmFtZSwgbWZhUHJlZkF0dHJpYnV0ZSwgW21mYVR5cGVdKTsKICAKICBvdXRjb21lID0gInRydWUiCn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"dbe0bf9a-72aa-49d5-8483-9db147985a47\",\"name\":\"ADFS Profile Normalization (JS)\",\"description\":\"Normalizes raw profile data from ADFS\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIHRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIKICogaW4gYSBzdGFuZGFyZCBmb3JtIGV4cGVjdGVkIGJ5IHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogcmF3UHJvZmlsZSAtIFRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvdmlkZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIuCiAqICAgICAgICAgICAgICBKc29uVmFsdWUgKDEpLgogKiBsb2dnZXIgLSBUaGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiByZWFsbSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqIHJlcXVlc3RIZWFkZXJzIC0gVHJlZU1hcCAoMikuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFjY2Vzc2luZyBoZWFkZXJzIGluIHRoZSBsb2dpbiByZXF1ZXN0OgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1yZXF1ZXN0SGVhZGVycy4KICogcmVxdWVzdFBhcmFtZXRlcnMgLSBUcmVlTWFwICgyKS4KICogICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFyYW1ldGVycy4KICogc2VsZWN0ZWRJZHAgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgVGhlIHNvY2lhbCBpZGVudGl0eSBwcm92aWRlciBuYW1lLiBGb3IgZXhhbXBsZTogZ29vZ2xlLgogKiBzaGFyZWRTdGF0ZSAtIExpbmtlZEhhc2hNYXAgKDMpLgogKiAgICAgICAgICAgICAgIFRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgc3RhdGUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRyZWUgYW5kIGFsbG93cyBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gdGhlIHN0YXRlbGVzcyBub2RlczoKICogICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoLW5vZGVzL2NvcmUtYWN0aW9uLmh0bWwjYWNjZXNzaW5nLXRyZWUtc3RhdGUuCiAqIHRyYW5zaWVudFN0YXRlIC0gTGlua2VkSGFzaE1hcCAoMykuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCBmb3Igc3RvcmluZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdGhhdCBtdXN0IG5vdCBsZWF2ZSB0aGUgc2VydmVyIHVuZW5jcnlwdGVkLAogKiAgICAgICAgICAgICAgICAgIGFuZCB0aGF0IG1heSBub3QgbmVlZCB0byBwZXJzaXN0IGJldHdlZW4gYXV0aGVudGljYXRpb24gcmVxdWVzdHMgZHVyaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBzZXNzaW9uOgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGgtbm9kZXMvY29yZS1hY3Rpb24uaHRtbCNhY2Nlc3NpbmctdHJlZS1zdGF0ZS4KICoKICogUmV0dXJuIC0gYSBKc29uVmFsdWUgKDEpLgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqCiAqICAgICAgICAgIFRoaXMgc2NyaXB0J3MgbGFzdCBzdGF0ZW1lbnQgc2hvdWxkIHJlc3VsdCBpbiBhIEpzb25WYWx1ZSAoMSkgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAqICAgICAgICAgIHsKICogICAgICAgICAgICAgIHsiZGlzcGxheU5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZW1haWwiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZmFtaWx5TmFtZSI6ICJjb3JyZXNwb25kaW5nLXNvY2lhbC1pZGVudGl0eS1wcm92aWRlci12YWx1ZSJ9LAogKiAgICAgICAgICAgICAgeyJnaXZlbk5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiaWQiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsibG9jYWxlIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InBob3RvVXJsIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InVzZXJuYW1lIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0KICogICAgICAgICAgfQogKgogKiAgICAgICAgICBUaGUgY29uc3VtZXIgb2YgdGhpcyBkYXRhIGRlZmluZXMgd2hpY2gga2V5cyBhcmUgcmVxdWlyZWQgYW5kIHdoaWNoIGFyZSBvcHRpb25hbC4KICogICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlIGFuZCwKICogICAgICAgICAgdWx0aW1hdGVseSwgdGhlIG1hbmFnZWQgb2JqZWN0IGNyZWF0ZWQvdXBkYXRlZCB3aXRoIHRoaXMgZGF0YQogKiAgICAgICAgICB3aWxsIGV4cGVjdCBjZXJ0YWluIGtleXMgdG8gYmUgcG9wdWxhdGVkLgogKiAgICAgICAgICBJbiBzb21lIGNvbW1vbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB0aGUgZm9sbG93aW5nIGtleXMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vdCBlbXB0eToKICogICAgICAgICAgdXNlcm5hbWUsIGdpdmVuTmFtZSwgZmFtaWx5TmFtZSwgZW1haWwuCiAqCiAqICAgICAgICAgIEZyb20gUkZDNDUxNzogQSB2YWx1ZSBvZiB0aGUgRGlyZWN0b3J5IFN0cmluZyBzeW50YXggaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKICogICAgICAgICAgYXJiaXRyYXJ5IGNoYXJhY3RlcnMgZnJvbSB0aGUgVW5pdmVyc2FsIENoYXJhY3RlciBTZXQgKFVDUykuCiAqICAgICAgICAgIEEgemVyby1sZW5ndGggY2hhcmFjdGVyIHN0cmluZyBpcyBub3QgcGVybWl0dGVkLgogKgogKiAoMSkgSnNvblZhbHVlIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2pzb24vSnNvblZhbHVlLmh0bWwuCiAqICgyKSBUcmVlTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9UcmVlTWFwLmh0bWwuCiAqICgzKSBMaW5rZWRIYXNoTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqLwoKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQogICAgKTsKCiAgICB2YXIgbm9ybWFsaXplZFByb2ZpbGVEYXRhID0gZnJKYXZhLkpzb25WYWx1ZS5qc29uKGZySmF2YS5Kc29uVmFsdWUub2JqZWN0KCkpOwogIAogICAgICAvL2xvZ2dlci5tZXNzYWdlKCdTZWd1aW4gcmF3UHJvZmlsZTogJytyYXdQcm9maWxlKTsKCiAgICBub3JtYWxpemVkUHJvZmlsZURhdGEucHV0KCdpZCcsIHJhd1Byb2ZpbGUuZ2V0KCdzdWInKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2Rpc3BsYXlOYW1lJywgcmF3UHJvZmlsZS5nZXQoJ2dpdmVuTmFtZScpLmFzU3RyaW5nKCkgKyAnICcgKyByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2VtYWlsJywgcmF3UHJvZmlsZS5nZXQoJ21haWwnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2dpdmVuTmFtZScsIHJhd1Byb2ZpbGUuZ2V0KCdnaXZlbk5hbWUnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2ZhbWlseU5hbWUnLCByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ3VzZXJuYW1lJywgcmF3UHJvZmlsZS5nZXQoJ3VwbicpLmFzU3RyaW5nKCkpOwogICAgbm9ybWFsaXplZFByb2ZpbGVEYXRhLnB1dCgncm9sZXMnLCByYXdQcm9maWxlLmdldCgncm9sZXMnKS5hc1N0cmluZygpKTsKICAKICAgICAgLy9sb2dnZXIubWVzc2FnZSgnU2VndWluIG5vcm1hbGl6ZWRQcm9maWxlRGF0YTogJytub3JtYWxpemVkUHJvZmlsZURhdGEpOwoKICAgIHJldHVybiBub3JtYWxpemVkUHJvZmlsZURhdGE7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"cf63df8d-30e4-4839-b671-5b24006a3204\",\"name\":\"MutilevelSelect\",\"description\":\"null\",\"script\":\"Ly8gbGVnYWN5IC0gbXVsdGlwbGUgY2hvaWNlIGNhbGxiYWNrcwoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0LAogIG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXNwb25zZSwKICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLkNob2ljZUNhbGxiYWNrLAogIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ29uZmlybWF0aW9uQ2FsbGJhY2ssCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuSGlkZGVuVmFsdWVDYWxsYmFjaywKICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2ssCiAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0SW5wdXRDYWxsYmFjaywKICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuQm9vbGVhbkF0dHJpYnV0ZUlucHV0Q2FsbGJhY2sKKTsKCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogIHJldHVybiBmb3JtYXQucmVwbGFjZSgvW3hdL2csIGZ1bmN0aW9uKGMpIHsKICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpKjEwfDA7CiAgICAgIHZhciB2ID0gcjsKICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTApOwogIH0pOwp9CgpmdW5jdGlvbiBnZXRDb3VudHJpZXMoZGF0YSkgewogIHZhciBjID0gW107CiAgZGF0YS5mb3JFYWNoKGU9PmMucHVzaChlLm5hbWUpKTsKICByZXR1cm4gYzsKfQoKZnVuY3Rpb24gZ2V0U3RhdGVzKGRhdGEsIGMpIHsKICB2YXIgcyA9IFtdOwogIGRhdGFbY10uc3RhdGVzLmZvckVhY2goZT0+cy5wdXNoKGUubmFtZSkpOwogIHJldHVybiBzOwp9CgpmdW5jdGlvbiBnZXRDaXRpZXMoZGF0YSwgYywgcykgewogIHZhciBjaSA9IFtdOwogIGRhdGFbY10uc3RhdGVzW3NdLmNpdGllcy5mb3JFYWNoKGU9PmNpLnB1c2goZS5uYW1lKSk7CiAgcmV0dXJuIGNpOwp9CgpmdW5jdGlvbiBnZXREYXRhKCkgewogIHZhciByZXF1ZXN0VVJMID0gJ2h0dHBzOi8vZ2lzdC5naXRodWJ1c2VyY29udGVudC5jb20vYXRvbWljc2FtdXJhaS80OGM4OTFlOGE3OGU4YWEzNDBjMGZmZjk2ZDQ4MDZmNC9yYXcvOTk0NjFmZjdjZDNjYTFiMGI3YTU1MTk0MjkxNTM1N2UzYTQzOGFiNS9jb3VudHJ5LXN0YXRlLWNpdHkuanNvbic7CiAgdmFyIHJlcXVlc3QgPSBuZXcgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QoKTsKICByZXF1ZXN0LnNldFVyaShyZXF1ZXN0VVJMKTsKICByZXF1ZXN0LnNldE1ldGhvZCgnR0VUJyk7CiAgcmVxdWVzdC5nZXRIZWFkZXJzKCkuYWRkKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsnKTsKICAKICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7ICAKICB2YXIgcmVzcG9uc2VDb2RlID0gcmVzcG9uc2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpOwogIGlmIChyZXNwb25zZUNvZGUgPT09IDIwMCkgewogICAgcmV0dXJuIEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCihmdW5jdGlvbiAoKSB7CiAgdHJ5IHsKICAgIHZhciBhbmNob3IgPSBnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4Jyk7CiAgICB2YXIgZGF0YSA9IGdldERhdGEoKTsKICAgIHZhciBzdGF0ZXMgPSBbXTsKICAgIHZhciBjaXRpZXMgPSBbXTsKICAgIHZhciBzZWxlY3RlZENvdW50cnkgPSAwOwogICAgdmFyIHNlbGVjdGVkU3RhdGUgPSAwOwogICAgc2VsZWN0ZWRDb3VudHJ5ID0gc2hhcmVkU3RhdGUuZ2V0KCdzZWxlY3RlZENvdW50cnknKT9wYXJzZUludChub2RlU3RhdGUuZ2V0KCdzZWxlY3RlZENvdW50cnknKSk6MDsKICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogc2VsZWN0ZWQgY291bnRyeSB7fScsIHNlbGVjdGVkQ291bnRyeSk7CiAgICBzZWxlY3RlZFN0YXRlID0gc2hhcmVkU3RhdGUuZ2V0KCdzZWxlY3RlZFN0YXRlJyk/cGFyc2VJbnQobm9kZVN0YXRlLmdldCgnc2VsZWN0ZWRTdGF0ZScpKTowOwogICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOwogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgdmFyIGNiTGlzdCA9IFtdOwogICAgICB2YXIgY291bnRyeUNiID0gbmV3IGZyLkNob2ljZUNhbGxiYWNrKCdTZWxlY3QgY291bnRyeScsIGdldENvdW50cmllcyhkYXRhKSwgc2VsZWN0ZWRDb3VudHJ5LCBmYWxzZSk7CiAgICAgIGNvdW50cnlDYi5zZXRTZWxlY3RlZEluZGV4KHNlbGVjdGVkQ291bnRyeSk7CiAgICAgIGNiTGlzdC5wdXNoKGNvdW50cnlDYik7CiAgICAgIHN0YXRlcyA9IGdldFN0YXRlcyhkYXRhLCBzZWxlY3RlZENvdW50cnkpOwogICAgICB2YXIgc3RhdGVDYiA9IG5ldyBmci5DaG9pY2VDYWxsYmFjaygnU2VsZWN0IHN0YXRlJywgc3RhdGVzLCBzZWxlY3RlZFN0YXRlLCBmYWxzZSk7CiAgICAgIHN0YXRlQ2Iuc2V0U2VsZWN0ZWRJbmRleChzZWxlY3RlZFN0YXRlKTsKICAgICAgY2JMaXN0LnB1c2goc3RhdGVDYik7CiAgICAgIGNpdGllcyA9IGdldENpdGllcyhkYXRhLCBzZWxlY3RlZENvdW50cnksIHNlbGVjdGVkU3RhdGUpOwogICAgICBjYkxpc3QucHVzaChuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKDAsIGBMaXN0IG9mIGNpdGllcyBpbiAke3N0YXRlc1tzZWxlY3RlZFN0YXRlXX1gKSk7CiAgICAgIGNpdGllcy5mb3JFYWNoKGU9PnsKICAgICAgICBjYkxpc3QucHVzaChuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKDAsIGUpKTsKICAgICAgfSk7CgogICAgICB2YXIgc2NyaXB0ID0gYAogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygnc2NyaXB0IGVudGVyJyk7CiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtdWx0aXNlbGVjdF9fb3B0aW9uJykuZm9yRWFjaChmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBjb25zdCBodkNiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdGlvbkNoYW5nZWQnKTsKICAgICAgICAgICAgICBjb25zdCBldiA9IG5ldyBFdmVudCgiY2hhbmdlIik7CiAgICAgICAgICAgICAgaHZDYi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJ3RydWUnKTsKICAgICAgICAgICAgICBjb25zb2xlLmxvZygnaW52b2tpbmcgY2hhbmdlIG9uIGhpZGRlbiB2YWx1ZSBpbnB1dCcpOwogICAgICAgICAgICAgIGh2Q2IuZGlzcGF0Y2hFdmVudChldik7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3N1Ym1pdHRpbmcuLi4nKTsKICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9naW5CdXR0b25fMCcpLmNsaWNrKCk7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9KQogICAgICAgICAgfSkKICAgICAgICB9LCA1MCk7CiAgICAgIGA7CiAgICAgIGNiTGlzdC5wdXNoKG5ldyBmci5IaWRkZW5WYWx1ZUNhbGxiYWNrKCdzZWxlY3Rpb25DaGFuZ2VkJywgJ2ZhbHNlJykpOwogICAgICBjYkxpc3QucHVzaChuZXcgZnIuQ29uZmlybWF0aW9uQ2FsbGJhY2soMCwgWydGaW5pc2gnXSwgMCkpOwogICAgICBjYkxpc3QucHVzaChuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkpOwogICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZC5hcHBseShudWxsLCBjYkxpc3QpLmJ1aWxkKCk7CiAgICB9IGVsc2UgewogICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IGhpZGRlbiB0ZXh0IGlucHV0OiB7fScsIGNhbGxiYWNrcy5nZXQoY2FsbGJhY2tzLnNpemUoKS0zKS5nZXRWYWx1ZSgpKTsKICAgICAgaWYgKGNhbGxiYWNrcy5nZXQoY2FsbGJhY2tzLnNpemUoKS0zKS5nZXRWYWx1ZSgpID09ICd0cnVlJykgeyAvLyBjaGVjayB2YWx1ZSBvZiB0ZXh0IGlucHV0IGNhbGxiYWNrCiAgICAgICAgLy8gb25lIG9mIHRoZSBjYXRlZ29yeSBwaWNrZXJzIHdhcyBjaGFuZ2VkCiAgICAgICAgaWYoc2VsZWN0ZWRDb3VudHJ5ICE9IGNhbGxiYWNrcy5nZXQoMCkuZ2V0U2VsZWN0ZWRJbmRleGVzKClbMF0pIHsKICAgICAgICAgIHNlbGVjdGVkU3RhdGUgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZWxlY3RlZFN0YXRlID0gY2FsbGJhY2tzLmdldCgxKS5nZXRTZWxlY3RlZEluZGV4ZXMoKVswXTsKICAgICAgICB9CiAgICAgICAgc2VsZWN0ZWRDb3VudHJ5ID0gY2FsbGJhY2tzLmdldCgwKS5nZXRTZWxlY3RlZEluZGV4ZXMoKVswXTsKICAgICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNldCBzZWxlY3RlZCBjb3VudHJ5IHt9Jywgc2VsZWN0ZWRDb3VudHJ5KTsKICAgICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNldCBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOyAgCiAgICAgICAgc2hhcmVkU3RhdGUucHV0KCdzZWxlY3RlZENvdW50cnknLCBzZWxlY3RlZENvdW50cnkpOwogICAgICAgIHNoYXJlZFN0YXRlLnB1dCgnc2VsZWN0ZWRTdGF0ZScsIHNlbGVjdGVkU3RhdGUpOwogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKCd1cGRhdGUnKS5idWlsZCgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIHVzZXIgY2xpY2tlZCAiZmluaXNoIgogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKCdjb21wbGV0ZScpLmJ1aWxkKCk7CiAgICAgIH0KICAgIH0KICB9IGNhdGNoIChlKSB7CiAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IGVycm9yOiB7fSAnICsgZSwgZSk7CiAgICBvdXRjb21lID0gJ2Vycm9yJwogIH0KfSkoKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"name\":\"Check Username\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"07ee6240-d106-4e25-a781-5fcabc477d22\",\"name\":\"FrodoSPAdapter\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_SP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"f203173e-bceb-4e8e-8bde-52f2616b7278\",\"name\":\"pwdlessSet.js\",\"description\":\"null\",\"script\":\"aWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwpzZXRDdXN0b21BdHRyVmFsdWUoImN1c3RvbV9wYXNzd29yZGxlc3MiLCB0cnVlKTsKaWRSZXBvc2l0b3J5LnNldEF0dHJpYnV0ZShpZCwgImFzc2lnbmVkRGFzaGJvYXJkIixbInJlZ2lzdGVyV2ViQXV0aE5EZXZpY2UiLCJzZXRVc2VybmFtZUxlc3MiLCJwZWVyUmVjb3ZlcnlFbWFpbCIsInBlZXJSZWNvdmVyeTFGQSIsICJyZWdpc3RlclB1c2giXSk7CgoKICAgIApvdXRjb21lID0gInRydWUiOwoKZnVuY3Rpb24gc2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSxjdXN0b21BdHRyVmFsdWUpCnsKICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCAnZnItaWRtLWN1c3RvbS1hdHRycycpOwogIGlmIChmcklkbUN1c3RvbUF0dHJpYnV0ZXMpCiAgewogICAgdmFyIGZySWRtQ3VzdG9tQXR0cmlidXRlc09iamVjdCA9IEpTT04ucGFyc2UoU3RyaW5nKGZySWRtQ3VzdG9tQXR0cmlidXRlcy50b0FycmF5KClbMF0pKTsKICAgIGZySWRtQ3VzdG9tQXR0cmlidXRlc09iamVjdFtjdXN0b21BdHRyTmFtZV0gPSBjdXN0b21BdHRyVmFsdWU7CiAgICB2YXIganNvbl9zdHJpbmcgPSBKU09OLnN0cmluZ2lmeShmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QpOwogICAgaWRSZXBvc2l0b3J5LnNldEF0dHJpYnV0ZShpZCwgImZyLWlkbS1jdXN0b20tYXR0cnMiLFtqc29uX3N0cmluZ10pOwogIH0KfQo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"58c824ae-84ed-4724-82cd-db128fc3f6c\",\"name\":\"Normalized Profile to Managed User\",\"description\":\"Converts a normalized social profile into a managed user\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgbWFuYWdlZFVzZXIgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlck5hbWUiLCBub3JtYWxpemVkUHJvZmlsZS51c2VybmFtZSkpKQoKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgicG9zdGFsQWRkcmVzcyIsIG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MpCmlmIChub3JtYWxpemVkUHJvZmlsZS5hZGRyZXNzTG9jYWxpdHkuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgiY2l0eSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NMb2NhbGl0eSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24uaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgic3RhdGVQcm92aW5jZSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24pCmlmIChub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInBvc3RhbENvZGUiLCBub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlKQppZiAobm9ybWFsaXplZFByb2ZpbGUuY291bnRyeS5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KCJjb3VudHJ5Iiwgbm9ybWFsaXplZFByb2ZpbGUuY291bnRyeSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBob25lLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInRlbGVwaG9uZU51bWJlciIsIG5vcm1hbGl6ZWRQcm9maWxlLnBob25lKQoKLy8gaWYgdGhlIGdpdmVuTmFtZSBhbmQgZmFtaWx5TmFtZSBpcyBudWxsIG9yIGVtcHR5Ci8vIHRoZW4gYWRkIGEgYm9vbGVhbiBmbGFnIHRvIHRoZSBzaGFyZWQgc3RhdGUgdG8gaW5kaWNhdGUgbmFtZXMgYXJlIG5vdCBwcmVzZW50Ci8vIHRoaXMgY291bGQgYmUgdXNlZCBlbHNld2hlcmUKLy8gZm9yIGVnLiB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gYSBzY3JpcHRlZCBkZWNpc2lvbiBub2RlIHRvIGJ5LXBhc3MgcGF0Y2hpbmcKLy8gdGhlIHVzZXIgb2JqZWN0IHdpdGggYmxhbmsgdmFsdWVzIHdoZW4gZ2l2ZW5OYW1lICBhbmQgZmFtaWx5TmFtZSBpcyBub3QgcHJlc2VudApib29sZWFuIG5vR2l2ZW5OYW1lID0gbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmFzU3RyaW5nKCk/LnRyaW0oKSkKYm9vbGVhbiBub0ZhbWlseU5hbWUgPSBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZmFtaWx5TmFtZS5hc1N0cmluZygpPy50cmltKCkpCnNoYXJlZFN0YXRlLnB1dCgibmFtZUVtcHR5T3JOdWxsIiwgbm9HaXZlbk5hbWUgJiYgbm9GYW1pbHlOYW1lKQoKcmV0dXJuIG1hbmFnZWRVc2VyCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"59f84396-71e4-4c1d-a6ae-c4fc624d9752\",\"name\":\"Test-Script-1\",\"description\":\"A test script that uses an environment variable and a secret variable\",\"script\":\"Ly8gQ2FsY3VsYXRlIEU9bWNeMiB1c2luZyBtID0gNDIKY29uc3QgYzIgPSBzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi50ZXN0LnZhcmlhYmxlLmxpZ2h0Iik7CmNvbnNvbGUubG9nKGBFID0gJHs0MiAqIGMyICogYzJ9YCk7Ci8vIENhbGN1bGF0ZSB0aGUgYXJlYSBvZiBhIGNpcmNsZSB3aXRoIHJhZGl1cyByID0gNDIKY29uc3QgcGkgPSBwYXJzZUZsb2F0KHN5c3RlbUVudi5nZXRQcm9wZXJ0eSgiZXN2LnRlc3Quc2VjcmV0LnBpIikpOwpjb25zb2xlLmxvZyhgQSA9ICR7cGkgKiA0MiAqIDQyfWApOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"29be3f4a-cf40-4aca-8fe3-de40c9a801dd\",\"name\":\"hasWebAuthN.js\",\"description\":\"null\",\"script\":\"dmFyIHdlYmF1dGhuRGV2aWNlUHJvZmlsZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHNoYXJlZFN0YXRlLmdldCgiX2lkIiksICJ3ZWJhdXRobkRldmljZVByb2ZpbGVzIikudG9TdHJpbmcoKTsKc2hhcmVkU3RhdGUucHV0KCJkZWJ1ZyIsd2ViYXV0aG5EZXZpY2VQcm9maWxlcyk7CmlmKHdlYmF1dGhuRGV2aWNlUHJvZmlsZXMubGVuZ3RoPjIpIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7Cn0KZWxzZSB7CiAgb3V0Y29tZSA9ICJmYWxzZSI7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3b2f6836-184c-4ee9-8a1d-557cb01837a5\",\"name\":\"FrodoTestScript3\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"13aaf8de-cd8c-4b0e-9167-39ca1fb590a4\",\"name\":\"timerButton.js\",\"description\":\"null\",\"script\":\"Ly8gVGltZXIgQnV0dG9uIG5vZGUKLy8gT3V0Y29tZXM6IFsgInRydWUiLCAidGltZXIiIF0KCgpERUxBWT0xMDsKTUVTU0FHRT0iU2tpcCB0byB5b3VyIHByZWZlcnJlZCBtZXRob2QuLi4gIjsKQlVUVE9OVEVYVD0iU2VsZWN0IGFub3RoZXIgbG9naW4gbWV0aG9kIjsKCnZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5OYW1lQ2FsbGJhY2ssCiAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKKQoKZnVuY3Rpb24gY3JlYXRlU2NyaXB0KCkgewogICAgcmV0dXJuIFN0cmluZygiIFxuXAogICAgICAgIHZhciBDT1VOVCA9ICIgKyBERUxBWSArICI7IFxuXAogICAgICAgIGZ1bmN0aW9uIGdvKG9icykgeyBcblwKICAgICAgICAgICAgY29uc3QgcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtdnYtYXM9XCJEVU1NWVwiXScpWzBdOyBcblwKICAgICAgICAgICAgaWYgKHApIHsgXG5cCiAgICAgICAgICAgICAgICBwLmhpZGRlbiA9IHRydWU7IFxuXAogICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbGFiZWxbZm9yPScgKyBwLmlkICsgJ10nKS5oaWRkZW4gPSB0cnVlOyBcblwKICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignYnV0dG9uW3R5cGU9c3VibWl0XScpLmlubmVyVGV4dCA9ICciICsgQlVUVE9OVEVYVCArICInOyBcblwKICAgICAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IFxuXAogICAgICAgICAgICAgICAgYi5jbGFzc0xpc3QuYWRkKFwiYnRuXCIsIFwibXQtM1wiLCBcImJ0bi1zZWNvbmRhcnlcIik7IFxuXAogICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSAnIiArIE1FU1NBR0UgKyAiJyArIENPVU5UICsgJ3MnOyBcblwKICAgICAgICAgICAgICAgIGIub25jbGljayA9IGZ1bmN0aW9uKCkgeyBwLnZhbHVlPSdfX19USU1FX19fJzsgcC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnKSk7IH07IFxuXAogICAgICAgICAgICAgICAgcC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShiLCBwLm5leHRTaWJsaW5nKTsgXG5cCiAgICAgICAgICAgICAgICB2YXIgdCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgeyBcblwKICAgICAgICAgICAgICAgICAgICBpZiAoQ09VTlQgPT0gMSkgeyBcblwKICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0KTsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgIHAudmFsdWU9J19fX1RJTUVfX18nOyBwLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcpKTsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dpbkJ1dHRvbl8wJykuY2xpY2soKTsgfSwgMjAwKTsgXG5cCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgIENPVU5ULS07IFxuXAogICAgICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9ICciICsgTUVTU0FHRSArICInICsgQ09VTlQgKyAncyc7IFxuXAogICAgICAgICAgICAgICAgICAgIH0gXG5cCiAgICAgICAgICAgICAgICB9LCAxMDAwICk7IFxuXAogICAgICAgICAgICAgICAgaWYgKG9icykgb2JzLmRpc2Nvbm5lY3QoKTsgXG5cCiAgICAgICAgICAgICAgICByZXR1cm47IFxuXAogICAgICAgICAgICB9IFxuXAogICAgICAgIH0gXG5cCiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtdnYtYXM9XCJEVU1NWVwiXScpWzBdKSBnbygpOyBcblwKICAgICAgICBlbHNlIHsgXG5cCiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucywgb2JzKSA9PiB7IGdvKG9icyk7IH0pOyBcblwKICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7IFxuXAogICAgICAgIH0gXG5cCiAgICAiKTsKfQoKCmlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKGNyZWF0ZVNjcmlwdCgpKSwKICAgICAgICBuZXcgZnIuTmFtZUNhbGxiYWNrKCJEVU1NWSIpCiAgICApLmJ1aWxkKCkKfSBlbHNlIHsKICAgIHZhciBjYiA9IGNhbGxiYWNrcy5nZXQoMSkuZ2V0TmFtZSgpOwogICAgaWYgKGNiID09PSAiX19fVElNRV9fXyIpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidGltZXIiKS5idWlsZCgpOwogICAgfSBlbHNlIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7CiAgICB9Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"95143d29-e417-49a8-a86c-a3b4cf8fd8ed\",\"name\":\"MultilevelSelect\",\"description\":\"null\",\"script\":\"CmZ1bmN0aW9uIGdldENvdW50cmllcyhkYXRhKSB7CiAgdmFyIGMgPSBbXTsKICBkYXRhLmZvckVhY2goZT0+Yy5wdXNoKGUubmFtZSkpOwogIHJldHVybiBjOwp9CgpmdW5jdGlvbiBnZXRTdGF0ZXMoZGF0YSwgYykgewogIHZhciBzID0gW107CiAgZGF0YVtjXS5zdGF0ZXMuZm9yRWFjaChlPT5zLnB1c2goZS5uYW1lKSk7CiAgcmV0dXJuIHM7Cn0KCmZ1bmN0aW9uIGdldENpdGllcyhkYXRhLCBjLCBzKSB7CiAgdmFyIGNpID0gW107CiAgZGF0YVtjXS5zdGF0ZXNbc10uY2l0aWVzLmZvckVhY2goZT0+Y2kucHVzaChlLm5hbWUpKTsKICByZXR1cm4gY2k7Cn0KCmZ1bmN0aW9uIGdldERhdGEoKSB7CiAgdmFyIHJlcXVlc3RPcHRpb25zID0gewogICAgbWV0aG9kOiAnR0VUJywKICB9CgogIHZhciByZXF1ZXN0VVJMID0gJ2h0dHBzOi8vZ2lzdC5naXRodWJ1c2VyY29udGVudC5jb20vYXRvbWljc2FtdXJhaS80OGM4OTFlOGE3OGU4YWEzNDBjMGZmZjk2ZDQ4MDZmNC9yYXcvOTk0NjFmZjdjZDNjYTFiMGI3YTU1MTk0MjkxNTM1N2UzYTQzOGFiNS9jb3VudHJ5LXN0YXRlLWNpdHkuanNvbic7CiAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3RVUkwsIHJlcXVlc3RPcHRpb25zKS5nZXQoKTsKCiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7CiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXNwb25zZS50ZXh0KCkpOwogIH0gZWxzZSB7CiAgICBudWxsOwogIH0KfQoKKGZ1bmN0aW9uICgpIHsKICB0cnkgewogICAgdmFyIGRhdGEgPSBnZXREYXRhKCk7CiAgICB2YXIgc3RhdGVzID0gW107CiAgICB2YXIgY2l0aWVzID0gW107CiAgICB2YXIgc2VsZWN0ZWRDb3VudHJ5ID0gMDsKICAgIHZhciBzZWxlY3RlZFN0YXRlID0gMDsKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIHNlbGVjdGVkQ291bnRyeSA9IG5vZGVTdGF0ZS5nZXQoJ3NlbGVjdGVkQ291bnRyeScpP3BhcnNlSW50KG5vZGVTdGF0ZS5nZXQoJ3NlbGVjdGVkQ291bnRyeScpKTowOwogICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNlbGVjdGVkIGNvdW50cnkge30nLCBzZWxlY3RlZENvdW50cnkpOwogICAgICBzZWxlY3RlZFN0YXRlID0gbm9kZVN0YXRlLmdldCgnc2VsZWN0ZWRTdGF0ZScpP3BhcnNlSW50KG5vZGVTdGF0ZS5nZXQoJ3NlbGVjdGVkU3RhdGUnKSk6MDsKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOwogICAgICBjYWxsYmFja3NCdWlsZGVyLmNob2ljZUNhbGxiYWNrKCdTZWxlY3QgY291bnRyeScsIGdldENvdW50cmllcyhkYXRhKSwgc2VsZWN0ZWRDb3VudHJ5LCBmYWxzZSk7CiAgICAgIHN0YXRlcyA9IGdldFN0YXRlcyhkYXRhLCBzZWxlY3RlZENvdW50cnkpOwogICAgICBjYWxsYmFja3NCdWlsZGVyLmNob2ljZUNhbGxiYWNrKCdTZWxlY3Qgc3RhdGUnLCBzdGF0ZXMsIHNlbGVjdGVkU3RhdGUsIGZhbHNlKTsKICAgICAgY2l0aWVzID0gZ2V0Q2l0aWVzKGRhdGEsIHNlbGVjdGVkQ291bnRyeSwgc2VsZWN0ZWRTdGF0ZSk7CiAgICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogaGVyZSAxJyk7CiAgICAgIGNpdGllcy5mb3JFYWNoKGU9PnsKICAgICAgICBjYWxsYmFja3NCdWlsZGVyLnRleHRPdXRwdXRDYWxsYmFjaygwLCBlKTsKICAgICAgfSk7CiAgICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogaGVyZSAyJyk7CiAgICAgIGNhbGxiYWNrc0J1aWxkZXIuY29uZmlybWF0aW9uQ2FsbGJhY2soMCwgWydVcGRhdGUnLCAnQ29tcGxldGUnXSwgMCk7CiAgICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogaGVyZSAzOiB7fScsIGNhbGxiYWNrcy5nZXRDaG9pY2VDYWxsYmFja3MoKS5zaXplKCkpOwogICAgICBjYWxsYmFja3MuZ2V0Q2hvaWNlQ2FsbGJhY2tzKCkuZ2V0KDApLnNldFNlbGVjdGVkSW5kZXgoc2VsZWN0ZWRDb3VudHJ5KTsKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBoZXJlIDQnKTsKICAgICAgY2FsbGJhY2tzLmdldENob2ljZUNhbGxiYWNrcygpLmdldCgxKS5zZXRTZWxlY3RlZEluZGV4KHNlbGVjdGVkU3RhdGUpOwoKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBoZXJlIDUnKTsKICAgICAgdmFyIHNjcmlwdCA9IGAKICAgICAgICAgIGZ1bmN0aW9uIHNob3dPcmdEZXRhaWxzKCkgewogICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3cmFwcGVyJyk7CiAgICAgICAgICAgIHdyYXBwZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmViZWdpbicsICc8ZGl2PnRlc3Q8L2Rpdj4nKTsKICAgICAgICAgIH0KICAgICAgICAgIHNldFRpbWVvdXQoc2hvd09yZ0RldGFpbHMsIDEwMCk7CiAgICAgICAgICBgOwogICAgICAvLyBjYWxsYmFja3NCdWlsZGVyLnNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpOwogICAgICAvLyBjYWxsYmFja3NCdWlsZGVyLmhpZGRlblZhbHVlQ2FsbGJhY2soJ3NlbGVjdGlvbkNoYW5nZWQnLCAnZmFsc2UnKQogICAgfSBlbHNlIHsKICAgICAgc2VsZWN0ZWRDb3VudHJ5ID0gY2FsbGJhY2tzLmdldENob2ljZUNhbGxiYWNrcygpLmdldCgwKVswXTsKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBzZXQgc2VsZWN0ZWQgY291bnRyeSB7fScsIHNlbGVjdGVkQ291bnRyeSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ3NlbGVjdGVkQ291bnRyeScsIHNlbGVjdGVkQ291bnRyeSk7CiAgICAgIHNlbGVjdGVkU3RhdGUgPSBjYWxsYmFja3MuZ2V0Q2hvaWNlQ2FsbGJhY2tzKCkuZ2V0KDEpWzBdOwogICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNldCBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOwogICAgICBub2RlU3RhdGUucHV0U2hhcmVkKCdzZWxlY3RlZFN0YXRlJywgc2VsZWN0ZWRTdGF0ZSk7CiAgICAgIGlmIChjYWxsYmFja3MuZ2V0Q29uZmlybWF0aW9uQ2FsbGJhY2tzKCkuZ2V0KDApID09IDApIHsKICAgICAgICBvdXRjb21lID0gJ3VwZGF0ZSc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3V0Y29tZSA9ICdjb21wbGV0ZSc7CiAgICAgIH0KICAgIH0KICB9IGNhdGNoIChlKSB7CiAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IGVycm9yOiB7fSAnICsgZSwgZSk7CiAgICBvdXRjb21lID0gJ2Vycm9yJwogIH0KfSkoKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"23143919-6b78-40c3-b25e-beca19b229e0\",\"name\":\"GitHub Profile Normalization (VS)\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJHaXRIdWIgcmF3UHJvZmlsZTogIityYXdQcm9maWxlKQoKcmV0dXJuIGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZmlyc3RfbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3RfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5waWN0dXJlLmRhdGEudXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLmVtYWlsKSkp\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e387c5d7-ceb8-459e-87e6-d09eca512385\",\"name\":\"resetPushBomb.js\",\"description\":\"null\",\"script\":\"dmFyIF9pZCA9IHNoYXJlZFN0YXRlLmdldCgiX2lkIik7CnZhciBhdHRyaWJ1dGUgPSAiZnItYXR0ci1zdHIyIjsKCmlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoX2lkLCBhdHRyaWJ1dGUsWyIiXSk7CgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"248b8a56-df81-4b1b-b4ba-45d994f6504c\",\"name\":\"SAML2 IDP Adapter Script\",\"description\":\"Default global script for SAML2 IDP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9TQU1MMklkZW50aXR5UHJvdmlkZXJBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBJZHBBZGFwdGVyU2NyaXB0SGVscGVyICgxKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgSWRwQWRhcHRlclNjcmlwdEhlbHBlciBjb250YWluaW5nIGhlbHBlciBtZXRob2RzLiBTZWUgSmF2YWRvYyBmb3IgbW9yZSBkZXRhaWxzLgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgyKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDMpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDQpCiAqICAgICBUaGUgb3JpZ2luYWwgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IGZyb20gU1AKICogcmVxSWQgLSBTdHJpbmcKICogICAgIFRoZSBpZCB0byB1c2UgZm9yIGNvbnRpbnVhdGlvbiBvZiBwcm9jZXNzaW5nIGlmIHRoZSBhZGFwdGVyIHJlZGlyZWN0cwogKiByZXMgLSBSZXNwb25zZSAoNSkKICogICAgIFRoZSBTQU1MIFJlc3BvbnNlCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNikKICogICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLiBUaGUgcmVmZXJlbmNlIHR5cGUgb2YgdGhpcyBpcyBPYmplY3QgYW5kIHdvdWxkIG5lZWQgdG8gYmUgY2FzdGVkIHRvIFNTT1Rva2VuLgogKiByZWxheVN0YXRlIC0gU3RyaW5nCiAqICAgICBUaGUgcmVsYXlTdGF0ZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgcmVkaXJlY3QKICogZmF1bHRDb2RlIC0gU3RyaW5nCiAqICAgICB0aGUgZmF1bHQgY29kZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogZmF1bHREZXRhaWwgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBkZXRhaWwgdGhhdCB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBTQU1MIHJlc3BvbnNlCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwuCiAqICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuPHNjcmlwdCBuYW1lPgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb24gKDcpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL0F1dGhuUmVxdWVzdC5odG1sLgogKiAoNSkgUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvUmVzcG9uc2UuaHRtbC4KICogKDYpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBJRFAgQWRhcHRlciBzY3JpcHRlZCBwbHVnaW4uCiAqLwoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2luZ2xlU2lnbk9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlU2lnbk9uICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlQXV0aGVudGljYXRpb246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVBdXRoZW50aWNhdGlvbiAoKSB7CiAgICByZXR1cm4gZmFsc2U7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNlbmRSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgcmVxSWQKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIGJyb3dzZXIgcmVkaXJlY3Rpb24gaGFwcGVuZWQgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2VuZFJlc3BvbnNlICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2lnblJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIHJlcwogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTaWduUmVzcG9uc2UgKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgZmF1bHRDb2RlCiAqICAgICBmYXVsdERldGFpbAogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlICgpIHsKfQ==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"484e6246-dbc6-4288-97e6-54e55431402e\",\"name\":\"Apple Profile Normalization\",\"description\":\"Normalizes raw profile data from Apple\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICoKICogSW4gc29tZSBjb21tb24gZGVmYXVsdCBjb25maWd1cmF0aW9ucywgdGhlIGZvbGxvd2luZyBrZXlzIGFyZSByZXF1aXJlZCB0byBiZSBub3QgZW1wdHk6CiAqIHVzZXJuYW1lLCBnaXZlbk5hbWUsIGZhbWlseU5hbWUsIGVtYWlsLgogKgogKiBGcm9tIFJGQzQ1MTc6IEEgdmFsdWUgb2YgdGhlIERpcmVjdG9yeSBTdHJpbmcgc3ludGF4IGlzIGEgc3RyaW5nIG9mIG9uZSBvciBtb3JlCiAqIGFyYml0cmFyeSBjaGFyYWN0ZXJzIGZyb20gdGhlIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0IChVQ1MpLgogKiBBIHplcm8tbGVuZ3RoIGNoYXJhY3RlciBzdHJpbmcgaXMgbm90IHBlcm1pdHRlZC4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKU3RyaW5nIGVtYWlsID0gImNoYW5nZUBtZS5jb20iClN0cmluZyBzdWJqZWN0SWQgPSByYXdQcm9maWxlLnN1YgpTdHJpbmcgZmlyc3ROYW1lID0gIiAiClN0cmluZyBsYXN0TmFtZSA9ICIgIgpTdHJpbmcgdXNlcm5hbWUgPSBzdWJqZWN0SWQKU3RyaW5nIG5hbWUKCmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgiZW1haWwiKSAmJiByYXdQcm9maWxlLmVtYWlsLmlzTm90TnVsbCgpKXsgLy8gVXNlciBjYW4gZWxlY3QgdG8gbm90IHNoYXJlIHRoZWlyIGVtYWlsCiAgICBlbWFpbCA9IHJhd1Byb2ZpbGUuZW1haWwuYXNTdHJpbmcoKQogICAgdXNlcm5hbWUgPSBlbWFpbAp9CmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgibmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5pc05vdE51bGwoKSkgewogICAgaWYgKHJhd1Byb2ZpbGUubmFtZS5pc0RlZmluZWQoImZpcnN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5maXJzdE5hbWUuaXNOb3ROdWxsKCkpIHsKICAgICAgICBmaXJzdE5hbWUgPSByYXdQcm9maWxlLm5hbWUuZmlyc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KICAgIGlmIChyYXdQcm9maWxlLm5hbWUuaXNEZWZpbmVkKCJsYXN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5sYXN0TmFtZS5pc05vdE51bGwoKSkgewogICAgICAgIGxhc3ROYW1lID0gcmF3UHJvZmlsZS5uYW1lLmxhc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KfQoKbmFtZSA9IChmaXJzdE5hbWU/LnRyaW0oKSA/IGZpcnN0TmFtZSA6ICIiKSArIChsYXN0TmFtZT8udHJpbSgpID8gKChmaXJzdE5hbWU/LnRyaW0oKSA/ICIgIiA6ICIiKSArIGxhc3ROYW1lKSA6ICIiKQpuYW1lID0gICghbmFtZT8udHJpbSgpKSA/ICIgIiA6IG5hbWUKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCBzdWJqZWN0SWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIG5hbWUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIGVtYWlsKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgZmlyc3ROYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIGxhc3ROYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCB1c2VybmFtZSkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3c9d3b4a-b38c-4c77-a8d7-4b937e48f62f\",\"name\":\"selectFavFactor.js\",\"description\":\"null\",\"script\":\"Ly8gRGlzcGxheXMgTUZBIG9wdGlvbnMgZmlsdGVyZWQgYnkgdXNlcnMgcHJlZmVyZW5jZXMKdmFyIHdlYmF1dGhuRGV2aWNlUHJvZmlsZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHNoYXJlZFN0YXRlLmdldCgiX2lkIiksICJ3ZWJhdXRobkRldmljZVByb2ZpbGVzIikudG9TdHJpbmcoKTsKdmFyIHB1c2hEZXZpY2VQcm9maWxlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKSwgInB1c2hEZXZpY2VQcm9maWxlcyIpLnRvU3RyaW5nKCk7Cgp2YXIgaGFzV2ViQXV0aE49ZmFsc2U7CnZhciBoYXNQdXNoPWZhbHNlOwoKaWYod2ViYXV0aG5EZXZpY2VQcm9maWxlcy5sZW5ndGg+MikgewogICAgaGFzV2ViQXV0aE4gPSB0cnVlOwp9CmlmKHB1c2hEZXZpY2VQcm9maWxlcy5sZW5ndGg+MikgewogICAgaGFzUHVzaCA9IHRydWU7Cn0KCgptZmFzID0geyAKICAgICAgICAgICJQdXNoIjogIlB1c2ggbm90aWZpY2F0aW9uIHZpYSBhdXRoZW50aWNhdG9yIGFwcCIsIAogICAgICAgICAiV2ViQXV0aE4iOiAiU2VjdXJpdHkgS2V5L1RvdWNoSUQvV2luZG93c0hlbGxvL1Bhc3NLZXkiLCAKICAgICAgICAgICAvLyJRUiIgOiAiUVIgQ29kZSBDYXNjYWRlZCBDb250ZXh0IChXZWJBdXRoTikiLAogICAgICAgICAgICJTTVMiIDogIlNNUyBDYXNjYWRlZCBDb250ZXh0IChXZWJBdXRoTikiLAogICAgICAgICAgLy8iRW1haWwiIDogIkUtbWFpbCBDYXNjYWRlZCBDb250ZXh0IChXZWJBdXRoTikiLAogICAgICAgICAgLy8gIlNNU01MIiA6ICJTTVMgTWFnaWMgTGluayIKICAgICAgIH07CgoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ2hvaWNlQ2FsbGJhY2sKKQoKdmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKCi8vIEFkZCBlbnRyeSB0byBtdWx0aSB2YWx1ZQp2YXIgY2hvaWNlcyA9IFtdOwppZihoYXNQdXNoPT10cnVlKXsKICAgICAgY2hvaWNlcy5wdXNoKG1mYXMuUHVzaCk7Cn0KaWYoaGFzV2ViQXV0aE49PXRydWUpewogICAgICBjaG9pY2VzLnB1c2gobWZhcy5XZWJBdXRoTik7CiAgICAgIC8vY2hvaWNlcy5wdXNoKG1mYXMuUVIpOwogICAgICAvL2Nob2ljZXMucHVzaChtZmFzLlNNUyk7CiAgICAvL2Nob2ljZXMucHVzaChtZmFzLkVtYWlsKTsKCn0KLy9jaG9pY2VzLnB1c2gobWZhcy5TTVNNTCk7CmZ1bmN0aW9uIHNldEN1c3RvbUF0dHJWYWx1ZSAoY3VzdG9tQXR0ck5hbWUsY3VzdG9tQXR0clZhbHVlKQp7CiAgdmFyIGlkID0gc2hhcmVkU3RhdGUuZ2V0KCdfaWQnKTsKICB2YXIgZnJJZG1DdXN0b21BdHRyaWJ1dGVzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShpZCwgJ2ZyLWlkbS1jdXN0b20tYXR0cnMnKTsKICBpZiAoZnJJZG1DdXN0b21BdHRyaWJ1dGVzKQogIHsKICAgIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QgPSBKU09OLnBhcnNlKFN0cmluZyhmcklkbUN1c3RvbUF0dHJpYnV0ZXMudG9BcnJheSgpWzBdKSk7CiAgICBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdID0gY3VzdG9tQXR0clZhbHVlOwogICAgdmFyIGpzb25fc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0KTsKICAgIGlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoaWQsICJmci1pZG0tY3VzdG9tLWF0dHJzIixbanNvbl9zdHJpbmddKTsKICB9Cn0KCgovL0NhbGxiYWNrIHRvIHByZXNlbnQgYW5kIHJldHJpZXZlIHNlbGVjdGVkIG9yZyBhbmQgc2V0Ci8vc2VsZWN0ZWQgdGhlbWUgZm9yIHNldHRpbmcgaW4gdGhlIG5leHQgbm9kZQoKCgp3aXRoIChmcikgewogICAgICBpZiAoY2hvaWNlcy5sZW5ndGggPCAyKSBhY3Rpb24gPSBBY3Rpb24uZ29UbyhvdXRjb21lKS5idWlsZCgpOwogICAgZWxzZSB7CiAgICAgICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soCiAgICAgICAgICAgICAgICAgICAgICAiU3Ryb25nIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkLiBQbGVhc2Ugc2VsZWN0IHlvdXIgcHJlZmVycmVkIGZvcm0gb2Ygc3Ryb25nIGF1dGhlbnRpY2F0aW9uIGZyb20gdGhlIGxpc3QgYmVsb3cuIiwKICAgICAgICAgICAgICAgICAgY2hvaWNlcywKICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgZmFsc2UKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApLndpdGhTdGFnZShKU09OLnN0cmluZ2lmeSh7ICJDaG9pY2VDYWxsYmFjayI6IFsgeyAiZGlzcGxheVR5cGUiOiJyYWRpbyIgfSBdIH0pKS53aXRoSGVhZGVyKCJDaG9vc2UgTWV0aG9kIikuYnVpbGQoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBzZWxlY3RlZEluZGV4ID0gY2FsbGJhY2tzLmdldCgwKS5nZXRTZWxlY3RlZEluZGV4ZXMoKVswXTsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkTmFtZTsKICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1mYXMpIGlmIChjaG9pY2VzW3NlbGVjdGVkSW5kZXhdID09IG1mYXNba2V5XSkgc2VsZWN0ZWROYW1lID0ga2V5OwogICAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoInNlbGVjdGVkTmFtZSIsIHNlbGVjdGVkTmFtZSk7CiAgICAgICAgICAgICAgc2V0Q3VzdG9tQXR0clZhbHVlICgiY3VzdG9tX2Zhdm91cml0ZUZhY3RvciIsc2VsZWN0ZWROYW1lKTsKICAgICAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8oc2VsZWN0ZWROYW1lKS5idWlsZCgpOwogICAgICAgIH0gICAKICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"7e3d7067-d50f-4674-8c76-a3e13a810c33\",\"name\":\"Scripted Module - Server Side\",\"description\":\"Default global script for server side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgp2YXIgU1RBUlRfVElNRSA9IDk7ICAvLyA5YW0KdmFyIEVORF9USU1FICAgPSAxNzsgLy8gNXBtCnZhciBsb25naXR1ZGUsIGxhdGl0dWRlOwp2YXIgbG9jYWxUaW1lOwoKbG9nZ2VyLm1lc3NhZ2UoIlN0YXJ0aW5nIHNjcmlwdGVkIGF1dGhlbnRpY2F0aW9uIik7CmxvZ2dlci5tZXNzYWdlKCJVc2VyOiAiICsgdXNlcm5hbWUpOwoKdmFyIHVzZXJQb3N0YWxBZGRyZXNzID0gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKTsKbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgYWRkcmVzczogIiArIHVzZXJQb3N0YWxBZGRyZXNzKTsKCmdldExvbmdpdHVkZUxhdGl0dWRlRnJvbVVzZXJQb3N0YWxBZGRyZXNzKCk7CmdldExvY2FsVGltZSgpOwoKbG9nZ2VyLm1lc3NhZ2UoIkN1cnJlbnQgdGltZSBhdCB0aGUgdXNlcnMgbG9jYXRpb246ICIgKyBsb2NhbFRpbWUuZ2V0SG91cnMoKSk7CmlmIChsb2NhbFRpbWUuZ2V0SG91cnMoKSA8IFNUQVJUX1RJTUUgfHwgbG9jYWxUaW1lLmdldEhvdXJzKCkgPiBFTkRfVElNRSkgewogICAgbG9nZ2VyLmVycm9yKCJMb2dpbiBmb3JiaWRkZW4gb3V0c2lkZSB3b3JrIGhvdXJzISIpOwogICAgYXV0aFN0YXRlID0gRkFJTEVEOwp9IGVsc2UgewogICAgbG9nZ2VyLm1lc3NhZ2UoIkF1dGhlbnRpY2F0aW9uIGFsbG93ZWQhIik7CiAgICBhdXRoU3RhdGUgPSBTVUNDRVNTOwp9CgpmdW5jdGlvbiBnZXRMb25naXR1ZGVMYXRpdHVkZUZyb21Vc2VyUG9zdGFsQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlclBvc3RhbEFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwogICAgICAvL3RoZSBhYm92ZSBVUkkgaGFzIHRvIGJlIGV4dGVuZGVkIHdpdGggYW4gQVBJX0tFWSBpZiB1c2VkIGluIGEgZnJlcXVlbnQgbWFubmVyCiAgICAgIC8vc2VlIGRvY3VtZW50YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9nZW9jb2RpbmcvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIGdlb2NvZGUgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIHZhciBpOwogICAgZm9yIChpID0gMDsgaSA8IGdlb2NvZGUucmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciByZXN1bHQgPSBnZW9jb2RlLnJlc3VsdHNbaV07CiAgICAgICAgbGF0aXR1ZGUgPSByZXN1bHQuZ2VvbWV0cnkubG9jYXRpb24ubGF0OwogICAgICAgIGxvbmdpdHVkZSA9IHJlc3VsdC5nZW9tZXRyeS5sb2NhdGlvbi5sbmc7CgogICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJsYXRpdHVkZToiICsgbGF0aXR1ZGUgKyAiIGxvbmdpdHVkZToiICsgbG9uZ2l0dWRlKTsKICAgIH0KfQoKZnVuY3Rpb24gZ2V0TG9jYWxUaW1lKCkgewoKICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7CiAgICB2YXIgbG9jYXRpb24gPSAibG9jYXRpb249IiArIGxhdGl0dWRlICsgIiwiICsgbG9uZ2l0dWRlOwogICAgdmFyIHRpbWVzdGFtcCA9ICJ0aW1lc3RhbXA9IiArIG5vdzsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS90aW1lem9uZS9qc29uPyIgKyBsb2NhdGlvbiArICImIiArIHRpbWVzdGFtcCk7CiAgICAgIHJlcXVlc3Quc2V0TWV0aG9kKCJHRVQiKTsKICAgICAgLy90aGUgYWJvdmUgVVJJIGhhcyB0byBiZSBleHRlbmRlZCB3aXRoIGFuIEFQSV9LRVkgaWYgdXNlZCBpbiBhIGZyZXF1ZW50IG1hbm5lcgogICAgICAvL3NlZSBkb2N1bWVudGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vdGltZXpvbmUvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIHRpbWV6b25lID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICB2YXIgbG9jYWxUaW1lc3RhbXAgPSBwYXJzZUludChub3cpICsgcGFyc2VJbnQodGltZXpvbmUuZHN0T2Zmc2V0KSArIHBhcnNlSW50KHRpbWV6b25lLnJhd09mZnNldCk7CiAgICBsb2NhbFRpbWUgPSBuZXcgRGF0ZShsb2NhbFRpbWVzdGFtcCoxMDAwKTsKfQoKZnVuY3Rpb24gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKSB7CiAgICB2YXIgdXNlckFkZHJlc3NTZXQgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCAicG9zdGFsQWRkcmVzcyIpOwogICAgaWYgKHVzZXJBZGRyZXNzU2V0ID09IG51bGwgfHwgdXNlckFkZHJlc3NTZXQuaXNFbXB0eSgpKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIGFkZHJlc3Mgc3BlY2lmaWVkIGZvciB1c2VyOiAiICsgdXNlcm5hbWUpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKQp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3b7c5bbe-5a80-4ba1-8918-6a3e2ef891c4\",\"name\":\"CheckIfValidSession\",\"description\":\"Check if a valid session already exists\",\"script\":\"aWYgKHR5cGVvZiBleGlzdGluZ1Nlc3Npb24gIT09ICd1bmRlZmluZWQnKQp7CiAgb3V0Y29tZSA9ICJoYXNTZXNzaW9uIjsKfQplbHNlCnsKICBvdXRjb21lID0gIm5vU2Vzc2lvbiI7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"320012d2-ad02-401a-871e-3973db81a3d7\",\"name\":\"Demo - Journey Chooser\",\"description\":\"null\",\"script\":\"Ly8gRGlzcGxheSBjaG9pY2Ugb2Ygam91cm5leXMKLy8gU2VlIGh0dHBzOi8vY2RuLWljb25zLXBuZy5mbGF0aWNvbi5jb20gZm9yIGV4YW1wbGUgaWNvbnMKdmFyIGpvdXJuZXlzID0gWwogIC8veyAibmFtZSI6ICJMZWdhY3kgTG9naW4iLCAidXJsIjogIkxvZ2luIiwgImljb24iOiAiMTI4LzYzMTcvNjMxNzU3Ny5wbmciIH0sCiAgeyAibmFtZSI6ICJMb2dpbiIsICJ1cmwiOiAiUGFzc3dvcmRsZXNzLU1hc3RlciIsICJpY29uIjogIjEyOC85Njk5Lzk2OTk1ODIucG5nIiB9LAogIC8veyAibmFtZSI6ICJSZWdpc3RlciIsICJ1cmwiOiAiRGVtby1Qd2RsZXNzLU5ldy1Vc2VyICIsICJpY29uIjogIjEyOC8xNjk4LzE2OTg1NzIucG5nIiB9LAogIC8veyAibmFtZSI6ICJRUiBMb2dpbiIsICJ1cmwiOiAiRGVtby1Qd2RMZXNzLVFSIiwgImljb24iOiAiMTI4LzEyODcvMTI4NzU1OC5wbmciIH0sCiAgLy97ICJuYW1lIjogIlNNUyBXZWJBdXRoTiIsICJ1cmwiOiAiRGVtby1Qd2RMZXNzLVNNUyIsICJpY29uIjogIjEyOC8yNzA0LzI3MDQxNjcucG5nIiB9LAogIC8veyAibmFtZSI6ICJTTVMgTWFnaWMgTGluayIsICJ1cmwiOiAiRGVtby1Qd2RMZXNzLVNNUy1TaW1wbGUiLCAiaWNvbiI6ICIxMjgvMjcwNC8yNzA0MTY3LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiSUQgUHJvb2ZpbmciLCAidXJsIjogIkRlbW8tT25GaWRvIiwgImljb24iOiAiMTI4LzYwNjEvNjA2MTM5Ni5wbmciIH0sCiAgLy97ICJuYW1lIjogIlJlZ2lzdGVyK0lEVi1MaXZlIiwgInVybCI6ICJEZW1vLVNlbGZSZWdpc3RyYXRpb24iLCAiaWNvbiI6ICIxMjgvMTY5OC8xNjk4NTcyLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUmVnaXN0ZXIrSURWLVNhbmRib3giLCAidXJsIjogIkRlbW8tU2VsZlJlZ2lzdHJhdGlvblNhbmRib3giLCAiaWNvbiI6ICIxMjgvMTY5OC8xNjk4NTcyLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUmVtZW1iZXIgVXNlcm5hbWVzIiwgInVybCI6ICJEZW1vLVJlbWVtYmVyTXlVc2VybmFtZSIsICJpY29uIjogIjEyOC84ODkvODg5NjY4LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUGVlciBSZWNvdmVyeSIsICJ1cmwiOiAiRGVtby1SZWNvdmVyeSIsICJpY29uIjogIjEyOC8yNTk3LzI1OTcxNDMucG5nIiB9LAogIC8veyAibmFtZSI6ICJGaW5nZXJwcmludEpTIiwgInVybCI6ICJGaW5nZXJwcmludEpTIiwgImljb24iOiAiLzEyOC84MzM3LzgzMzc3MDIucG5nIiB9LAogIC8veyAibmFtZSI6ICJGaW5nZXJwcmludEpTIFBybyIsICJ1cmwiOiAiRmluZ2VycHJpbnRQcm9KUyIsICJpY29uIjogIi8xMjgvODMzNy84MzM3NzAyLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUmVzZXQgUGFzc3dvcmQiLCAidXJsIjogIlJlc2V0UGFzc3dvcmQiLCAiaWNvbiI6ICIxMjgvMTAwMC8xMDAwOTMzLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiU29jaWFsIExvZ2luIiwgInVybCI6ICJEZW1vLVNvY2lhbCIsICJpY29uIjogIjEyOC8zMDAvMzAwMjIxLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiU0FNTCIsICJ1cmwiOiAiRGVtby1TQU1MIiwgImljb24iOiAiMTI4LzI5LzI5NjExLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiTUZBLU9BVEgiLCAidXJsIjogIkRlbW8tTUZBLU9BVEgiLCAiaWNvbiI6ICIxMjgvNzQ3Ni83NDc2Nzk2LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiTUZBLVB1c2giLCAidXJsIjogIkRlbW8tTUZBLVB1c2giLCAiaWNvbiI6ICIxMjgvNzQ3Ni83NDc2Nzk2LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUGFzc3dvcmRsZXNzIiwgInVybCI6ICJEZW1vLU1GQS1QYXNzd2RsZXNzIiwgImljb24iOiAiMTI4LzI3NjcvMjc2NzE0Ni5wbmciIH0sICAKICAvL3sgIm5hbWUiOiAiTUZBLUNob2ljZSIsICJ1cmwiOiAiRGVtby1NRkEtQ2hvaWNlIiwgImljb24iOiAiMTI4Lzc0NzYvNzQ3Njc5Ni5wbmciIH0sCiAgLy97ICJuYW1lIjogIlByb2dyZXNzaXZlIFByb2ZpbGUiLCAidXJsIjogIlByb2dyZXNzaXZlUHJvZmlsZSIsICJpY29uIjogIjEyOC83MzE5LzczMTk1MDkucG5nIiB9LAogIC8veyAibmFtZSI6ICJBZ2UtQmFzZWQgTG9naW4iLCAidXJsIjogIkRlbW8tQWdlQmFzZWRMb2dpbiIsICJpY29uIjogIjEyOC8zMDgxLzMwODE5NjkucG5nIiB9LAogIC8veyAibmFtZSI6ICJNdWx0aSBCcmFuZCIsICJ1cmwiOiAiRGVtby1NdWx0aUJyYW5kIiwgImljb24iOiAiMTI4LzY5ODAvNjk4MDczNS5wbmciIH0sCiAgLy97ICJuYW1lIjogIkFudGkgRnJhdWQiLCAidXJsIjogIjEtRGVtby1DaG9vc2VyLUF1dG9BY2Nlc3MiLCAiaWNvbiI6ICIxMjgvMjg2Ny8yODY3NzI1LnBuZyIgfSwKICAKICAKXQoKCnZhciBJQ09OUyA9ICJodHRwczovL2Nkbi1pY29ucy1wbmcuZmxhdGljb24uY29tLyIKdmFyIFNJWkUgPSAiMjQiOwoKdmFyIGNzcyA9ICIqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfSAgLmNvbHVtbiB7IGZsb2F0OiBsZWZ0OyB3aWR0aDogNTAlOyBwYWRkaW5nOiAxMHB4OyB0ZXh0LWFsaWduOmxlZnQ7IH0gLnJvdzphZnRlciB7IGNvbnRlbnQ6IFwiXCI7IGRpc3BsYXk6IHRhYmxlOyBjbGVhcjogYm90aDsgfSAuYm94IHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgIGhlaWdodDogNjBweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBwYWRkaW5nOiAwIDEwcHg7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsgY29sb3I6IHJnYigwLCAwLCAwKTsgYm9yZGVyLWNvbG9yOiByZ2IoMCwgMCwgMCk7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDoxcHg7IG1hcmdpbi1ib3R0b206IDJweDsgIH0gLmljb24geyBoZWlnaHQ6IDMycHg7IG1pbi13aWR0aDogMzJweDsgbWFyZ2luLXJpZ2h0OiAxMHB4OyB9IGE6aG92ZXIgeyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0iOwoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKKQoKCndpdGgoZnIpIHsKICAgIHZhciBzY3JpcHQ7CiAgICBmdW5jdGlvbiBjcmVhdGVTY3JpcHQoKSB7CiAgICAgICAgICB2YXIgbGVmdCA9ICIiOwogICAgICAgIHZhciByaWdodCA9ICIiOwogICAgICAgICAgZm9yIChpIGluIGpvdXJuZXlzKSB7CiAgICAgICAgICAgIHZhciBlbGVtID0gJzxhIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tYmxvY2sgYm94XCIgaHJlZj1cImh0dHBzOi8vb3BlbmFtLXZvbGtlci1kZW1vLmZvcmdlYmxvY2tzLmNvbS9hbS9YVUk/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPScgKyBqb3VybmV5c1tpXVsidXJsIl0gKyAnXCI+PGltZyBjbGFzcz1cImljb25cIiBzcmM9XCInICsgSUNPTlMgKyBqb3VybmV5c1tpXVsiaWNvbiJdICsgJ1wiPjxzcGFuPicgKyBqb3VybmV5c1tpXVsibmFtZSJdICsgJzwvc3Bhbj48L2E+JzsKICAgICAgICAgICAgICBpZiAoaSAlIDIgPT0gMCkgCiAgICAgICAgICAgICAgICAgIGxlZnQgKz0gZWxlbTsKICAgICAgICAgICAgICBlbHNlIAogICAgICAgICAgICAgICAgICByaWdodCArPSBlbGVtOwogICAgICAgIH0KICAgICAgICByZXR1cm4gU3RyaW5nKCJkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSkuaW5uZXJIVE1MID0gJyIgKyBjc3MgKyAiJyBcblwKICAgICAgICAgICAgdmFyIGNob29zZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgXG5cCiAgICAgICAgICAgIGNob29zZXIuaWQgPSAnY2hvb3Nlcic7IFxuXAogICAgICAgICAgICB2YXIgY2IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FsbGJhY2tzUGFuZWwnKTsgXG5cCiAgICAgICAgICAgIGNiLmluc2VydEJlZm9yZShjaG9vc2VyLCBjYi5maXJzdENoaWxkKTsgXG5cCiAgICAgICAgICAgIGNob29zZXIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJyb3dcIj48ZGl2IGNsYXNzPVwiY29sdW1uXCI+IitsZWZ0KyI8L2Rpdj48ZGl2IGNsYXNzPVwiY29sdW1uXCI+IityaWdodCsiPC9kaXY+PC9kaXY+JyBcblwKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignYnV0dG9uW3R5cGU9c3VibWl0XScpKSB7IFxuXAogICAgICAgICAgICAgICAgdmFyIGIgPSBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvblt0eXBlPXN1Ym1pdF0nKTsgXG5cCiAgICAgICAgICAgICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbigpIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nob29zZXInKS5yZW1vdmUoKTsgIH0pOyBcblwKICAgICAgICAgICAgfSBcblwKICAgICAgICAiKTsKICAgIH0gIAogIAogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBBY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IFNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhjcmVhdGVTY3JpcHQoKSkKICAgICAgICApLmJ1aWxkKCkKICAgIH0gZWxzZSBhY3Rpb24gPSBBY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"d22f9a0c-426a-4466-b95e-d0f125b0d5fa\",\"name\":\"OAuth2 Access Token Modification Script\",\"description\":\"Default global script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"0ab1dc10-a54f-476f-ad07-2a04915cd443\",\"name\":\"wks-DisplayUserName\",\"description\":\"DisplayUserName\",\"script\":\"LyogRGlzcGxheSBVc2VybmFtZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBEaXNwbGF5IHRoZSB1c2VybmFtZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICB0cnkgewogICAgdmFyIG91dGNvbWUgPSAndHJ1ZSc7CiAgICB2YXIgdXNlcm5hbWUgPSBub2RlU3RhdGUuZ2V0KCd1c2VybmFtZScpLmFzU3RyaW5nKCk7CgogICAgLy8gU3BlY2lmeSB0aGUgbWVzc2FnZSB5b3Ugd2FudCB0byBkaXNwbGF5LiBZb3UgbWF5IHVzZSBIVE1MIGZvciBmb3JtYXR0aW5nLiBBdm9pZCBsaW5lIGJyZWFrcyEgVXNlIDxicj4gaW5zdGVhZC4KICAgIHZhciBtZXNzYWdlID0gJ1lvdXIgRW5jb3JlIHVzZXJuYW1lIGlzOjxoMyBzdHlsZT0iY29sb3I6IzI5NDhBNzsiPicrdXNlcm5hbWUrJzwvaDM+JzsKCiAgICB2YXIgYW5jaG9yID0gJ2FuY2hvci0nK2dlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKTsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4gXAogICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiBcCiAgICAgIGZ1bmN0aW9uIChlKSB7XG4gXAogICAgICAgIHZhciBtZXNzYWdlID0gZS5maXJzdEVsZW1lbnRDaGlsZDtcbiBcCiAgICAgICAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIithbmNob3IrIicpIHtcbiBcCiAgICAgICAgICBtZXNzYWdlLmlubmVySFRNTCA9ICciK21lc3NhZ2UrIic7XG4gXAogICAgICAgIH1cbiBcCiAgICAgIH0pIjsKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgICAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKICAgICkKICAgIGlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICAgIG5ldyBmci5UZXh0T3V0cHV0Q2FsbGJhY2soCiAgICAgICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgICAgICBhbmNob3IKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9CiAgICBlbHNlIHsKICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgIH0KICB9IGNhdGNoIChlcnJvcikgewogICAgbG9nZ2VyLmVycm9yKCdFcnJvcjogJyArIGVycm9yKTsKICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2Vycm9yJywgZXJyb3IubWVzc2FnZSk7CiAgfQoKICAgLyoKICAgICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAgICogCiAgICAqIEV4YW1wbGU6CiAgICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICAqLwogIGZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbihjKSB7CiAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkqMTB8MDsKICAgICAgICAgIHZhciB2ID0gcjsKICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDEwKTsKICAgICAgfSk7CiAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"9674f7d1-7448-4544-879e-91587bb04f46\",\"name\":\"Get esv admin token\",\"description\":\"Get esc admin token\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwp2YXIgYWRtaW5Ub2tlbiA9ICBzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi5hZG1pbi50b2tlbiIpOwpzaGFyZWRTdGF0ZS5wdXQoJ2FkbWluVG9rZW4nLCBhZG1pblRva2VuKTsKb3V0Y29tZSA9ICJ0cnVlIjs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c0413dae-fdd1-45b7-9302-61d6ae02b194\",\"name\":\"FR-Debug\",\"description\":\"Debug to show AM States\",\"script\":\"LyogRElTQ0xBSU1FUjogVGhpcyBjb2RlIGlzIHByb3ZpZGVkIHRvIHlvdSBleHByZXNzbHkgYXMgYW4gZXhhbXBsZSAgKOKAnFNhbXBsZSBDb2Rl4oCdKS4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBpbmRpdmlkdWFsIHJlY2lwaWVudCB1c2VyLCBpbiBoaXMvaGVyIHNvbGUgZGlzY3JldGlvbiwgdG8gZGlsaWdlbmNlIHN1Y2ggU2FtcGxlIENvZGUgZm9yIGFjY3VyYWN5LCBjb21wbGV0ZW5lc3MsIHNlY3VyaXR5LCBhbmQgZmluYWwgZGV0ZXJtaW5hdGlvbiBmb3IgYXBwcm9wcmlhdGVuZXNzIG9mIHVzZS4gCiAqIEFOWSBTQU1QTEUgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiDigJxBUyBJU+KAnSBJUyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gRk9SR0VST0NLIEFORCBJVFMgTElDRU5TT1JTIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUywgIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCwgT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTICBPRiBNRVJDSEFOVEFCSUxJVFksIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogKiBGT1JHRVJPQ0sgU0hBTEwgTk9UIEhBVkUgQU5ZIExJQUJJTElUWSBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBBTlkgVVNFLCBJTVBMRU1FTlRBVElPTiwgSU5URUdSQVRJT04sIE9SIENPTkZJR1VSQVRJT04gT0YgQU5ZIFNBTVBMRSBDT0RFIElOIEFOWSBQUk9EVUNUSU9OIEVOVklST05NRU5UIE9SIEZPUiBBTlkgQ09NTUVSQ0lBTCBERVBMT1lNRU5UKFMpLgogKgogKiBTY3JpcHQgTmFtZTogQU0gSm91cm5leSBUZW1wbGF0ZQogKgogKiBBdXRob3JzOiBzZUBmb3JnZXJvY2suY29tCiAqIAogKiBUaGlzIHNjcmlwdCBzaG93cyBhIGRlZmF1bHQgdGVtcGxhdGUgb24gaG93IHlvdXIgU2NyaXB0aW5nIERlY2lzaW9uIE5vZGUgc2NyaXB0cyBzaG91bGQgYmUgd3JpdHRlbi4KICogSXQgc2hvd3MgeW91IGhvdyB0byB3b3JrIHdpdGggc2hhcmVkU3RhdGUsIHRyYW5zaWVudFN0YXRlLCBzZWN1cmVTdGF0ZS4KICogVGhpcyBpcyBhIGdyZWF0IGRlYnVnIHNjcmlwdCB0byB1c2UgaW4gYW5kIG9mIGl0c2VsZiBhcyBpdCB3aWxsIGRpc3BsYXkgYWxsIHRocmVlIHN0YXRlcyBtZW50aW9uZWQgYWJvdmUgaW4gYSBmb3JtYXR0ZWQgdGFibGUKICogCiAqIFRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCBub3Qgd29yayBwcm9wZXJseSBhcyBpcy4gCiAqIEl0IHJlcXVpcmVzIHNvbWUgbm9kZXMgdGhhdCBzZXQgYXQgbGVhc3Qgc2hhcmVkU3RhdGUgYmVmb3JlIGl0IGNhbiBvcGVyYXRlLgogKiBGb3IgZXhhbXBsZSwgc2V0IGEgcGFnZSBub2RlIHdpdGggUGxhdGZvcm0gVXNlcm5hbWUgYW5kIFBsYXRmb3JtIFBhc3N3b3JkIG5vZGVzCiAqIAogKiBUaGlzIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKKi8KCi8vIERvIGV2ZXJ5dGhpbmcgaW4gYSBzZWxmLWludm9raW5nIGZ1bmN0aW9uIGFuZCBkbyBub3Qgd3JpdGUgY29kZSBvdXRzaWRlIG9mIGEgZnVuY3Rpb24gb3IgeW91IHdpbGwgcGF5IGRlYXJseS4gCi8vIFRoaXMgaXMgYmVjYXVzZSBvZiB0b3AtbGV2ZWwgc2NvcGluZy93aGl0ZWxpc3RpbmcvZXRjIGlzc3VlcyB0aGF0IGdpdmUgeW91ICd1bmRlZmluZWQnIGVycm9ycy4KKGZ1bmN0aW9uICgpIHsKICBsb2dnZXIubWVzc2FnZSgiU2NyaXB0OiBzdGFydCIpOyAvLyBiZWdpbmcgb2Ygc2NyaXB0IG1haW4KICBvdXRjb21lID0gInRydWUiOyAvLyA8LSBmaWxsIGluIGRlZmF1bHQgb3V0Y29tZSBoZXJlIGFuZCBpdCBzaG91bGQgbWF0Y2ggYSAiU2NyaXB0IE91dGNvbWVzIiBzZXR0aW5nIG9uIHRoaXMgbm9kZSBpdHNlbGYKCiAgLy8gYnVpbGQgb3V0cHV0IGh0bWwgdGFibGUgdGhhdCB3aWxsIGJlIHNlbnQgYmFjayB0byBicm93c2VyCiAgdmFyIG91dHB1dCA9IGNyZWF0ZUh0bWwoKTsKCiAgLy8gaXNzdWUgY2FsbGJhY2sgdG8gYnJvd3NlciBhZnRlciBvdXRwdXQgaHRtbCBpcyBidWlsdCBmcm9tIGNyZWF0ZUh0bWwoKSBmdW5jdGlvbgogIGRpc3BsYXlNZXNzYWdlKG91dHB1dCk7CiAgCiAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmlwdDogZW5kIik7IC8vIGVuZCBvZiBzY3JpcHQgbWFpbgoKICAvKgogICogUHV0IGZ1bmN0aW9ucyBiZWxvdyBoZXJlCiAgKi8KICBmdW5jdGlvbiBjcmVhdGVIdG1sKCkgewogICAgICB2YXIgaHRtbCA9ICI8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkXCI+IjsKICAgICAgaHRtbCArPSAiPHRoZWFkIGNsYXNzPVwidGhlYWQtZGFya1wiPjx0cj48dGggY2xhc3M9XCJweC0xIHB5LTFcIiBjb2xzcGFuPVwiMlwiPlNoYXJlZCBTdGF0ZSBWYXJpYWJsZXMgKHNoYXJlZFN0YXRlLmdldCk8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAvLyBnZXQgYWxsIHRoZSBrZXlzIGluIG5vZGVTdGF0ZQogICAgICB2YXIgaXRlcmF0b3IgPSBub2RlU3RhdGUua2V5cygpLml0ZXJhdG9yKCk7CiAgICAgIHZhciBzdGF0ZUtleXMgPSBbXTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgc3RhdGVLZXlzLnB1c2goaXRlcmF0b3IubmV4dCgpLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICAgIHN0YXRlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZUtleSkgewogICAgICAgIGlmIChzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpIAogICAgICAgICAgICAmJiBzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpLnRvU3RyaW5nKCkgIT09ICJudWxsIgogICAgICAgICAgICAmJiBzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpLnRvU3RyaW5nKCkgIT09ICIiCiAgICAgICAgICAgICYmICIiK3N0YXRlS2V5ICE9PSAib2JqZWN0QXR0cmlidXRlcyIgIC8vIGdvaW5nIHRvIHB1bGwgb3V0IG9iamVjdEF0dHJpYnV0ZXMgbGF0ZXIKICAgICAgICAgICAgJiYgIiIrc3RhdGVLZXkgIT09ICJwYWdlTm9kZUNhbGxiYWNrcyIpIC8vcGFnZU5vZGVDYWxsYmFja3MgYXJlIGludGVybmFsIHRvIHRoZSBQYWdlIE5vZGUgYW5kIG5vdCBuZWVkZWQvdXNlZCAgCiAgICAgICAgewogICAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBzdGF0ZUtleSArICI8L3RkPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpICsgIjwvdGQ+PC90cj4iOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGh0bWwgKz0gIjwvdGFibGU+IjsKCiAgICAgIGh0bWwgKz0gIjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWRcIj4iOwogICAgICAKICAgICAgaHRtbCArPSAiPHRoZWFkIGNsYXNzPVwidGhlYWQtZGFya1wiPjx0cj48dGggY2xhc3M9XCJweC0xIHB5LTFcIiBjb2xzcGFuPVwiMlwiPlRyYW5zaWVudCBTdGF0ZSBWYXJpYWJsZXMgKHRyYW5zaWVudFN0YXRlLmdldCk8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAvLyBnZXQgYWxsIHRoZSBrZXlzIGluIG5vZGVTdGF0ZQogICAgICB2YXIgaXRlcmF0b3IgPSBub2RlU3RhdGUua2V5cygpLml0ZXJhdG9yKCk7CiAgICAgIHZhciBzdGF0ZUtleXMgPSBbXTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgc3RhdGVLZXlzLnB1c2goaXRlcmF0b3IubmV4dCgpLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICAgIHN0YXRlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZUtleSkgewogICAgICAgIGlmICh0cmFuc2llbnRTdGF0ZS5nZXQoc3RhdGVLZXkpIAogICAgICAgICAgICAmJiB0cmFuc2llbnRTdGF0ZS5nZXQoc3RhdGVLZXkpLnRvU3RyaW5nKCkgIT09ICJudWxsIiAKICAgICAgICAgICAgJiYgdHJhbnNpZW50U3RhdGUuZ2V0KHN0YXRlS2V5KS50b1N0cmluZygpICE9PSAiIgogICAgICAgICAgICAmJiAiIitzdGF0ZUtleSAhPT0gIm9iamVjdEF0dHJpYnV0ZXMiKSAKICAgICAgICB7CiAgICAgICAgICBodG1sICs9ICI8dHI+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIHN0YXRlS2V5ICsgIjwvdGQ+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIHRyYW5zaWVudFN0YXRlLmdldChzdGF0ZUtleSkgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwoKICAgICAgaHRtbCArPSAiPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPiI7CiAgICAgIC8vIEJ1aWxkIHRoZSB0YWJsZSBvZiBvYmplY3RBdHRyaWJ1dGVzIGluIHNoYXJlZFN0YXRlCiAgICAgIGlmIChzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKSkKICAgICAgeyAgIAogICAgICAgIGh0bWwgKz0gIjx0aGVhZCBjbGFzcz1cInRoZWFkLWRhcmtcIj48dHI+PHRoIGNsYXNzPVwicHgtMSBweS0xXCIgY29sc3Bhbj1cIjJcIj5TaGFyZWQgT2JqZWN0IEF0dHJpYnV0ZXMgKHNoYXJlZFN0YXRlLmdldCk8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAgIHZhciBlbnRyaWVzID0gc2hhcmVkU3RhdGUuZ2V0KCdvYmplY3RBdHRyaWJ1dGVzJykuZW50cnlTZXQoKS50b0FycmF5KCk7CiAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkgeyAvLyBzaG93aW5nIGhvdyB0byB1c2UgZW50cnlTZXQoKS4gQ2FuIHVzZSBrZXlTZXQoKS4KICAgICAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBlbnRyeS5nZXRLZXkoKSArICI8L3RkPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBlbnRyeS5nZXRWYWx1ZSgpICsgIjwvdGQ+PC90cj4iOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGh0bWwgKz0gIjx0cj48dGQgY29sc3Bhbj1cIjJcIj5FTVBUWTwvdGQ+PC90cj4iOwogICAgICB9CiAgICAgIGh0bWwgKz0gIjwvdGFibGU+IjsKCiAgICAgIGh0bWwgKz0gIjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWRcIj4iOwogICAgICAvLyBCdWlsZCB0aGUgdGFibGUgb2Ygb2JqZWN0QXR0cmlidXRlcyBpbiB0cmFuc2llbnRTdGF0ZQogICAgICBpZiAodHJhbnNpZW50U3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikpCiAgICAgIHsKICAgICAgICBodG1sICs9ICI8dGhlYWQgY2xhc3M9XCJ0aGVhZC1kYXJrXCI+PHRyPjx0aCBjbGFzcz1cInB4LTEgcHktMVwiIGNvbHNwYW49XCIyXCI+VHJhbnNpZW50IE9iamVjdCBBdHRyaWJ1dGVzICh0cmFuc2llbnRTdGF0ZS5nZXQpPC90aD48L3RyPjwvdGhlYWQ+IjsKICAgICAgICB2YXIga2V5cyA9IHRyYW5zaWVudFN0YXRlLmdldCgnb2JqZWN0QXR0cmlidXRlcycpLmtleVNldCgpLnRvQXJyYXkoKTsKICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyAvLyBzaG93aW5nIGhvdyB0byB1c2Uga2V5U2V0KCkuIENhbiB1c2UgZW50cnlTZXQoKS4KICAgICAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBrZXkgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgdHJhbnNpZW50U3RhdGUuZ2V0KCdvYmplY3RBdHRyaWJ1dGVzJykuZ2V0KGtleSkgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPkVNUFRZPC90ZD48L3RyPiI7CiAgICAgIH0KICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwoKICAgICAgaHRtbCArPSAiPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPiI7CiAgICAgIGh0bWwgKz0gIjx0aGVhZCBjbGFzcz1cInRoZWFkLWRhcmtcIj48dHI+PHRoIGNsYXNzPVwicHgtMSBweS0xXCIgY29sc3Bhbj1cIjJcIj5ub2RlU3RhdGUuZ2V0ICh0cmFuc2llbnRTdGF0ZSwgc2VjdXJlU3RhdGUsIHNoYXJlZFN0YXRlKTwvdGg+PC90cj48L3RoZWFkPiI7CiAgICAgIC8vIGdldCBhbGwgdGhlIGtleXMgaW4gbm9kZVN0YXRlCiAgICAgIHZhciBpdGVyYXRvciA9IG5vZGVTdGF0ZS5rZXlzKCkuaXRlcmF0b3IoKTsKICAgICAgdmFyIHN0YXRlS2V5cyA9IFtdOwogICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7CiAgICAgICAgICBzdGF0ZUtleXMucHVzaChpdGVyYXRvci5uZXh0KCkudG9TdHJpbmcoKSk7CiAgICAgIH0KICAgICAgc3RhdGVLZXlzLmZvckVhY2goZnVuY3Rpb24gKHN0YXRlS2V5KSB7CiAgICAgICAgaWYgKG5vZGVTdGF0ZS5nZXQoc3RhdGVLZXkpIAogICAgICAgICAgICAmJiBub2RlU3RhdGUuZ2V0KHN0YXRlS2V5KS50b1N0cmluZygpICE9PSAibnVsbCIKICAgICAgICAgICAgJiYgbm9kZVN0YXRlLmdldChzdGF0ZUtleSkudG9TdHJpbmcoKSAhPT0gIiIKICAgICAgICAgICAgJiYgIiIrc3RhdGVLZXkgIT09ICJwYWdlTm9kZUNhbGxiYWNrcyIpIC8vcGFnZU5vZGVDYWxsYmFja3MgYXJlIGludGVybmFsIHRvIHRoZSBQYWdlIE5vZGUgYW5kIG5vdCBuZWVkZWQvdXNlZCAgCgogICAgICAgIHsKICAgICAgICAgIGh0bWwgKz0gIjx0cj48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgc3RhdGVLZXkgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgbm9kZVN0YXRlLmdldChzdGF0ZUtleSkgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwoKCiAgICAgIGh0bWwgKz0gIjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWRcIj4iOwogICAgICAvLyBsb29raW5nIGZvciBhIHdheSB0byBidWlsZCB0aGlzIEFNIFVzZXIgUHJvZmlsZSBsaXN0IGR5bmFtaWNhbGx5CiAgICAgIHZhciBvYmpBTUF0dHJzID0gWwogICAgICAgICJ1aWQiLAogICAgICAgICJjbiIsCiAgICAgICAgImluZXRVc2VyU3RhdHVzIiwKICAgICAgICAiZ2l2ZW5OYW1lIiwKICAgICAgICAic24iLAogICAgICAgICJtYWlsIiwKICAgICAgICAiZGVzY3JpcHRpb24iLAogICAgICAgICJ0ZWxlcGhvbmVOdW1iZXIiLAogICAgICAgICJzdHJlZXQiLAogICAgICAgICJsIiwKICAgICAgICAicG9zdGFsQ29kZSIsCiAgICAgICAgImNvIiwKICAgICAgICAic3QiLAogICAgICAgICJkaXNwbGF5TmFtZSIsCiAgICAgICAgImZyLWF0dHItaXN0cjEiLAogICAgICAgICJmci1hdHRyLWlzdHIyIiwKICAgICAgICAiZnItYXR0ci1pc3RyMyIsCiAgICAgICAgImZyLWF0dHItaXN0cjQiLAogICAgICAgICJmci1hdHRyLWlzdHI1IiwKICAgICAgICAiZnItYXR0ci1zdHIxIiwKICAgICAgICAiZnItYXR0ci1zdHIyIiwKICAgICAgICAiZnItYXR0ci1zdHIzIiwKICAgICAgICAiZnItYXR0ci1zdHI0IiwKICAgICAgICAiZnItYXR0ci1zdHI1IiwKICAgICAgICAiZnItYXR0ci1pbXVsdGkxIiwKICAgICAgICAiZnItYXR0ci1pbXVsdGkyIiwKICAgICAgICAiZnItYXR0ci1pbXVsdGkzIiwKICAgICAgICAiZnItYXR0ci1pbXVsdGk0IiwKICAgICAgICAiZnItYXR0ci1pbXVsdGk1IiwKICAgICAgICAiZnItYXR0ci1tdWx0aTEiLAogICAgICAgICJmci1hdHRyLW11bHRpMiIsCiAgICAgICAgImZyLWF0dHItbXVsdGkzIiwKICAgICAgICAiZnItYXR0ci1tdWx0aTQiLAogICAgICAgICJmci1hdHRyLW11bHRpNSIsCiAgICAgICAgImZyLWF0dHItaWRhdGUxIiwKICAgICAgICAiZnItYXR0ci1pZGF0ZTIiLAogICAgICAgICJmci1hdHRyLWlkYXRlMyIsCiAgICAgICAgImZyLWF0dHItaWRhdGU0IiwKICAgICAgICAiZnItYXR0ci1pZGF0ZTUiLAogICAgICAgICJmci1hdHRyLWRhdGUxIiwKICAgICAgICAiZnItYXR0ci1kYXRlMiIsCiAgICAgICAgImZyLWF0dHItZGF0ZTMiLAogICAgICAgICJmci1hdHRyLWRhdGU0IiwKICAgICAgICAiZnItYXR0ci1kYXRlNSIsCiAgICAgICAgImZyLWF0dHItaWludDEiLAogICAgICAgICJmci1hdHRyLWlpbnQyIiwKICAgICAgICAiZnItYXR0ci1paW50MyIsCiAgICAgICAgImZyLWF0dHItaWludDQiLAogICAgICAgICJmci1hdHRyLWlpbnQ1IiwKICAgICAgICAiZnItYXR0ci1pbnQxIiwKICAgICAgICAiZnItYXR0ci1pbnQyIiwKICAgICAgICAiZnItYXR0ci1pbnQzIiwKICAgICAgICAiZnItYXR0ci1pbnQ0IiwKICAgICAgICAiZnItYXR0ci1pbnQ1IgogICAgICBdOyAgCgogICAgICAvLyBCdWlsZCB0aGUgdGFibGUgb2YgaWRSZXBvc2l0b3J5IGJpbmRpbmcKICAgICAgdmFyIGF0dHJzMjsKICAgICAgaWYgKHNoYXJlZFN0YXRlLmdldCgiX2lkIikgJiYgaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpLCAidWlkIikpCiAgICAgIHsKICAgICAgICBodG1sICs9ICI8dGhlYWQgY2xhc3M9XCJ0aGVhZC1kYXJrXCI+PHRyPjx0aCBjbGFzcz1cInB4LTEgcHktMVwiIGNvbHNwYW49XCIyXCI+aWRSZXBvc2l0b3J5IEFNIFVzZXIgUHJvZmlsZTwvdGg+PC90cj48L3RoZWFkPiI7ICAgICAgICAKICAgICAgICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwogICAgICAgIG9iakFNQXR0cnMuZm9yRWFjaChmdW5jdGlvbiAoYXR0cikgewogICAgICAgICAgYXR0cnMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCBhdHRyKTsgIAogICAgICAgICAgaWYgKGF0dHJzICYmICIiK2F0dHJzICE9PSAibnVsbCIgJiYgIiIrYXR0cnMgIT09ICIiICYmICIiK2F0dHJzLnNpemUoKT4wKXsKICAgICAgICAgICAgaWYgKGF0dHJzLnNpemUoKT09PTEpewogICAgICAgICAgICAgICAgYXR0cnMgPSBzaW5nbGVWYWx1ZShhdHRycyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBodG1sICs9ICI8dHI+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIGF0dHIgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgYXR0cnMgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgICB9CiAgICAgICAgfSk7ICAgICAgCiAgICAgIH0KICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwogICAgICAKICAgICAgaHRtbCArPSAiPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPiI7CiAgICAgIGh0bWwgKz0gIjx0aGVhZCBjbGFzcz1cInRoZWFkLWRhcmtcIj48dHI+PHRoIGNsYXNzPVwicHgtMSBweS0xXCIgY29sc3Bhbj1cIjJcIj5SZXF1ZXN0IEhlYWRlcnM8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAvL2h0bWwgKz0gIjx0cj48dGQgY29sc3Bhbj1cIjJcIj4iICsgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSArICI8L3RkPjwvdHI+IjsKICAgICAgdmFyIHJIZWFkZXJzID0gU3RyaW5nKHJlcXVlc3RIZWFkZXJzKS5zcGxpdCgnXSwgJykubWFwKGZ1bmN0aW9uIChoZWFkZXIpewogICAgICAgIHJldHVybiBoZWFkZXIuc3BsaXQoJz0nKVswXS5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpOyAKICAgICAgfSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICBySGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChoZWFkZXJOYW1lKSB7CiAgICAgICAgdmFyIGhlYWRlciA9IHJlcXVlc3RIZWFkZXJzLmdldChoZWFkZXJOYW1lKTsKICAgICAgICBodG1sICs9ICI8dHI+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIGhlYWRlck5hbWUgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgaGVhZGVyLmdldCgwKSArICI8L3RkPjwvdHI+IjsKICAgICAgfSk7ICAgIAogICAgCiAgICBodG1sICs9ICI8L3RhYmxlPiI7CiAgICAgIAogICAgcmV0dXJuIGh0bWw7CiAgfQogIAogIC8vYnVpbGRzIHRoZSBodG1sIHRvIGRpc3BsYXkgdGhlIG1lc3NhZ2UgaW4gdGhlIGJyb3dzZXIgb24gdGhlIGNhbGxiYWNrCiAgLy91c2UgdmlldyBzb3VyY2UgaW4gYnJvd3NlciBhbmQgbG9vayBmb3IgY2xhc3M9ImNhbGxiYWNrLWNvbXBvbmVudCIgdG8gc2VlIGh0bWwgcmVzcG9uc2UKICBmdW5jdGlvbiBkaXNwbGF5TWVzc2FnZShtZXNzYWdlKSB7CiAgICAgIHZhciBhbmNob3IgPSAiYW5jaG9yLSIuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CiAgICAgIHZhciBoYWxpZ24gPSAibGVmdCI7CiAgICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4iLmNvbmNhdCgKICAgICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAgICAgICAgICAgICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAgICAgICAgICAgICAgICAgIiAgdmFyIG1lc3NhZ2UgPSBlLmZpcnN0RWxlbWVudENoaWxkO1xuIikuY29uY2F0KAogICAgICAgICAgICAgICAgICAgICAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwiXCI7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgbWVzc2FnZS5zdHlsZSA9IFwiXCI7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIG1lc3NhZ2UuYWxpZ24gPSBcIiIpLmNvbmNhdChoYWxpZ24pLmNvbmNhdCgiXCI7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBtZXNzYWdlLmlubmVySFRNTCA9ICciKS5jb25jYXQobWVzc2FnZSkuY29uY2F0KCInO1xuIikuY29uY2F0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICB9XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSkiKQogICAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suVGV4dE91dHB1dENhbGxiYWNrLAogICAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICAgICkKICAgICAgaWYgKG1lc3NhZ2UubGVuZ3RoICYmIGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKAogICAgICAgICAgICAgIG5ldyBmci5UZXh0T3V0cHV0Q2FsbGJhY2soCiAgICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgICAgYW5jaG9yCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkKICAgICAgICAgICkuYnVpbGQoKQogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgICAgfQogIH0KCiAgLyoKICAgKiBHZW5lcmF0ZSBhIHRva2VuIGluIHRoZSBkZXNpcmVkIGZvcm1hdC4gQWxsICd4JyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHJhbmRvbSBudW1iZXIgMC05LgogICAqIFRoaXMgaXMgbmVlZGVkIHRvIGhhdmUgYSB1bmlxdWUgZGl2KGFuY2hvci14KSBvbiB0aGUgaHRtbCBjYWxsYmFjayB0aGF0IHdlIGNhbiBwb3B1bGF0ZSBkYXRhCiAgICogRXhhbXBsZToKICAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICovCiAgZnVuY3Rpb24gZ2VuZXJhdGVOdW1lcmljVG9rZW4oZm9ybWF0KSB7CiAgICAgIHJldHVybiBmb3JtYXQucmVwbGFjZSgvW3hdL2csIGZ1bmN0aW9uIChjKSB7CiAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxMCB8IDA7CiAgICAgICAgICB2YXIgdiA9IHI7CiAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICAgIH0pOwogIH0KCiAgLy8gZ2V0IGEgc2luZ2xlVmFsdWUgZnJvbSBhIEhhc2hTZXQKICBmdW5jdGlvbiBzaW5nbGVWYWx1ZSh4KQogIHsKICAgIGlmKHguc2l6ZSgpPjApCiAgICAgIHsKICAgICAgICByZXR1cm4geC5pdGVyYXRvcigpLm5leHQoKTsKICAgICAgfQogICAgICAKICAgIHJldHVybiAiIjsKICAgIAogIH0KCn0oKSk7IC8vIHNlbGYtaW52b2tpbmcgZnVuY3Rpb24=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"10643e95-873a-4ec0-b713-a7f56760d179\",\"name\":\"FrodoTestScript4\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"0414eed8-abfd-43bb-94b5-c841a8ba2c98\",\"name\":\"pushBomb.js\",\"description\":\"null\",\"script\":\"dmFyIGF0dHJpYnV0ZSA9ICJmci1hdHRyLXN0cjIiOwp2YXIgdGhyZXNob2xkID0gMjsKb3V0Y29tZSA9ICJkZWZhdWx0IjsKdmFyIG5vdyA9IG5ldyBEYXRlKCkgIAp2YXIgZXBvY2ggPSBNYXRoLnJvdW5kKG5vdy5nZXRUaW1lKCkgLyAxMDAwKTsKdmFyIGVwb2NoQ3VycmVudE1pbnV0ZSA9IE1hdGgucm91bmQoZXBvY2gvNjApOwoKdmFyIHVzZXJBdHRyOwp2YXIgX2lkID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKdmFyIGVwb2NoQXR0ck1pbnV0ZT0wOwp2YXIgYXR0ZW1wdENvdW50PTE7Cgp2YXIgdXNlclByZWZlcmVuY2VzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShfaWQsICJmci1pZG0tcHJlZmVyZW5jZXMiKS50b1N0cmluZygpOwoKaWYodXNlclByZWZlcmVuY2VzLmluZGV4T2YoIlwiY3VzdG9tX3B1c2hcIjp0cnVlIikgPiAtMSkKewogICAgb3V0Y29tZSA9ICJzdXNwZW5kZWQiOwp9CmVsc2UKewogIHZhciB1c2VyQXR0clJhdyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoX2lkLCBhdHRyaWJ1dGUpOwogIGlmICh1c2VyQXR0clJhdyAmJiB1c2VyQXR0clJhdy5pdGVyYXRvcigpLmhhc05leHQoKSkgewogICAgICB1c2VyQXR0ciA9IEpTT04ucGFyc2UodXNlckF0dHJSYXcuaXRlcmF0b3IoKS5uZXh0KCkudG9TdHJpbmcoKSk7CiAgICAgIGVwb2NoQXR0ck1pbnV0ZSA9IHVzZXJBdHRyWzBdOwogICAgICBhdHRlbXB0Q291bnQgPSB1c2VyQXR0clsxXTsKICAgICAgYXR0ZW1wdENvdW50ID0gYXR0ZW1wdENvdW50ICsgMTsKICB9CgogIC8vaWYoCgogIHZhciBuZXdBdHRyOwogIGlmKGVwb2NoQ3VycmVudE1pbnV0ZT09ZXBvY2hBdHRyTWludXRlKSB7CiAgICAgIG5ld0F0dHIgPSBTdHJpbmcoIlsiICsgZXBvY2hBdHRyTWludXRlLnRvU3RyaW5nKCkgKyAiLCIgKyBhdHRlbXB0Q291bnQudG9TdHJpbmcoKSAgKyAiXSIpOwogIH0KICBlbHNlIHsKICAgICAgYXR0ZW1wdENvdW50PTE7CiAgICAgIG5ld0F0dHIgPSBTdHJpbmcoIlsiICsgZXBvY2hDdXJyZW50TWludXRlLnRvU3RyaW5nKCkgKyAiLCIgKyBhdHRlbXB0Q291bnQudG9TdHJpbmcoKSArICJdIik7CiAgfQogIGlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoX2lkLCAiZnItYXR0ci1zdHIyIixbbmV3QXR0cl0pOwoKICBpZihhdHRlbXB0Q291bnQ+dGhyZXNob2xkKSB7CiAgICBvdXRjb21lID0gInRydWUiOwogIH0KICBlbHNlIHsKICAgIG91dGNvbWUgPSAiZmFsc2UiOwogIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"157298c0-7d31-4059-a95b-eeb08473b7e5\",\"name\":\"Device Id (Match) - Client Side\",\"description\":\"Default global script for client side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGZvbnREZXRlY3RvciA9IChmdW5jdGlvbiAoKSB7CiAgICAvKioKICAgICAqIEphdmFTY3JpcHQgY29kZSB0byBkZXRlY3QgYXZhaWxhYmxlIGF2YWlsYWJpbGl0eSBvZiBhCiAgICAgKiBwYXJ0aWN1bGFyIGZvbnQgaW4gYSBicm93c2VyIHVzaW5nIEphdmFTY3JpcHQgYW5kIENTUy4KICAgICAqCiAgICAgKiBBdXRob3IgOiBMYWxpdCBQYXRlbAogICAgICogV2Vic2l0ZTogaHR0cDovL3d3dy5sYWxpdC5vcmcvbGFiL2phdmFzY3JpcHQtY3NzLWZvbnQtZGV0ZWN0LwogICAgICogTGljZW5zZTogQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wCiAgICAgKiAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAgICAqIFZlcnNpb246IDAuMTUgKDIxIFNlcCAyMDA5KQogICAgICogICAgICAgICAgQ2hhbmdlZCBjb21wYXJpc2lvbiBmb250IHRvIGRlZmF1bHQgZnJvbSBzYW5zLWRlZmF1bHQtZGVmYXVsdCwKICAgICAqICAgICAgICAgIGFzIGluIEZGMy4wIGZvbnQgb2YgY2hpbGQgZWxlbWVudCBkaWRuJ3QgZmFsbGJhY2sKICAgICAqICAgICAgICAgIHRvIHBhcmVudCBlbGVtZW50IGlmIHRoZSBmb250IGlzIG1pc3NpbmcuCiAgICAgKiBWZXJzaW9uOiAwLjIgKDA0IE1hciAyMDEyKQogICAgICogICAgICAgICAgQ29tcGFyaW5nIGZvbnQgYWdhaW5zdCBhbGwgdGhlIDMgZ2VuZXJpYyBmb250IGZhbWlsaWVzIGllLAogICAgICogICAgICAgICAgJ21vbm9zcGFjZScsICdzYW5zLXNlcmlmJyBhbmQgJ3NhbnMnLiBJZiBpdCBkb2Vzbid0IG1hdGNoIGFsbCAzCiAgICAgKiAgICAgICAgICB0aGVuIHRoYXQgZm9udCBpcyAxMDAlIG5vdCBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbQogICAgICogVmVyc2lvbjogMC4zICgyNCBNYXIgMjAxMikKICAgICAqICAgICAgICAgIFJlcGxhY2VkIHNhbnMgd2l0aCBzZXJpZiBpbiB0aGUgbGlzdCBvZiBiYXNlRm9udHMKICAgICAqLwogICAgLyoKICAgICAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMgRm9yZ2VSb2NrIEFTLgogICAgICovCiAgICB2YXIgZGV0ZWN0b3IgPSB7fSwgYmFzZUZvbnRzLCB0ZXN0U3RyaW5nLCB0ZXN0U2l6ZSwgaCwgcywgZGVmYXVsdFdpZHRoID0ge30sIGRlZmF1bHRIZWlnaHQgPSB7fSwgaW5kZXg7CgogICAgLy8gYSBmb250IHdpbGwgYmUgY29tcGFyZWQgYWdhaW5zdCBhbGwgdGhlIHRocmVlIGRlZmF1bHQgZm9udHMuCiAgICAvLyBhbmQgaWYgaXQgZG9lc24ndCBtYXRjaCBhbGwgMyB0aGVuIHRoYXQgZm9udCBpcyBub3QgYXZhaWxhYmxlLgogICAgYmFzZUZvbnRzID0gWydtb25vc3BhY2UnLCAnc2Fucy1zZXJpZicsICdzZXJpZiddOwoKICAgIC8vd2UgdXNlIG0gb3IgdyBiZWNhdXNlIHRoZXNlIHR3byBjaGFyYWN0ZXJzIHRha2UgdXAgdGhlIG1heGltdW0gd2lkdGguCiAgICAvLyBBbmQgd2UgdXNlIGEgTExpIHNvIHRoYXQgdGhlIHNhbWUgbWF0Y2hpbmcgZm9udHMgY2FuIGdldCBzZXBhcmF0ZWQKICAgIHRlc3RTdHJpbmcgPSAibW1tbW1tbW1tbWxsaSI7CgogICAgLy93ZSB0ZXN0IHVzaW5nIDcycHggZm9udCBzaXplLCB3ZSBtYXkgdXNlIGFueSBzaXplLiBJIGd1ZXNzIGxhcmdlciB0aGUgYmV0dGVyLgogICAgdGVzdFNpemUgPSAnNzJweCc7CgogICAgaCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07CgogICAgLy8gY3JlYXRlIGEgU1BBTiBpbiB0aGUgZG9jdW1lbnQgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgdGV4dCB3ZSB1c2UgdG8gdGVzdAogICAgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIHMuc3R5bGUuZm9udFNpemUgPSB0ZXN0U2l6ZTsKICAgIHMuaW5uZXJIVE1MID0gdGVzdFN0cmluZzsKICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHQgd2lkdGggZm9yIHRoZSB0aHJlZSBiYXNlIGZvbnRzCiAgICAgICAgcy5zdHlsZS5mb250RmFtaWx5ID0gYmFzZUZvbnRzW2luZGV4XTsKICAgICAgICBoLmFwcGVuZENoaWxkKHMpOwogICAgICAgIGRlZmF1bHRXaWR0aFtiYXNlRm9udHNbaW5kZXhdXSA9IHMub2Zmc2V0V2lkdGg7IC8vd2lkdGggZm9yIHRoZSBkZWZhdWx0IGZvbnQKICAgICAgICBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dID0gcy5vZmZzZXRIZWlnaHQ7IC8vaGVpZ2h0IGZvciB0aGUgZGVmdWFsdCBmb250CiAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgIH0KCiAgICBkZXRlY3Rvci5kZXRlY3QgPSBmdW5jdGlvbihmb250KSB7CiAgICAgICAgdmFyIGRldGVjdGVkID0gZmFsc2UsIGluZGV4LCBtYXRjaGVkOwogICAgICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgICAgIHMuc3R5bGUuZm9udEZhbWlseSA9IGZvbnQgKyAnLCcgKyBiYXNlRm9udHNbaW5kZXhdOyAvLyBuYW1lIG9mIHRoZSBmb250IGFsb25nIHdpdGggdGhlIGJhc2UgZm9udCBmb3IgZmFsbGJhY2suCiAgICAgICAgICAgIGguYXBwZW5kQ2hpbGQocyk7CiAgICAgICAgICAgIG1hdGNoZWQgPSAocy5vZmZzZXRXaWR0aCAhPT0gZGVmYXVsdFdpZHRoW2Jhc2VGb250c1tpbmRleF1dIHx8IHMub2Zmc2V0SGVpZ2h0ICE9PSBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dKTsKICAgICAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgICAgICAgICAgZGV0ZWN0ZWQgPSBkZXRlY3RlZCB8fCBtYXRjaGVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGV0ZWN0ZWQ7CiAgICB9OwoKICAgIHJldHVybiBkZXRlY3RvcjsKfSgpKTsKLyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAxNCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGNvbGxlY3RTY3JlZW5JbmZvID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBzY3JlZW5JbmZvID0ge307CiAgICAgICAgaWYgKHNjcmVlbikgewogICAgICAgICAgICBpZiAoc2NyZWVuLndpZHRoKSB7CiAgICAgICAgICAgICAgICBzY3JlZW5JbmZvLnNjcmVlbldpZHRoID0gc2NyZWVuLndpZHRoOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLmhlaWdodCkgewogICAgICAgICAgICAgICAgc2NyZWVuSW5mby5zY3JlZW5IZWlnaHQgPSBzY3JlZW4uaGVpZ2h0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLnBpeGVsRGVwdGgpIHsKICAgICAgICAgICAgICAgIHNjcmVlbkluZm8uc2NyZWVuQ29sb3VyRGVwdGggPSBzY3JlZW4ucGl4ZWxEZXB0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3Qgc2NyZWVuIGluZm9ybWF0aW9uLiBzY3JlZW4gaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzY3JlZW5JbmZvOwogICAgfSwKICAgIGNvbGxlY3RUaW1lem9uZUluZm8gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHRpbWV6b25lSW5mbyA9ICB7fSwgb2Zmc2V0ID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOwoKICAgICAgICBpZiAob2Zmc2V0KSB7CiAgICAgICAgICAgIHRpbWV6b25lSW5mby50aW1lem9uZSA9IG9mZnNldDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbm5vdCBjb2xsZWN0IHRpbWV6b25lIGluZm9ybWF0aW9uLiB0aW1lem9uZSBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aW1lem9uZUluZm87CiAgICB9LAogICAgY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbyA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgaWYgKG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IucGx1Z2lucykgewogICAgICAgICAgICB2YXIgcGx1Z2luc0luZm8gPSB7fSwgaSwgcGx1Z2lucyA9IG5hdmlnYXRvci5wbHVnaW5zOwogICAgICAgICAgICBwbHVnaW5zSW5mby5pbnN0YWxsZWRQbHVnaW5zID0gIiI7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGx1Z2luc0luZm8uaW5zdGFsbGVkUGx1Z2lucyA9IHBsdWdpbnNJbmZvLmluc3RhbGxlZFBsdWdpbnMgKyBwbHVnaW5zW2ldLmZpbGVuYW1lICsgIjsiOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcGx1Z2luc0luZm87CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBicm93c2VyIHBsdWdpbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLnBsdWdpbnMgaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgICAgIHJldHVybiB7fTsKICAgICAgICB9CgogICAgfSwKLy8gR2V0dGluZyBnZW9sb2NhdGlvbiB0YWtlcyBzb21lIHRpbWUgYW5kIGlzIGRvbmUgYXN5bmNocm9ub3VzbHksIGhlbmNlIG5lZWQgYSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgb25jZSBnZW9sb2NhdGlvbiBpcyByZXRyaWV2ZWQuCiAgICBjb2xsZWN0R2VvbG9jYXRpb25JbmZvID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIGdlb2xvY2F0aW9uSW5mbyA9IHt9LAogICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgICAgICAgICAgZ2VvbG9jYXRpb25JbmZvLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGU7CiAgICAgICAgICAgICAgICBnZW9sb2NhdGlvbkluZm8ubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGU7CiAgICAgICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgICAgICB9LCBlcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3QgZ2VvbG9jYXRpb24gaW5mb3JtYXRpb24uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVycm9yLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgY2FsbGJhY2soZ2VvbG9jYXRpb25JbmZvKTsKICAgICAgICAgICAgfTsKICAgICAgICBpZiAobmF2aWdhdG9yICYmIG5hdmlnYXRvci5nZW9sb2NhdGlvbikgewogICAgICAgICAgICAvLyBOQjogSWYgdXNlciBjaG9vc2VzICdOb3Qgbm93JyBvbiBGaXJlZm94IG5laXRoZXIgY2FsbGJhY2sgZ2V0cyBjYWxsZWQKICAgICAgICAgICAgLy8gICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NTUzMwogICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBnZW9sb2NhdGlvbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgIH0KICAgIH0sCiAgICBjb2xsZWN0QnJvd3NlckZvbnRzSW5mbyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZm9udHNJbmZvID0ge30sIGksIGZvbnRzTGlzdCA9IFsiY3Vyc2l2ZSIsIm1vbm9zcGFjZSIsInNlcmlmIiwic2Fucy1zZXJpZiIsImZhbnRhc3kiLCJkZWZhdWx0IiwiQXJpYWwiLCJBcmlhbCBCbGFjayIsCiAgICAgICAgICAgICJBcmlhbCBOYXJyb3ciLCJBcmlhbCBSb3VuZGVkIE1UIEJvbGQiLCJCb29rbWFuIE9sZCBTdHlsZSIsIkJyYWRsZXkgSGFuZCBJVEMiLCJDZW50dXJ5IiwiQ2VudHVyeSBHb3RoaWMiLAogICAgICAgICAgICAiQ29taWMgU2FucyBNUyIsIkNvdXJpZXIiLCJDb3VyaWVyIE5ldyIsIkdlb3JnaWEiLCJHZW50aXVtIiwiSW1wYWN0IiwiS2luZyIsIkx1Y2lkYSBDb25zb2xlIiwiTGFsaXQiLAogICAgICAgICAgICAiTW9kZW5hIiwiTW9ub3R5cGUgQ29yc2l2YSIsIlBhcHlydXMiLCJUYWhvbWEiLCJUZVgiLCJUaW1lcyIsIlRpbWVzIE5ldyBSb21hbiIsIlRyZWJ1Y2hldCBNUyIsIlZlcmRhbmEiLAogICAgICAgICAgICAiVmVyb25hIl07CiAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gIiI7CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBmb250c0xpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGZvbnREZXRlY3Rvci5kZXRlY3QoZm9udHNMaXN0W2ldKSkgewogICAgICAgICAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzICsgZm9udHNMaXN0W2ldICsgIjsiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb250c0luZm87CiAgICB9LAogICAgZGV2aWNlUHJpbnQgPSB7fTsKCmRldmljZVByaW50LnNjcmVlbiA9IGNvbGxlY3RTY3JlZW5JbmZvKCk7CmRldmljZVByaW50LnRpbWV6b25lID0gY29sbGVjdFRpbWV6b25lSW5mbygpOwpkZXZpY2VQcmludC5wbHVnaW5zID0gY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbygpOwpkZXZpY2VQcmludC5mb250cyA9IGNvbGxlY3RCcm93c2VyRm9udHNJbmZvKCk7CgppZiAobmF2aWdhdG9yLnVzZXJBZ2VudCkgewogICAgZGV2aWNlUHJpbnQudXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKfQppZiAobmF2aWdhdG9yLmFwcE5hbWUpIHsKICAgIGRldmljZVByaW50LmFwcE5hbWUgPSBuYXZpZ2F0b3IuYXBwTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcENvZGVOYW1lKSB7CiAgICBkZXZpY2VQcmludC5hcHBDb2RlTmFtZSA9IG5hdmlnYXRvci5hcHBDb2RlTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcFZlcnNpb24pIHsKICAgIGRldmljZVByaW50LmFwcFZlcnNpb24gPSBuYXZpZ2F0b3IuYXBwVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbikgewogICAgZGV2aWNlUHJpbnQuYXBwTWlub3JWZXJzaW9uID0gbmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmJ1aWxkSUQpIHsKICAgIGRldmljZVByaW50LmJ1aWxkSUQgPSBuYXZpZ2F0b3IuYnVpbGRJRDsKfQppZiAobmF2aWdhdG9yLnBsYXRmb3JtKSB7CiAgICBkZXZpY2VQcmludC5wbGF0Zm9ybSA9IG5hdmlnYXRvci5wbGF0Zm9ybTsKfQppZiAobmF2aWdhdG9yLmNwdUNsYXNzKSB7CiAgICBkZXZpY2VQcmludC5jcHVDbGFzcyA9IG5hdmlnYXRvci5jcHVDbGFzczsKfQppZiAobmF2aWdhdG9yLm9zY3B1KSB7CiAgICBkZXZpY2VQcmludC5vc2NwdSA9IG5hdmlnYXRvci5vc2NwdTsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3QpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3QgPSBuYXZpZ2F0b3IucHJvZHVjdDsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3RTdWIpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3RTdWIgPSBuYXZpZ2F0b3IucHJvZHVjdFN1YjsKfQppZiAobmF2aWdhdG9yLnZlbmRvcikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yID0gbmF2aWdhdG9yLnZlbmRvcjsKfQppZiAobmF2aWdhdG9yLnZlbmRvclN1YikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yU3ViID0gbmF2aWdhdG9yLnZlbmRvclN1YjsKfQppZiAobmF2aWdhdG9yLmxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5sYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnVzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQudXNlckxhbmd1YWdlID0gbmF2aWdhdG9yLnVzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQuYnJvd3Nlckxhbmd1YWdlID0gbmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnN5c3RlbUxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5zeXN0ZW1MYW5ndWFnZSA9IG5hdmlnYXRvci5zeXN0ZW1MYW5ndWFnZTsKfQoKLy8gQXR0ZW1wdCB0byBjb2xsZWN0IGdlby1sb2NhdGlvbiBpbmZvcm1hdGlvbiBhbmQgcmV0dXJuIHRoaXMgd2l0aCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgovLyBPdGhlcndpc2UsIGlmIGdlby1sb2NhdGlvbiBmYWlscyBvciB0YWtlcyBsb25nZXIgdGhhbiAzMCBzZWNvbmRzLCBhdXRvLXN1Ym1pdCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgphdXRvU3VibWl0RGVsYXkgPSAzMDAwMDsKb3V0cHV0LnZhbHVlID0gSlNPTi5zdHJpbmdpZnkoZGV2aWNlUHJpbnQpOwpjb2xsZWN0R2VvbG9jYXRpb25JbmZvKGZ1bmN0aW9uKGdlb2xvY2F0aW9uSW5mbykgewogICAgZGV2aWNlUHJpbnQuZ2VvbG9jYXRpb24gPSBnZW9sb2NhdGlvbkluZm87CiAgICBvdXRwdXQudmFsdWUgPSBKU09OLnN0cmluZ2lmeShkZXZpY2VQcmludCk7CiAgICBzdWJtaXQoKTsKfSk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"312e951f-70c5-49d2-a9ae-93aef909d5df\",\"name\":\"Salesforce Profile Normalization\",\"description\":\"Normalizes raw profile data from Salesforce\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZ2l2ZW5fbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmZhbWlseV9uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnBpY3R1cmUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJsb2NhbGUiLCByYXdQcm9maWxlLnpvbmVJbmZvKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"69f06e63-128c-4e2f-af52-079a8a6f448b\",\"name\":\"SAML2 SP Adapter Script\",\"description\":\"Default global script for SAML2 SP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_SP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"name\":\"debug\",\"description\":\"Display sharedState, transientState, and headers.\",\"script\":\"LyogZGVidWcKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogRGlzcGxheSBzaGFyZWRTdGF0ZSwgdHJhbnNpZW50U3RhdGUsIGFuZCBoZWFkZXJzLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwp2YXIgYW5jaG9yID0gImFuY2hvci0iLmNvbmNhdChnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4JykpOwp2YXIgaGFsaWduID0gImxlZnQiOwp2YXIgbWVzc2FnZSA9ICI8cD48Yj5TaGFyZWQgU3RhdGU8L2I+Ojxici8+Ii5jb25jYXQoCiAgICAgIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpLmNvbmNhdCgKICAgICI8cD48Yj5UcmFuc2llbnQgU3RhdGU8L2I+Ojxici8+IikuY29uY2F0KAogICAgICB0cmFuc2llbnRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+UmVxdWVzdCBIZWFkZXJzPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgICAgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikKdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwidGV4dC1sZWZ0XCI7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIikuY29uY2F0KG1lc3NhZ2UpLmNvbmNhdCgiJztcbiIpLmNvbmNhdCgKICAiICB9XG4iKS5jb25jYXQoCiAgIn0pIikKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawopCmlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgIGFuY2hvcgogICAgICAgICksCiAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICApLmJ1aWxkKCkKfQplbHNlIHsKICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0KCiAvKgogICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAqIAogICogRXhhbXBsZToKICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICogJ3h4eC14eHgnIHByb2R1Y2VzICc0MzItNTIxJwogICovCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxMHwwOwogICAgICAgIHZhciB2ID0gcjsKICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"a7a78773-445b-4eca-bb93-409e86bced81\",\"name\":\"GitHub Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUubG9naW4pKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"01e1a3c0-038b-4c16-956a-6c9d89328cff\",\"name\":\"Authentication Tree Decision Node Script\",\"description\":\"Default global script for a scripted decision node\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKb3V0Y29tZSA9ICJ0cnVlIjsK\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"bb393d07-a121-47e2-9d24-1a1066f39ec0\",\"name\":\"My Example Script Using Libraries\",\"description\":\"My Example Script Using Libraries\",\"script\":\"LyoqCiAqIFRlc3RpbmcgbGlicmFyeSBzY3JpcHRzCiAqLwp2YXIgbXlsaWIgPSByZXF1aXJlKCdNeSBFeGFtcGxlIExpYnJhcnknKTsKdmFyIGxvZ2dlcnMgPSByZXF1aXJlKCdMaWJyYXJ5IFNjcmlwdCcpOwoKbXlsaWIuYWRkKDEpOwpteWxpYi5sb2dUb3RhbChsb2dnZXIpOwpteWxpYi5hZGQoMyk7Cm15bGliLmxvZ1RvdGFsV2l0aE1lc3NhZ2UobG9nZ2VyLCBteWxpYi5NU0cpOwoKb3V0Y29tZSA9ICd0cnVlJzs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"77e87451-bde9-40c0-84b1-02d4c97687f2\",\"name\":\"takeFavouriteFactor.js\",\"description\":\"null\",\"script\":\"ZnVuY3Rpb24gZ2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSkKewogIHZhciBpZCA9IHNoYXJlZFN0YXRlLmdldCgnX2lkJyk7CiAgdmFyIGZySWRtQ3VzdG9tQXR0cmlidXRlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoaWQsICdmci1pZG0tY3VzdG9tLWF0dHJzJyk7CiAgaWYgKGZySWRtQ3VzdG9tQXR0cmlidXRlcykKICB7CiAgICAgIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QgPSBKU09OLnBhcnNlKFN0cmluZyhmcklkbUN1c3RvbUF0dHJpYnV0ZXMudG9BcnJheSgpWzBdKSk7CiAgICAgICAgcmV0dXJuIGZySWRtQ3VzdG9tQXR0cmlidXRlc09iamVjdFtjdXN0b21BdHRyTmFtZV07CiAgfQp9Cgp2YXIgZmF2RmFjdG9yID0gZ2V0Q3VzdG9tQXR0clZhbHVlKCJjdXN0b21fZmF2b3VyaXRlRmFjdG9yIik7Cm91dGNvbWUgPSBmYXZGYWN0b3I7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"39c08084-1238-43e8-857f-2e11005eac49\",\"name\":\"Alpha OAuth2 Access Token Modification Script\",\"description\":\"Default alpha realm script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6b3cfd48-62d3-48ff-a96f-fe8f3a22ab30\",\"name\":\"Amazon Profile Normalization\",\"description\":\"Normalizes raw profile data from Amazon\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"424da748-82cc-4b54-be6f-82bd64d82a74\",\"name\":\"Yahoo Profile Normalization\",\"description\":\"Normalizes raw profile data from Yahoo\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"da56fe60-8b38-4c46-a405-d6b306d4b336\",\"name\":\"OAuth2 Evaluate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Evaluation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcG9wdWxhdGUgdGhlIHNjb3BlcyB3aXRoIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlcyB3aGVuIHRoZSB0b2tlbmluZm8gZW5kcG9pbnQgaXMgY2FsbGVkLgogKiBGb3IgZXhhbXBsZSwgaWYgb25lIG9mIHRoZSBzY29wZXMgaXMgbWFpbCwgQU0gc2V0cyBtYWlsIHRvIHRoZSByZXNvdXJjZSBvd25lcidzIGVtYWlsIGFkZHJlc3MgaW4gdGhlIHRva2VuIGluZm9ybWF0aW9uIHJldHVybmVkLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDIpLgogKiAgICAgICAgICAgIFRoZSBjbGllbnQncyBpZGVudGl0eSBpZiBwcmVzZW50IG9yIHRoZSByZXNvdXJjZSBvd25lcidzIGlkZW50aXR5LiBDYW4gYmUgbnVsbC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0VWQUxVQVRFX1NDT1BFCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoMykuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIGEgTWFwPFN0cmluZywgT2JqZWN0PiBvZiB0aGUgYWNjZXNzIHRva2VuJ3MgaW5mb3JtYXRpb24gKDQpLgogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBBY2Nlc3NUb2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vYXV0aDIvY29yZS9BY2Nlc3NUb2tlbi5odG1sLgogKiAoMikgQU1JZGVudGl0eSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9pZG0vQU1JZGVudGl0eS5odG1sLgogKiAoMykgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBldmFsdWF0ZSBzY29wZSBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgbWFwID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7CiAgICBpZiAoaWRlbnRpdHkgIT09IG51bGwpIHsKICAgICAgICB2YXIgc2NvcGVzID0gYWNjZXNzVG9rZW4uZ2V0U2NvcGUoKS50b0FycmF5KCk7CiAgICAgICAgc2NvcGVzLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKHNjb3BlKS50b0FycmF5KCk7CiAgICAgICAgICAgIG1hcC5wdXQoc2NvcGUsIGF0dHJpYnV0ZXMuam9pbigiLCIpKTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKCdpZGVudGl0eSBpcyBudWxsJyk7CiAgICB9CiAgICByZXR1cm4gbWFwOwp9KCkpOw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_EVALUATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"name\":\"level\",\"description\":\"set per level shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdsZXZlbCcgKyBsZXZlbCArICdWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzZXQgYXQgZWFjaCBsZXZlbCBvZiB0aGUgbmVzdGVkIGpvdXJuZXlzLiBJdCBjb250YWlucyBhbiBpbmRpY2F0b3IgaW4gd2hpY2ggbGV2ZWwgaXQgd2FzIHNldC4nKTsKfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"403cf226-6051-4368-8b72-9ba14f9a5140\",\"name\":\"VKontakte Profile Normalization\",\"description\":\"Normalizes raw profile data from VKontakte\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGhvdG9fNTApLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c4f22465-2368-4e27-8013-e6399974fd48\",\"name\":\"SAML2 IDP Attribute Mapper Script\",\"description\":\"Default global script for SAML2 IDP Attribute Mapper\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSBvYmplY3RzIGZvciB0aGUgSURQIGZyYW1ld29yayB0byBpbnNlcnQgaW50byB0aGUgZ2VuZXJhdGVkIEFzc2VydGlvbi4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgICAgICBUaGUgaG9zdGVkIGVudGl0eSBJRC4KICogcmVtb3RlRW50aXR5SWQgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgICAgVGhlIHJlbW90ZSBlbnRpdHkgSUQuCiAqIHJlYWxtIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGluZyB0by4KICogbG9nZ2VyIC0gQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5TQU1MMl9JRFBfQVRUUklCVVRFX01BUFBFUgogKiBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgLSBJZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgKDIpCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFuIElkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlciBpbnN0YW5jZSBjb250YWluaW5nIG1ldGhvZHMgdXNlZCBmb3IgSURQIGF0dHJpYnV0ZSBtYXBwaW5nLgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb246CiAqICAgICAgLSBvbiBmYWlsaW5nIHRvIG1hcCB0aGUgSURQIGF0dHJpYnV0ZXMuCiAqCiAqIFJldHVybiAtIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSAoMykgb2JqZWN0cy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgSWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaHRtbC4KICogKDMpIEF0dHJpYnV0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9hc3NlcnRpb24vQXR0cmlidXRlLmh0bWwuCiAqLwoKLyoqCiAqIERlZmF1bHQgU0FNTDIgSURQIEF0dHJpYnV0ZSBNYXBwZXIuCiAqLwpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKCkgewogICAgdmFyIGZySmF2YSA9IEphdmFJbXBvcnRlcigKICAgICAgICBjb20uc3VuLmlkZW50aXR5LnNhbWwyLmNvbW1vbi5TQU1MMkV4Y2VwdGlvbgogICAgKTsKCiAgICBjb25zdCBkZWJ1Z01ldGhvZCA9ICJTY3JpcHRlZElEUEF0dHJpYnV0ZU1hcHBlci5nZXRBdHRyaWJ1dGVzOjogIjsKCiAgICB0cnkgewoKICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1Nlc3Npb25WYWxpZChzZXNzaW9uKSkgewogICAgICAgICAgICBsb2dnZXIuZXJyb3IoZGVidWdNZXRob2QgKyAiSW52YWxpZCBzZXNzaW9uLiIpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHZhciBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0UmVtb3RlU1BDb25maWdBdHRyaWJ1dGVNYXAocmVhbG0sIHJlbW90ZUVudGl0eUlkKTsKICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJSZW1vdGUgU1AgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICBpZiAoY29uZmlnTWFwID09IG51bGwgfHwgY29uZmlnTWFwLmlzRW1wdHkoKSkgewogICAgICAgICAgICBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0SG9zdGVkSURQQ29uZmlnQXR0cmlidXRlTWFwKHJlYWxtLCBob3N0ZWRFbnRpdHlJZCk7CiAgICAgICAgICAgIGlmIChjb25maWdNYXAgPT0gbnVsbCB8fCBjb25maWdNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJDb25maWd1cmF0aW9uIG1hcCBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKGRlYnVnTWV0aG9kICsgIkhvc3RlZCBJRFAgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICB9CgogICAgICAgIHZhciBhdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoKTsKICAgICAgICB2YXIgc3RyaW5nVmFsdWVNYXAgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKICAgICAgICB2YXIgYmluYXJ5VmFsdWVNYXA7CiAgICAgICAgdmFyIGxvY2FsQXR0cmlidXRlOwoKICAgICAgICAvLyBEb24ndCB0cnkgdG8gcmVhZCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBkYXRhc3RvcmUgaWYgdGhlIGlnbm9yZWQgcHJvZmlsZSBpcyBlbmFibGVkIGluIHRoaXMgcmVhbG0uCiAgICAgICAgaWYgKCFpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaXNJZ25vcmVkUHJvZmlsZShzZXNzaW9uLCByZWFsbSkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIFJlc29sdmUgYXR0cmlidXRlcyB0byBiZSByZWFkIGZyb20gdGhlIGRhdGFzdG9yZS4KICAgICAgICAgICAgICAgIHZhciBzdHJpbmdBdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KCk7CiAgICAgICAgICAgICAgICB2YXIgYmluYXJ5QXR0cmlidXRlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgIHdoaWxlIChrZXlJdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlJdGVyLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBsb2NhbEF0dHJpYnV0ZSA9IGNvbmZpZ01hcC5nZXQoa2V5KTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1N0YXRpY0F0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc0JpbmFyeUF0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHRyZWF0IGFzIGJlaW5nIGJpbmFyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5QXR0cmlidXRlcy5hZGQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLnJlbW92ZUJpbmFyeUF0dHJpYnV0ZUZsYWcobG9jYWxBdHRyaWJ1dGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMuYWRkKGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXN0cmluZ0F0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWVNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0QXR0cmlidXRlcyhzZXNzaW9uLCBzdHJpbmdBdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghYmluYXJ5QXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBiaW5hcnlWYWx1ZU1hcCA9IGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5nZXRCaW5hcnlBdHRyaWJ1dGVzKHNlc3Npb24sIGJpbmFyeUF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGRlYnVnTWV0aG9kICsgIkVycm9yIGFjY2Vzc2luZyB0aGUgZGF0YXN0b3JlLiAiICsgZXJyb3IpOwogICAgICAgICAgICAgICAgLy9jb250aW51ZSB0byBjaGVjayBpbiBzc290b2tlbi4KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICB3aGlsZSAoa2V5SXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgdmFyIGtleSA9IGtleUl0ZXIubmV4dCgpCiAgICAgICAgICAgIHZhciBuYW1lRm9ybWF0ID0gbnVsbDsKICAgICAgICAgICAgdmFyIHNhbWxBdHRyaWJ1dGUgPSBrZXk7CiAgICAgICAgICAgIGxvY2FsQXR0cmlidXRlID0gY29uZmlnTWFwLmdldChrZXkpOwogICAgICAgICAgICAvLyBjaGVjayBpZiBzYW1sQXR0cmlidXRlIGhhcyBmb3JtYXQgbmFtZUZvcm1hdHxzYW1sQXR0cmlidXRlCiAgICAgICAgICAgIHZhciBzYW1sQXR0cmlidXRlcyA9IFN0cmluZyhuZXcgamF2YS5sYW5nLlN0cmluZyhzYW1sQXR0cmlidXRlKSk7CiAgICAgICAgICAgIHZhciB0b2tlbnMgPSBzYW1sQXR0cmlidXRlcy5zcGxpdCgnfCcpOwoKICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICBuYW1lRm9ybWF0ID0gdG9rZW5zWzBdOwogICAgICAgICAgICAgICAgc2FtbEF0dHJpYnV0ZSA9IHRva2Vuc1sxXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVZhbHVlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzU3RhdGljQXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdGF0aWMgZmxhZyBiZWZvcmUgdXNpbmcgaXQgYXMgdGhlIHN0YXRpYyB2YWx1ZQogICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlU3RhdGljQXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoW2xvY2FsQXR0cmlidXRlXSk7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJBZGRpbmcgc3RhdGljIHZhbHVlIHt9IGZvciBhdHRyaWJ1dGUgbmFtZWQge30iLCBsb2NhbEF0dHJpYnV0ZSwgc2FtbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzQmluYXJ5QXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZmxhZyBhcyBub3QgdXNlZCBmb3IgbG9va3VwCiAgICAgICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlQmluYXJ5QXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzID0gaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldEJpbmFyeUF0dHJpYnV0ZVZhbHVlcyhzYW1sQXR0cmlidXRlLCBsb2NhbEF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5VmFsdWVNYXApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWVNYXAgIT0gbnVsbCAmJiAhc3RyaW5nVmFsdWVNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlcyA9IHN0cmluZ1ZhbHVlTWFwLmdldChsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoZGVidWdNZXRob2QgKyAie30gc3RyaW5nIHZhbHVlIG1hcCB3YXMgZW1wdHkgb3IgbnVsbC4iLCBsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSB1c2VycyBzc29Ub2tlbgogICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlcyA9PSBudWxsIHx8IGF0dHJpYnV0ZVZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJVc2VyIHByb2ZpbGUgZG9lcyBub3QgaGF2ZSB2YWx1ZSBmb3Ige30sIGNoZWNraW5nIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldFByb3BlcnR5U2V0KHNlc3Npb24sIGxvY2FsQXR0cmlidXRlKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZXMgPT0gbnVsbCB8fCBhdHRyaWJ1dGVWYWx1ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJ7fSBub3QgZm91bmQgaW4gdXNlciBwcm9maWxlIG9yIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuYWRkKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5jcmVhdGVTQU1MQXR0cmlidXRlKHNhbWxBdHRyaWJ1dGUsIG5hbWVGb3JtYXQsIGF0dHJpYnV0ZVZhbHVlcykpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXR0cmlidXRlczsKCiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGxvZ2dlci5lcnJvcihkZWJ1Z01ldGhvZCArICJFcnJvciBtYXBwaW5nIElEUCBhdHRyaWJ1dGVzLiAiICsgZXJyb3IpOwogICAgICAgIHRocm93IG5ldyBmckphdmEuU0FNTDJFeGNlcHRpb24oZXJyb3IpOwogICAgfQp9CgpnZXRBdHRyaWJ1dGVzKCk7\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ATTRIBUTE_MAPPER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"46074930-6a38-4e36-8985-1ed90b4bdb3b\",\"name\":\"SaveLogin\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCik7CndpdGggKGZyKSB7CiAgLy8gQ3JlYXRlIG5ldyBlbnRyeSB3aXRoIGRldmljZSBwcm9maWxlIGFuZCBkYXRlCiAgdmFyIHByb2ZpbGUgPSBzaGFyZWRTdGF0ZS5nZXQoImZvcmdlUm9jay5kZXZpY2UucHJvZmlsZSIpOwogIHZhciBkYXRlID0gRGF0ZS5ub3coKQogIHZhciBpZGVudGlmaWVyID0gcHJvZmlsZS5nZXQoImlkZW50aWZpZXIiKQogIHZhciBwbGF0Zm9ybSA9IHByb2ZpbGUuZ2V0KCJtZXRhZGF0YSIpLmdldCgicGxhdGZvcm0iKS5nZXQoInBsYXRmb3JtIikKICB2YXIgZGV2aWNlTmFtZSA9IHByb2ZpbGUuZ2V0KCJtZXRhZGF0YSIpLmdldCgicGxhdGZvcm0iKS5nZXQoImRldmljZU5hbWUiKQogIHZhciBsYXRpdHVkZSA9IHByb2ZpbGUuZ2V0KCJsb2NhdGlvbiIpLmdldCgibGF0aXR1ZGUiKQogIHZhciBsb25naXR1ZGUgPSBwcm9maWxlLmdldCgibG9jYXRpb24iKS5nZXQoImxvbmdpdHVkZSIpCiAgdmFyIHVzZXJBZ2VudCA9IHByb2ZpbGUuZ2V0KCJtZXRhZGF0YSIpLmdldCgiYnJvd3NlciIpLmdldCgidXNlckFnZW50Iik7CiAgdmFyIGJyb3dzZXIgPSAiIgogIAogIC8vIFdvcmsgb3V0IHdoaWNoIGJyb3dzZXIgdGhpcyBpcwogIGlmICh1c2VyQWdlbnQudG9VcHBlckNhc2UoKS5pbmRleE9mKCJGSVJFRk9YIikgPiAtMSkgewogICAgYnJvd3NlciA9ICJGaXJlZm94IjsKICB9IGVsc2UgaWYgKHVzZXJBZ2VudC50b1VwcGVyQ2FzZSgpLmluZGV4T2YoIkNIUk9NRSIpID4gLTEgJiYgdXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiU0FGQVJJIikgPiAtMSkgewogICAgLy8gQ2hyb21lIGNhbiBzb21ldGltZXMgbGlzdCBDaHJvbWUgZm9sbG93ZWQgYnkgU2FmYXJpIGluIHVzZXJBZ2VudAogICAgaWYgKHVzZXJBZ2VudC50b1VwcGVyQ2FzZSgpLmluZGV4T2YoIkNIUk9NRSIpIDwgdXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiU0FGQVJJIikpIHsKICAgICAgYnJvd3NlciA9ICJDaHJvbWUiOwogICAgfQogIH0gZWxzZSBpZiAodXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiQ0hST01FIikgPiAtMSkgewogICAgYnJvd3NlciA9ICJDaHJvbWUiOwogIH0gZWxzZSBpZiAodXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiU0FGQVJJIikgPiAtMSkgewogICAgYnJvd3NlciA9ICJTYWZhcmkiOwogIH0KICAKICB2YXIgZW50cnkgPSB7CiAgICAiZGF0ZSI6IERhdGUoKS50b1N0cmluZygpLAogICAgImxhc3RTZWxlY3RlZERhdGUiOiBkYXRlLAogICAgImRldmljZSI6IHsKICAgICAgImlkZW50aWZpZXIiOiBTdHJpbmcoaWRlbnRpZmllciksCiAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAicGxhdGZvcm0iOiB7CiAgICAgICAgICAicGxhdGZvcm0iOiBTdHJpbmcocGxhdGZvcm0pLAogICAgICAgICAgImRldmljZU5hbWUiOiBTdHJpbmcoZGV2aWNlTmFtZSkKICAgICAgICB9LAogICAgICAgICJicm93c2VyIjogYnJvd3NlcgogICAgICB9CiAgICB9LAogICAgImxvY2F0aW9uIjogewogICAgICAibGF0aXR1ZGUiOiBTdHJpbmcobGF0aXR1ZGUpLAogICAgICAibG9uZ2l0dWRlIjogU3RyaW5nKGxvbmdpdHVkZSkKICAgIH0KICB9CiAgCiAgLy8gQWRkIGVudHJ5IHRvIG11bHRpIHZhbHVlCiAgdmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKQogIHZhciBhdHRyaWJ1dGUgPSAiZnItYXR0ci1pbXVsdGkxIgogIGlkUmVwb3NpdG9yeS5hZGRBdHRyaWJ1dGUodXNlcm5hbWUsIGF0dHJpYnV0ZSwgSlNPTi5zdHJpbmdpZnkoZW50cnkpKTsKICAKICBvdXRjb21lID0gInRydWUiCn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e1db8a0a-0329-4962-a5bf-ecffaca376ae\",\"name\":\"Alpha endUserUIClient OIDC Claims Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"name\":\"mode\",\"description\":\"Check if mode has already been set.\",\"script\":\"LyogbW9kZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDb2xsZWN0IG1vZGUgaWYgbm90IGFscmVhZHkgc2V0IGFuZCBzZXQgb3V0Y29tZSB0byBtb2RlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSAnc2hhcmVkIGFuZCBsZXZlbCcKICogLSAnc2hhcmVkIG9ubHknCiAqIC0gJ2xldmVsIG9ubHknCiAqIC0gJ25vbmUnCiAqLwooZnVuY3Rpb24gKCkgewogIHZhciBtb2RlID0gbm9kZVN0YXRlLmdldCgnbW9kZScpOwogIGlmIChtb2RlKSB7CiAgICBvdXRjb21lID0gbW9kZS5hc1N0cmluZygpOwogICAgdmFyIGxldmVsID0gbm9kZVN0YXRlLmdldCgnbGV2ZWwnKS5hc0ludGVnZXIoKSArIDE7CiAgICBsb2dnZXIuZXJyb3IoJ21vZGU6IG1vZGU9JyArIG1vZGUuYXNTdHJpbmcoKSArICcsIGxldmVsPScgKyBsZXZlbCk7CiAgICBzaGFyZWRTdGF0ZS5wdXQoJ2xldmVsJywgbGV2ZWwpOwogIH0KICBlbHNlIHsKICAgIHZhciBjaG9pY2VzID0gWydzaGFyZWQgYW5kIGxldmVsJywgJ3NoYXJlZCBvbmx5JywgJ2xldmVsIG9ubHknLCAnbm9uZSddOwogIAogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DaG9pY2VDYWxsYmFjawogICAgKQoKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKFsKICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soJ0Nob29zZSB0ZXN0IG1vZGUnLCBjaG9pY2VzLCAwLCBmYWxzZSkKICAgICAgXSkuYnVpbGQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBjaG9pY2UgPSBwYXJzZUludChjYWxsYmFja3MuZ2V0KDApLmdldFNlbGVjdGVkSW5kZXhlcygpWzBdKTsKICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgnbW9kZScsIGNob2ljZXNbY2hvaWNlXSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2xldmVsJywgMCk7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKGNob2ljZXNbY2hvaWNlXSkuYnVpbGQoKTsKICAgIH0KICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"743351b3-001a-4ec8-b3ac-a674ddb8de22\",\"name\":\"UOP Enrich Session\",\"description\":\"Enrich user session with UOP class ID.\",\"script\":\"LyogVU9QIEVucmljaCBTZXNzaW9uCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIEFkZCBjdXJyZW50IGNsYXNzIElEIHRvIHVzZXIgc2Vzc2lvbi4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuIAogKiBJdCByZXF1aXJlcyB0aGUgSWRlbnRpZnkgRXhpc3RpbmcgVXNlciBub2RlIGJlZm9yZSBpdCBpcyBiZWluZyBjYWxsZWQuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAtIGZhbHNlCiAqLwpsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBzdGFydCIpOwpvdXRjb21lID0gImZhbHNlIjsKCmlmIChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBnb2luZyB0byBlbnJpY2ggc2Vzc2lvbiB3aXRoIGNsYXNzIGlkOiAiLmNvbmNhdChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpKTsKICAKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaQogICAgKTsKCiAgICB3aXRoIChmcikgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJVT1AgRW5yaWNoIFNlc3Npb246IEVuZCAob3V0Y29tZT0iLmNvbmNhdChvdXRjb21lKS5jb25jYXQoIikiKSk7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8ob3V0Y29tZSkucHV0U2Vzc2lvblByb3BlcnR5KCJVT1BDbGFzc0lEIiwgc2hhcmVkU3RhdGUuZ2V0KCJ1b3BDdXJyZW50Q2xhc3NJRCIpKS5idWlsZCgpOwogICAgfQogIAp9IGVsc2UgewogICAgbG9nZ2VyLmVycm9yKCJVT1AgRW5yaWNoIFNlc3Npb246IG5vIGNsYXNzZXMhIik7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBFbmQgKG91dGNvbWU9Ii5jb25jYXQob3V0Y29tZSkuY29uY2F0KCIpIikpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"85523e71-2d77-4577-b078-6f9674cc54e2\",\"name\":\"Saml2 IDP Adapter Always Auth\",\"description\":\"Always redirect browser pre-auth\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4yL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL1NBTUwySWRlbnRpdHlQcm92aWRlckFkYXB0ZXIuaHRtbAogKiBOb3RlIHRoYXQgdGhlIGluaXRpYWxpemUgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIHNjcmlwdHMuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzLiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMgZm9yIHRoZSB2YXJpYWJsZXMgYXZhaWxhYmxlIHRvIGl0LgogKgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZwogKiAgICAgRW50aXR5IElEIGZvciB0aGUgaG9zdGVkIElEUAogKiByZWFsbSAtIFN0cmluZwogKiAgICAgUmVhbG0gb2YgdGhlIGhvc3RlZCBJRFAKICogaWRwQWRhcHRlclNjcmlwdEhlbHBlciAtIElkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEpCiAqICAgICBBbiBpbnN0YW5jZSBvZiBJZHBBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIHJlcXVlc3QgLSBIdHRwU2VydmxldFJlcXVlc3QgKDIpCiAqICAgICBTZXJ2bGV0IHJlcXVlc3Qgb2JqZWN0CiAqIHJlc3BvbnNlIC0gSHR0cFNlcnZsZXRSZXNwb25zZSAoMykKICogICAgIFNlcnZsZXQgcmVzcG9uc2Ugb2JqZWN0CiAqIGF1dGhuUmVxdWVzdCAtIEF1dGhuUmVxdWVzdCAoNCkKICogICAgIFRoZSBvcmlnaW5hbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHNlbnQgZnJvbSBTUAogKiByZXFJZCAtIFN0cmluZwogKiAgICAgVGhlIGlkIHRvIHVzZSBmb3IgY29udGludWF0aW9uIG9mIHByb2Nlc3NpbmcgaWYgdGhlIGFkYXB0ZXIgcmVkaXJlY3RzCiAqIHJlcyAtIFJlc3BvbnNlICg1KQogKiAgICAgVGhlIFNBTUwgUmVzcG9uc2UKICogc2Vzc2lvbiAtIFNTT1Rva2VuICg2KQogKiAgICAgVGhlIHNpbmdsZSBzaWduLW9uIHNlc3Npb24uIFRoZSByZWZlcmVuY2UgdHlwZSBvZiB0aGlzIGlzIE9iamVjdCBhbmQgd291bGQgbmVlZCB0byBiZSBjYXN0ZWQgdG8gU1NPVG9rZW4uCiAqIHJlbGF5U3RhdGUgLSBTdHJpbmcKICogICAgIFRoZSByZWxheVN0YXRlIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSByZWRpcmVjdAogKiBmYXVsdENvZGUgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBjb2RlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgU0FNTCByZXNwb25zZQogKiBmYXVsdERldGFpbCAtIFN0cmluZwogKiAgICAgdGhlIGZhdWx0IGRldGFpbCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogbG9nZ2VyIC0gTG9nZ2VyIGluc3RhbmNlCiAqICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLjxzY3JpcHQgbmFtZT4KICoKICogVGhyb3dzIFNBTUwyRXhjZXB0aW9uICg3KToKICogICAgIGZvciBhbnkgZXhjZXB0aW9ucyBvY2N1cnJpbmcgaW4gdGhlIGFkYXB0ZXIuIFRoZSBmZWRlcmF0aW9uIHByb2Nlc3Mgd2lsbCBjb250aW51ZQogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBpZHBBZGFwdGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL1Jlc3BvbnNlLmh0bWwuCiAqICg2KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvY29tbW9uL1NBTUwyRXhjZXB0aW9uLmh0bWwuCiAqLwoKLyoKICogVGVtcGxhdGUvZGVmYXVsdCBzY3JpcHQgZm9yIFNBTUwyIElEUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTaW5nbGVTaWduT24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNpbmdsZVNpZ25PbiIpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZUF1dGhlbnRpY2F0aW9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlQXV0aGVudGljYXRpb24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZUF1dGhlbnRpY2F0aW9uIik7CiAgICByZXR1cm4gdHJ1ZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZFJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBoYXBwZW5lZCBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTZW5kUmVzcG9uc2UgKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNlbmRSZXNwb25zZSIpOwogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IGF1dGhuUmVxdWVzdDogIithdXRoblJlcXVlc3QpOwogICAgICByZXNwb25zZS5zZW5kUmVkaXJlY3QoImh0dHBzOi8vaWRjLnNjaGV1YmVyLmlvL2FtL1hVSS8/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPURpc3BhdGNoZXImRm9yY2VBdXRoPXRydWUmZ290bz0iK3JlbGF5U3RhdGUpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpZ25SZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICByZXMKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2lnblJlc3BvbnNlICgpIHsKICAgICAgbG9nZ2VyLmVycm9yKCJDaGljYWdvOiBwcmVTaWduUmVzcG9uc2UiKTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZEZhaWx1cmVSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGZhdWx0Q29kZQogKiAgICAgZmF1bHREZXRhaWwKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2VuZEZhaWx1cmVSZXNwb25zZSAoKSB7CiAgICAgIGxvZ2dlci5lcnJvcigiQ2hpY2FnbzogcHJlU2VuZEZhaWx1cmVSZXNwb25zZSIpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e5c302c8-f838-4698-87cc-d7225fc82454\",\"name\":\"EmailAsUsername\",\"description\":\"null\",\"script\":\"b2JqZWN0QXR0cmlidXRlcyA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpCnVzZXJOYW1lID0gb2JqZWN0QXR0cmlidXRlcy5nZXQoInVzZXJOYW1lIikKCmlmKHVzZXJOYW1lKXsKICAvL0Zvcm0gRmlsbAogIG9iamVjdEF0dHJpYnV0ZXMucHV0KCJtYWlsIiwgdXNlck5hbWUpCn0gZWxzZSB7CiAgLy9Tb2NpYWwKICBvYmplY3RBdHRyaWJ1dGVzLnB1dCgidXNlck5hbWUiLCBvYmplY3RBdHRyaWJ1dGVzLmdldCgibWFpbCIpKQp9CgoKc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgb2JqZWN0QXR0cmlidXRlcyk7Ci8vc2hhcmVkU3RhdGUucHV0KCJ1c2VybmFtZSIsIG1haWwpCgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"223739f3-9c54-43b7-9572-3c5338786145\",\"name\":\"Format Username\",\"description\":\"null\",\"script\":\"dmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpOwoKc2hhcmVkU3RhdGUucHV0KCJkaXNwbGF5TmFtZSIsIHVzZXJuYW1lKTsKb3V0Y29tZSA9ICJjb250aW51ZSI7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"2c38c998-aec0-4e56-8d46-bff6e24a704e\",\"name\":\"My Example Library\",\"description\":\"My Example Library\",\"script\":\"dmFyIGkgPSAwOwoKZnVuY3Rpb24gYWRkKGopIHtpICs9IGp9OwpmdW5jdGlvbiBsb2dUb3RhbChsb2cpIHsgbG9nLmluZm8oIlRvdGFsOiAiICsgaSkgfTsKCi8vIGV4cG9ydCBjb25zdGFudApleHBvcnRzLk1TRyA9ICdGaW5hbCBzdW0nOwoKLy8gZXhwb3J0IGZ1bmN0aW9ucwpleHBvcnRzLmFkZCA9IGFkZDsKZXhwb3J0cy5sb2dUb3RhbCA9IGxvZ1RvdGFsOwoKLy9kaXJlY3QgZXhwb3J0IHVzaW5nIGFuIGlubGluZSBkZWNsYXJhdGlvbgpleHBvcnRzLmxvZ1RvdGFsV2l0aE1lc3NhZ2UgPSAobG9nLCBtZXNzYWdlKSA9PiBsb2cuaW5mbyhtZXNzYWdlICsgIjogIiArIGkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"d030f9fb-6d2d-4f5a-834d-b4f6304b8eb9\",\"name\":\"Impossible Traveller\",\"description\":\"null\",\"script\":\"Ly8gR2VvVmVsb2NpdHkgLyBJbXBvc3NpYmxlIEpvdXJuZXkgYXV0aGVudGljYXRpb24gc2NyaXB0Ci8vCi8vIE91dGNvbWVzIGZvciB0aGlzIHNjcmlwdCBhcmU6Ci8vICAgICAibm9Mb2NhdGlvbiIgLSB0aGUgZGV2aWNlJ3MgY3VycmVudCBsb2NhdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIHNoYXJlZFN0YXRlCi8vICAgICAibm9IaXN0b3J5IiAgLSB0aGUgdXNlcidzIHByb2ZpbGUgZG9lc24ndCB5ZXQgY29udGFpbiBwcmV2aW91cyBkZXZpY2UgaGlzdG9yeQovLyAgICAgIm9rIiAgICAgICAgIC0gdGhlIHVzZXIncyBnZW92ZWxvY2l0eSBpcyBsb3dlciB0aGFuIHRoZSBtYXggYWNjZXB0YWJsZSBzcGVlZAovLyAgICAgICAiaW1wb3NzaWJsZSIgLSB0aGUgdXNlcidzIGdlb3ZlbG9jaXR5IGV4Y2VlZHMgbWF4IGFjY2VwdGFibGUgc3BlZWQKTUFYX1ZFTE9DSVRZPTMwMApmdW5jdGlvbiBjYWxjdWxhdGVEaXN0YW5jZShmaXJzdCwgc2Vjb25kKSB7CiAgICB2YXIgZmFjdG9yID0gKE1hdGguUEkgLyAxODApLAogICAgICAgIHRoZXRhLAogICAgICAgIGRpc3Q7CiAgICBmdW5jdGlvbiBkZWdyZWVzVG9SYWRpYW5zKGRlZ3JlZXMpIHsKICAgICAgICByZXR1cm4gZGVncmVlcyAqIGZhY3RvcjsKICAgIH0KICAgIGZ1bmN0aW9uIHJhZGlhbnNUb0RlZ3JlZXMocmFkaWFucykgewogICAgICAgIHJldHVybiByYWRpYW5zIC8gZmFjdG9yOwogICAgfQogICAgdGhldGEgPSBmaXJzdC5sb25naXR1ZGUgLSBzZWNvbmQubG9uZ2l0dWRlOwogICAgZGlzdCA9IE1hdGguc2luKGRlZ3JlZXNUb1JhZGlhbnMoZmlyc3QubGF0aXR1ZGUpKSAqIE1hdGguc2luKGRlZ3JlZXNUb1JhZGlhbnMoc2Vjb25kLmxhdGl0dWRlKSkgKwogICAgICAgIE1hdGguY29zKGRlZ3JlZXNUb1JhZGlhbnMoZmlyc3QubGF0aXR1ZGUpKSAqIE1hdGguY29zKGRlZ3JlZXNUb1JhZGlhbnMoc2Vjb25kLmxhdGl0dWRlKSkgKgogICAgICAgIE1hdGguY29zKGRlZ3JlZXNUb1JhZGlhbnModGhldGEpKTsKICAgIGRpc3QgPSBNYXRoLmFjb3MoZGlzdCk7CiAgICBkaXN0ID0gcmFkaWFuc1RvRGVncmVlcyhkaXN0KTsKICAgIGRpc3QgPSBkaXN0ICogNjAgKiAxLjE1MTU7CiAgICByZXR1cm4gZGlzdDsKfTsKdmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKLy9kZXZpY2VzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZSh1c2VybmFtZSwgImRldmljZVByb2ZpbGVzIikudG9BcnJheSgpOwpsb2dpbkhpc3RvcnkgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCAiZnItYXR0ci1pbXVsdGkxIikudG9BcnJheSgpOwppZiAobG9naW5IaXN0b3J5Lmxlbmd0aCA9PSAwKSBvdXRjb21lID0gIm5vSGlzdG9yeSI7CmVsc2UgewogICAgICBvdXRjb21lID0gIm5vTG9jYXRpb24iOwogICAgICBpZiAoc2hhcmVkU3RhdGUuY29udGFpbnNLZXkoImZvcmdlUm9jay5kZXZpY2UucHJvZmlsZSIpICYmIHNoYXJlZFN0YXRlLmdldCgiZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlIikuY29udGFpbnNLZXkoImxvY2F0aW9uIikpIHsKICAgICAgICB2YXIgdGhpc0RldmljZSA9IHNoYXJlZFN0YXRlLmdldCgiZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlIik7CiAgICAgICAgICBvdXRjb21lID0gIm9rIjsKICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpCiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxvZ2luSGlzdG9yeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIHZhciBlbnRyeSA9IEpTT04ucGFyc2UobG9naW5IaXN0b3J5W2ldKTsKICAgICAgICAgICAgICB2YXIgbGFzdFNlbGVjdGVkRGF0ZSA9IGVudHJ5WyJsYXN0U2VsZWN0ZWREYXRlIl07CiAgICAgICAgICAgICAgdmFyIGxhc3RMb2NhdGlvbiA9IGVudHJ5WyJsb2NhdGlvbiJdOwogICAgICAgICAgICAgIHZhciB0aW1lRGlmZiA9IG5vdyAtIHBhcnNlSW50KGxhc3RTZWxlY3RlZERhdGUpOwogICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBjYWxjdWxhdGVEaXN0YW5jZSh7ICJsYXRpdHVkZSI6IHRoaXNEZXZpY2UuZ2V0KCJsb2NhdGlvbiIpLmdldCgibGF0aXR1ZGUiKSwgImxvbmdpdHVkZSI6IHRoaXNEZXZpY2UuZ2V0KCJsb2NhdGlvbiIpLmdldCgibG9uZ2l0dWRlIikgfSwgbGFzdExvY2F0aW9uKTsKICAgICAgICAgICAgICB2ZWxvY2l0eSA9IGRpc3RhbmNlIC8gKHRpbWVEaWZmIC8gMzYwMDAwMCk7CiAgICAgICAgICAgICAgaWYgKHZlbG9jaXR5ID4gTUFYX1ZFTE9DSVRZKSBvdXRjb21lID0gImltcG9zc2libGUiOwogICAgICAgIH0KICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"cf3515f0-8278-4ee3-a530-1bad7424c416\",\"name\":\"Alpha OIDC Claims Script\",\"description\":\"Default alpha realm script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"0ca79cb0-ea11-4e87-adac-7f8aeebc8c03\",\"name\":\"Save Mobile OATH Preference\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkKKTsKd2l0aCAoZnIpIHsKICAKICB2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCiAgdmFyIG1mYVByZWZBdHRyaWJ1dGUgPSAiZnItYXR0ci1pbXVsdGkyIgogIHZhciBtZmFUeXBlID0gIiI7CiAgCiAgaWRSZXBvc2l0b3J5LmFkZEF0dHJpYnV0ZSh1c2VybmFtZSwgbWZhUHJlZkF0dHJpYnV0ZSwgWyJvYXRoIl0pOwogIAogIG91dGNvbWUgPSAidHJ1ZSIKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e3b1018f-1b2e-4e96-9950-087bdfa13d6d\",\"name\":\"Set New Favourite\",\"description\":\"null\",\"script\":\"ZnVuY3Rpb24gZ2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSkgewogIHZhciBpZCA9IHNoYXJlZFN0YXRlLmdldCgnX2lkJyk7CiAgdmFyIGZySWRtQ3VzdG9tQXR0cmlidXRlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoaWQsICdmci1pZG0tY3VzdG9tLWF0dHJzJyk7CiAgaWYgKGZySWRtQ3VzdG9tQXR0cmlidXRlcykgewogICAgICB2YXIgZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0ID0gSlNPTi5wYXJzZShTdHJpbmcoZnJJZG1DdXN0b21BdHRyaWJ1dGVzLnRvQXJyYXkoKVswXSkpOwogICAgICAgIHJldHVybiBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdOwogIH0KfQoKZnVuY3Rpb24gc2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSxjdXN0b21BdHRyVmFsdWUpIHsKICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCAnZnItaWRtLWN1c3RvbS1hdHRycycpOwogIGlmIChmcklkbUN1c3RvbUF0dHJpYnV0ZXMpIHsKICAgIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QgPSBKU09OLnBhcnNlKFN0cmluZyhmcklkbUN1c3RvbUF0dHJpYnV0ZXMudG9BcnJheSgpWzBdKSk7CiAgICBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdID0gY3VzdG9tQXR0clZhbHVlOwogICAgdmFyIGpzb25fc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0KTsKICAgIGlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoaWQsICJmci1pZG0tY3VzdG9tLWF0dHJzIixbanNvbl9zdHJpbmddKTsKICB9Cn0KCnZhciBhdHRyID0gZ2V0Q3VzdG9tQXR0clZhbHVlKCJjdXN0b21fZmF2b3VyaXRlRmFjdG9yIik7CmlmICghYXR0cil7CnNldEN1c3RvbUF0dHJWYWx1ZSAoImN1c3RvbV9mYXZvdXJpdGVGYWN0b3IiLCJXZWJBdXRoTiIpOwp9CgoKCm91dGNvbWUgPSAidHJ1ZSI7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"25e6c06d-cf70-473b-bd28-26931edc476b\",\"name\":\"OAuth2 Validate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Validation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgdmFsaWRhdGVzIHRoZSByZXF1ZXN0ZWQgc2NvcGVzIGFnYWluc3QgdGhlIGFsbG93ZWQgc2NvcGVzLgogKiBJZiBubyBzY29wZXMgYXJlIHJlcXVlc3RlZCwgZGVmYXVsdCBzY29wZXMgYXJlIGFzc3VtZWQuCiAqIFRoZSBzY3JpcHQgaGFzIGZvdXIgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgZGlmZmVyZW50IE9BdXRoMiBmbG93czoKICogICAgICAtIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlCiAqICAgICAgLSB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUKICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHJlcXVlc3RlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgVGhlIHNldCBvZiByZXF1ZXN0ZWQgc2NvcGVzLgogKiBkZWZhdWx0U2NvcGVzIC0gU2V0PFN0cmluZz4gKDEpLgogKiAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBkZWZhdWx0IHNjb3Blcy4KICogYWxsb3dlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgYWxsb3dlZCBzY29wZXMuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIGRlYnVnIGxvZ2dlciBpbnN0YW5jZToKICogICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgICAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9BVVRIMl9WQUxJREFURV9TQ09QRQogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKgogKiBUaHJvd3MgSW52YWxpZFNjb3BlRXhjZXB0aW9uOgogKiAgICAgIC0gaWYgdGhlcmUgYXJlIG5vIHNjb3BlcyByZXF1ZXN0ZWQgYW5kIGRlZmF1bHQgc2NvcGVzIGFyZSBlbXB0eQogKiAgICAgIC0gaWYgYSByZXF1ZXN0ZWQgc2NvcGUgaXMgbm90IGFsbG93ZWQKICoKICogUmV0dXJuIC0gYSBTZXQ8U3RyaW5nPiBvZiB2YWxpZGF0ZWQgc2NvcGVzICgxKS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICgyKSBDbGllbnQgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svaHR0cC9DbGllbnQuaHRtbC4KICovCgovKioKICogRGVmYXVsdCB2YWxpZGF0ZSBzY29wZSBzY3JpcHQuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZVNjb3BlcyAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkU2NvcGVFeGNlcHRpb24KICAgICk7CgogICAgdmFyIHNjb3BlczsKICAgIGlmIChyZXF1ZXN0ZWRTY29wZXMgPT0gbnVsbCB8fCByZXF1ZXN0ZWRTY29wZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgc2NvcGVzID0gZGVmYXVsdFNjb3BlczsKICAgIH0gZWxzZSB7CiAgICAgICAgc2NvcGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KGFsbG93ZWRTY29wZXMpOwogICAgICAgIHNjb3Blcy5yZXRhaW5BbGwocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICBpZiAocmVxdWVzdGVkU2NvcGVzLnNpemUoKSA+IHNjb3Blcy5zaXplKCkpIHsKICAgICAgICAgICAgdmFyIGludmFsaWRTY29wZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICAgICAgaW52YWxpZFNjb3Blcy5yZW1vdmVBbGwoYWxsb3dlZFNjb3Blcyk7CiAgICAgICAgICAgIHRocm93IG5ldyBmckphdmEuSW52YWxpZFNjb3BlRXhjZXB0aW9uKCdVbmtub3duL2ludmFsaWQgc2NvcGUocyknKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKHNjb3BlcyA9PSBudWxsIHx8IHNjb3Blcy5pc0VtcHR5KCkpIHsKICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRTY29wZUV4Y2VwdGlvbignTm8gc2NvcGUgcmVxdWVzdGVkIGFuZCBubyBkZWZhdWx0IHNjb3BlIGNvbmZpZ3VyZWQnKTsKICAgIH0KICAgIHJldHVybiBzY29wZXM7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlICgpIHsKICAgIHJldHVybiB2YWxpZGF0ZVNjb3BlcygpOwp9CgpmdW5jdGlvbiB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_VALIDATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"91d197de-5916-4dca-83b5-9a4df26e7159\",\"name\":\"WordPress Profile Normalization\",\"description\":\"Normalizes raw profile data from WordPress\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJuYW1lKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5hdmF0YXJfVVJMKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"name\":\"shared\",\"description\":\"set the same shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdzaGFyZWRWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzaGFyZWQgYWNyb3NzIGFsbCBuZXN0ZWQgam91cm5leXMuIEl0IGNvbnRhaW5zIGFuIGluZGljYXRvciBpbiB3aGljaCBsZXZlbCBpdCB3YXMgbGFzdCBzZXQuJyk7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"5e854779-6ec1-4c39-aeba-0477e0986646\",\"name\":\"Config Provider Node Script\",\"description\":\"Script to provide values for a config provider node\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKioKICogVGhlIGZvbGxvd2luZyBzY3JpcHQgaXMgYSBzaW1wbGlmaWVkIHRlbXBsYXRlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0byBidWlsZAogKiB1cCBhIGNvbmZpZyBNYXAgb2JqZWN0IHdpdGggY3VzdG9tIHZhbHVlcy4gVGhlIENvbmZpZyBQcm92aWRlciBOb2RlIHdpbGwgdGhlbgogKiBwcm92aWRlIHRoaXMgY29uZmlnIE1hcCB0byB0aGUgZGVzaXJlZCBub2RlIHR5cGUuIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBNYXAKICogeW91IGJ1aWxkIGhlcmUgaXMgbmFtZWQgJ2NvbmZpZycuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKgogKiBub2RlU3RhdGUgLSBOb2RlIFN0YXRlICgxKQogKiAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoaXMgcmVwcmVzZW50cyB0aGUgY3VycmVudCB2YWx1ZXMgc3RvcmVkIGluIHRoZSBub2RlIHN0YXRlLgogKgogKiBpZFJlcG9zaXRvcnkgLSBQcm9maWxlIERhdGEgKDIpCiAqICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgYSByZXBvc2l0b3J5IHRvIHJldHJpZXZlIHVzZXIgaW5mb3JtYXRpb24uCiAqCiAqIHNlY3JldHMgLSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAoMykKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBTZWNyZXRzIEFQSSBmcm9tIGEgc2NyaXB0aW5nIGNvbnRleHQuCiAqCiAqIHJlcXVlc3RIZWFkZXJzICg0KSAtIE1hcCAoNSkKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIGZvciBhY2Nlc3NpbmcgaGVhZGVycyBpbiB0aGUgbG9naW4gcmVxdWVzdC4KICoKICogbG9nZ2VyIC0gRGVidWcgTG9nZ2luZyAoNikKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2UuCiAqCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoNykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cy4KICoKICogcmVhbG0gLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqCiAqIGV4aXN0aW5nU2Vzc2lvbiAtIE1hcDxTdHJpbmcsIFN0cmluZz4gKDUpCiAqICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LiBUaGUgcmV0dXJuZWQgbWFwIGZyb20KICogICAgICAgICAgU1NPVG9rZW4uZ2V0UHJvcGVydGllcygpICg4KQogKgogKiByZXF1ZXN0UGFyYW1ldGVycyAtIE1hcCAoNSkKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBwYXJhbWV0ZXJzLgogKgogKgogKiBPdXRwdXRzOgogKgogKiBjb25maWcgLSBNYXAgKDUpCiAqICAgICAgICAgICBEZWZpbmUgYW5kIGZpbGwgYSBNYXAgb2JqZWN0IG5hbWVkICdjb25maWcnIHdpdGggY3VzdG9tIHZhbHVlcywgdGhpcyB3aWxsIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlCiAqICAgICAgICAgICBhc3NvY2lhdGVkIG5vZGUgc2VsZWN0ZWQgaW4gdGhlIENvbmZpZ1Byb3ZpZGVyTm9kZS4KICoKICogUmVmZXJlbmNlOgogKiAoMSkgTm9kZSBTdGF0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9pZGNsb3VkLWFtL2xhdGVzdC9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtbm9kZVN0YXRlCiAqICgyKSBQcm9maWxlIERhdGEgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4xL2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1pZC1yZXBvCiAqICgzKSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjEvYXV0aGVudGljYXRpb24tZ3VpZGUvc2NyaXB0aW5nLWFwaS1ub2RlLmh0bWwjc2NyaXB0aW5nLWFwaS1hdXRobi1zZWNyZXRzCiAqICg0KSBSZXF1ZXN0IEhlYWRlcnMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtcmVxdWVzdEhlYWRlcnMuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL01hcC5odG1sCiAqICg2KSBEZWJ1ZyBMb2dnaW5nIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogKDcpIEhUVFAgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg4KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqLwoKY29uZmlnID0gewogICAgImtleTAiOiB7InN1YktleSI6ICJ2YWx1ZTAifSwKICAgICJrZXkxIjogInZhbHVlMSIKfTs=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"CONFIG_PROVIDER_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1d475815-72cb-42eb-aafd-4026989d28a7\",\"name\":\"Social Identity Provider Profile Transformation Script\",\"description\":\"Default global script for Social Identity Provider Profile Transformation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyogRGVmYXVsdCBTb2NpYWwgSWRlbnRpdHkgUHJvdmlkZXIgUHJvZmlsZSBUcmFuc2Zvcm1hdGlvbiBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzICov\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"bae1d54a-e97d-4997-aa5d-c027f21af82c\",\"name\":\"Facebook Profile Normalization\",\"description\":\"Normalizes raw profile data from Facebook\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"36863ffb-40ec-48b9-94b1-9a99f71cc3b5\",\"name\":\"OIDC Claims Script\",\"description\":\"Default global script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c827d2b4-3608-4693-868e-bbcf86bd87c7\",\"name\":\"Scripted Module - Client Side\",\"description\":\"Default global script for client side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTYtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qIERlZmF1bHQgQXV0aGVudGljYXRpb24gY2xpZW50IHNpZGUgc2NyaXB0IHRvIHVzZSBhcyBhIHRlbXBsYXRlIGZvciBuZXcgc2NyaXB0cyAqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"4c963bb3-7084-43d0-bcdc-a47482cf1825\",\"name\":\"Dummy\",\"description\":\"Dummy\",\"script\":\"Cm91dGNvbWUgPSAidHJ1ZSI7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"8e298710-b55e-4085-a464-88a375a4004b\",\"name\":\"Twitter Profile Normalization\",\"description\":\"Normalizes raw profile data from Twitter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkX3N0ciksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnByb2ZpbGVfaW1hZ2VfdXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnNjcmVlbl9uYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"634fb0b2-8873-4e78-8913-9a669e4f3816\",\"name\":\"Debug Shared State\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCik7CndpdGggKGZyKSB7CiAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgZGVidWcgPSBTdHJpbmcoIlNoYXJlZCBzdGF0ZTogIiArIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkgKyAiXFxuIik7CiAgICAgIGRlYnVnID0gU3RyaW5nKGRlYnVnICsgIlJlcXVlc3QgaGVhZGVyczogIiArIHJlcXVlc3RIZWFkZXJzLnRvU3RyaW5nKCkgKyAiXFxuIik7CiAgICAgIGlmICh0eXBlb2YgZXhpc3RpbmdTZXNzaW9uICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgZGVidWcgPSBTdHJpbmcoZGVidWcgKyAiRXhpc3Rpbmcgc2Vzc2lvbjogIiArICJcXG4iKTsKICAgICAgfSAgCiAgICAgICAgIGxvZ2dlci5lcnJvcigiSk9OSzogIiArIGRlYnVnKTsKICAgICAgc2NyaXB0ID0gU3RyaW5nKCdhbGVydCgiJytkZWJ1ZysnIik7Jyk7CiAgICAgIGFjdGlvbiA9IEFjdGlvbi5zZW5kKG5ldyBTY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2soc2NyaXB0KSkuYnVpbGQoKTsKICB9CiAgb3V0Y29tZSA9ICJ0cnVlIjsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1244e639-4a31-401d-ab61-d75133d8dc9e\",\"name\":\"Instagram Profile Normalization\",\"description\":\"Normalizes raw profile data from Instagram\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"ed685f9f-5909-4726-86e8-22bd38b47663\",\"name\":\"Normalized Profile to Identity\",\"description\":\"Converts a normalized social profile into an Identity\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgaWRlbnRpdHkgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgiY24iLCBub3JtYWxpemVkUHJvZmlsZS5kaXNwbGF5TmFtZSksCiAgICAgICAgZmllbGQoInVzZXJOYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUudXNlcm5hbWUpLAogICAgICAgIGZpZWxkKCJpcGxhbmV0LWFtLXVzZXItYWxpYXMtbGlzdCIsIHNlbGVjdGVkSWRwICsgJy0nICsgbm9ybWFsaXplZFByb2ZpbGUuaWQuYXNTdHJpbmcoKSkpKQoKcmV0dXJuIGlkZW50aXR5\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"40a38167-2371-4d49-bbf1-e0e97ace3132\",\"name\":\"pwdlessCheck.js\",\"description\":\"null\",\"script\":\"b3V0Y29tZSA9ICJsZWdhY3kiOwp2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwppZihnZXRDdXN0b21BdHRyVmFsdWUoImN1c3RvbV9wYXNzd29yZGxlc3MiKT09dHJ1ZSkgewogIG91dGNvbWUgPSAicHdkbGVzcyI7Cn0KCmZ1bmN0aW9uIGdldEN1c3RvbUF0dHJWYWx1ZSAoY3VzdG9tQXR0ck5hbWUpCnsKICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCAnZnItaWRtLWN1c3RvbS1hdHRycycpOwogIGlmIChmcklkbUN1c3RvbUF0dHJpYnV0ZXMpCiAgewogICAgICB2YXIgZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0ID0gSlNPTi5wYXJzZShTdHJpbmcoZnJJZG1DdXN0b21BdHRyaWJ1dGVzLnRvQXJyYXkoKVswXSkpOwogICAgICAgIHJldHVybiBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdOwogIH0KfQo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"9de3eb62-f131-4fac-a294-7bd170fd4acb\",\"name\":\"Scripted Policy Condition\",\"description\":\"Default global script for Scripted Policy Conditions\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qKgogKiBUaGlzIGlzIGEgUG9saWN5IENvbmRpdGlvbiBleGFtcGxlIHNjcmlwdC4gSXQgZGVtb25zdHJhdGVzIGhvdyB0byBhY2Nlc3MgYSB1c2VyJ3MgaW5mb3JtYXRpb24sCiAqIHVzZSB0aGF0IGluZm9ybWF0aW9uIGluIGV4dGVybmFsIEhUVFAgY2FsbHMgYW5kIG1ha2UgYSBwb2xpY3kgZGVjaXNpb24gYmFzZWQgb24gdGhlIG91dGNvbWUuCiAqLwoKdmFyIHVzZXJBZGRyZXNzLCB1c2VySVAsIHJlc291cmNlSG9zdDsKCmlmICh2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkpIHsKCiAgICB2YXIgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9IGdldENvdW50cnlGcm9tVXNlckFkZHJlc3MoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJDb3VudHJ5IHJldHJpZXZlZCBmcm9tIHVzZXIncyBhZGRyZXNzOiAiICsgY291bnRyeUZyb21Vc2VyQWRkcmVzcyk7CiAgICB2YXIgY291bnRyeUZyb21Vc2VySVAgPSBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpOwogICAgbG9nZ2VyLm1lc3NhZ2UoIkNvdW50cnkgcmV0cmlldmVkIGZyb20gdXNlcidzIElQOiAiICsgY291bnRyeUZyb21Vc2VySVApOwogICAgdmFyIGNvdW50cnlGcm9tUmVzb3VyY2VVUkkgPSBnZXRDb3VudHJ5RnJvbVJlc291cmNlVVJJKCk7CiAgICBsb2dnZXIubWVzc2FnZSgiQ291bnRyeSByZXRyaWV2ZWQgZnJvbSByZXNvdXJjZSBVUkk6ICIgKyBjb3VudHJ5RnJvbVJlc291cmNlVVJJKTsKCiAgICBpZiAoY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21Vc2VySVAgJiYgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21SZXNvdXJjZVVSSSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIFN1Y2NlZWRlZCIpOwogICAgICAgIHJlc3BvbnNlQXR0cmlidXRlcy5wdXQoImNvdW50cnlPZk9yaWdpbiIsIFtjb3VudHJ5RnJvbVVzZXJBZGRyZXNzXSk7CiAgICAgICAgYXV0aG9yaXplZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIEZhaWxlZCIpOwogICAgICAgIGF1dGhvcml6ZWQgPSBmYWxzZTsKICAgIH0KCn0gZWxzZSB7CiAgICBsb2dnZXIubWVzc2FnZSgiUmVxdWlyZWQgcGFyYW1ldGVycyBub3QgZm91bmQuIEF1dGhvcml6YXRpb24gRmFpbGVkLiIpOwogICAgYXV0aG9yaXplZCA9IGZhbHNlOwp9CgovKioKICogVXNlIHRoZSB1c2VyJ3MgYWRkcmVzcyB0byBsb29rdXAgdGhlaXIgY291bnRyeSBvZiByZXNpZGVuY2UuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgdXNlcidzIGNvdW50cnkgb2YgcmVzaWRlbmNlLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21Vc2VyQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlckFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgZ2VvY29kZSA9IEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvY29kZS5yZXN1bHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGdlb2NvZGUucmVzdWx0c1tpXTsKICAgICAgICB2YXIgajsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgcmVzdWx0LmFkZHJlc3NfY29tcG9uZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAocmVzdWx0LmFkZHJlc3NfY29tcG9uZW50c1tpXS50eXBlc1swXSA9PSAiY291bnRyeSIpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYWRkcmVzc19jb21wb25lbnRzW2ldLmxvbmdfbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKLyoqCiAqIFVzZSB0aGUgdXNlcidzIElQIHRvIGxvb2t1cCB0aGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqLwpmdW5jdGlvbiBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgdXNlcklQKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdC5jb3VudHJ5OwogICAgfQp9CgovKioKICogVXNlIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UncyBob3N0IG5hbWUgdG8gbG9va3VwIHRoZSBjb3VudHJ5IHdoZXJlIHRoZSByZXNvdXJjZSBpcyBob3N0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBpbiB3aGljaCB0aGUgcmVzb3VyY2UgaXMgaG9zdGVkLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21SZXNvdXJjZVVSSSgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgZW5jb2RlVVJJQ29tcG9uZW50KHJlc291cmNlSG9zdCkpOwogICAgICByZXF1ZXN0LnNldE1ldGhvZCgiR0VUIik7CgogICAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3QpLmdldCgpOwogICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwoKICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIGlmIChyZXN1bHQpIHsKICAgICAgICByZXR1cm4gcmVzdWx0LmNvdW50cnk7CiAgICB9Cn0KCi8qKgogKiBSZXRyaWV2ZSBhbmQgdmFsaWRhdGUgdGhlIHZhcmlhYmxlcyByZXF1aXJlZCB0byBtYWtlIHRoZSBleHRlcm5hbCBIVFRQIGNhbGxzLgogKgogKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2lsbCBiZSB0cnVlIGlmIHZhbGlkYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkgewogICAgdmFyIHVzZXJBZGRyZXNzU2V0ID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKCJwb3N0YWxBZGRyZXNzIik7CiAgICBpZiAodXNlckFkZHJlc3NTZXQgPT0gbnVsbCB8fCB1c2VyQWRkcmVzc1NldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gYWRkcmVzcyBzcGVjaWZpZWQgZm9yIHVzZXI6ICIgKyB1c2VybmFtZSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdXNlckFkZHJlc3MgPSB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIGFkZHJlc3M6ICIgKyB1c2VyQWRkcmVzcyk7CgogICAgaWYgKCFlbnZpcm9ubWVudCkgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJObyBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiB0aGUgZXZhbHVhdGlvbiByZXF1ZXN0LiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB2YXIgaXBTZXQgPSBlbnZpcm9ubWVudC5nZXQoIklQIik7CiAgICBpZiAoaXBTZXQgPT0gbnVsbCB8fCBpcFNldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gSVAgc3BlY2lmaWVkIGluIHRoZSBldmFsdWF0aW9uIHJlcXVlc3QgZW52aXJvbm1lbnQgcGFyYW1ldGVycy4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB1c2VySVAgPSBpcFNldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIElQOiAiICsgdXNlcklQKTsKCiAgICBpZiAoIXJlc291cmNlVVJJKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIHJlc291cmNlIFVSSSBzcGVjaWZpZWQuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmVzb3VyY2VIb3N0ID0gcmVzb3VyY2VVUkkubWF0Y2goL14oLio6XC9cLykod3d3XC4pPyhbQS1aYS16MC05XC1cLl0rKSg6WzAtOV0rKT8oLiopJC8pWzNdOwogICAgbG9nZ2VyLm1lc3NhZ2UoIlJlc291cmNlIGhvc3Q6ICIgKyByZXNvdXJjZUhvc3QpOwoKICAgIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"POLICY_CONDITION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"01bec3a8-105d-45dc-9f80-d003e1b33fa2\",\"name\":\"updateWebAuthNProfileNickname.js\",\"description\":\"null\",\"script\":\"dmFyIGlkID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKdmFyIHByb2ZpbGVzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShpZCwid2ViYXV0aG5EZXZpY2VQcm9maWxlcyIpOwp2YXIgb2JqZWN0QXR0cmlidXRlcyA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwp2YXIgbmV3Tmlja05hbWUgPSBvYmplY3RBdHRyaWJ1dGVzLmdldCgiY3VzdG9tX25pY2tuYW1lIik7Cgp2YXIgcHJvZmlsZXNBcnJheSA9IHByb2ZpbGVzLnRvQXJyYXkoKTsKCmZvciAodmFyIGk9MDsgaTxwcm9maWxlc0FycmF5Lmxlbmd0aDsgaSsrKQp7CiAgcHJvZmlsZXNBcnJheVtpXT1wcm9maWxlc0FycmF5W2ldLnJlcGxhY2UoIk5ldyBTZWN1cml0eSBLZXkiLG5ld05pY2tOYW1lKTsKfQppZFJlcG9zaXRvcnkuc2V0QXR0cmlidXRlKGlkLCJ3ZWJhdXRobkRldmljZVByb2ZpbGVzIixbXSk7CmZvciAodmFyIGk9MDsgaTxwcm9maWxlc0FycmF5Lmxlbmd0aDsgaSsrKQp7CiAgaWRSZXBvc2l0b3J5LmFkZEF0dHJpYnV0ZShpZCwid2ViYXV0aG5EZXZpY2VQcm9maWxlcyIscHJvZmlsZXNBcnJheVtpXSk7Cn0Kb3V0Y29tZSA9ICJzdWNjZXNzIjs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"d58977ed-0542-4147-8197-973ef7300191\",\"name\":\"Custom Device Match Script\",\"description\":\"Custom Device Match Script\",\"script\":\"LyoKICogQ3VzdG9tIERldmljZSBNYXRjaCBTY3JpcHQKICovCgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3d97c436-42c0-4dd0-a571-ea6f34f752b3\",\"name\":\"Itsme Profile Normalization\",\"description\":\"Normalizes raw profile data from Itsme\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKaW1wb3J0IG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUKCkpzb25WYWx1ZSBtYW5hZ2VkVXNlciA9IGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuc3ViKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmdpdmVuX25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5mYW1pbHlfbmFtZSksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQpyZXR1cm4gbWFuYWdlZFVzZXI=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"18940a0d-2997-49af-8cb9-9d8da38b4145\",\"name\":\"resetPush.js\",\"description\":\"null\",\"script\":\"aWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwppZFJlcG9zaXRvcnkuc2V0QXR0cmlidXRlKGlkLCAicHVzaERldmljZVByb2ZpbGVzIixbXSk7CgoKICAgIApvdXRjb21lID0gInRydWUiOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c735de08-f8f2-4e69-aa4a-2d8d3d438323\",\"name\":\"OAuth2 May Act Script\",\"description\":\"Default global script for OAuth2 May Act\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKiB0b2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gdG8gYmUgdXBkYXRlZC4gTXV0YWJsZSBvYmplY3QsIGFsbCBjaGFuZ2VzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gd2lsbCBiZSByZWZsZWN0ZWQuCiAqIGxvZ2dlciAtIGFsd2F5cyBwcmVzZW50LCBjb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIHNjcmlwdE5hbWUgLSBhbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0CiAqIHNlc3Npb24gLSBwcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdAogKiByZXF1ZXN0UHJvcGVydGllcyAtIGFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIHRoZSByZXF1ZXN0IFVSSQogKiAgICAgICAgICAgICAgICAgICAgIHJlYWxtIC0gdGhlIHJlYWxtIHRoYXQgdGhlIHJlcXVlc3QgcmVsYXRlcyB0bwogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBhIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLiBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IKICogICAgICAgICAgICAgICAgICAgICBtb3JlIHByb3BlcnRpZXMuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QKICogICAgICAgICAgICAgICAgICAgICBwcmFjdGljZXMuCiAqIGNsaWVudFByb3BlcnRpZXMgLSBwcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICBjbGllbnRJZCAtIHRoZSBjbGllbnQncyBVcmkgZm9yIHRoZSByZXF1ZXN0IGxvY2FsZQogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBsaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gbGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudAogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFNjb3BlcyAtIGxpc3Qgb2YgdGhlIGFsbG93ZWQgc2NvcGVzIGZvciB0aGUgY2xpZW50CiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzLCBlLmc6CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdE1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyB0ZXN0bWFwIC0+IEtleTEgLT4gVmFsdWUxCiAqCiAqIGlkZW50aXR5IC0gYWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIKICogc2NvcGVzIC0gYWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzCiAqLwovKgppbXBvcnQgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQoKdG9rZW4uc2V0TWF5QWN0KAogICAgSnNvblZhbHVlLmpzb24oSnNvblZhbHVlLm9iamVjdCgKICAgICAgICBKc29uVmFsdWUuZmllbGQoImNsaWVudF9pZCIsICJteUNsaWVudCIpLCAKICAgICAgICBKc29uVmFsdWUuZmllbGQoInN1YiIsICIodXNyIW15QWN0b3IpIikpKSkKKi8=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"OAUTH2_MAY_ACT\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c234ba0b-58a1-4cfd-9567-09edde980745\",\"name\":\"ForgeRock Internal: OAuth2 Access Token Modification Script\",\"description\":\"Internal token modification script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwovLyBTY3JpcHQgaXMgaW50ZW50aW9uYWxseSBlbXB0eQo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":1433147666269,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"58d29080-4563-480b-89bb-1e7719776a21\",\"name\":\"Google Profile Normalization\",\"description\":\"Normalizes raw profile data from Google\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3bd13a46-61c4-4974-8efb-1700c80c64e3\",\"name\":\"Inactive Device Match Script\",\"description\":\"Inactive Device Match Script\",\"script\":\"LyoKICogSW5hY3RpdmUgRGV2aWNlIE1hdGNoIFNjcmlwdAogKi8KCm91dGNvbWUgPSAidHJ1ZSI7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"343b3cc5-38f4-4e37-9d92-8ba0830936da\",\"name\":\"wks-RemoveButton\",\"description\":\"RemoveButton\",\"script\":\"LyogUmVtb3ZlIEJ1dHRvbgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBIaWRlIGJ1dHRvbnMgb24gdGhlIGpvdXJuZXkgcGFnZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfSkiCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICB2YXIgbWVzc2FnZSA9ICIgIgogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIG1lc3NhZ2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"13e3f263-9cd3-4844-8d1c-040fd0dd02eb\",\"name\":\"Device Profile Match Template - Decision Node Script\",\"description\":\"Default global script template for Device Profile Match decision node script for Authentication Tree\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGEgc2ltcGxpZmllZCB0ZW1wbGF0ZSBmb3IgdW5kZXJzdGFuZGluZwogKiB0aGUgYmFzaWNzIG9mIGRldmljZSBtYXRjaGluZy4gX1RoaXMgaXMgbm90IGZ1bmN0aW9uYWxseSBjb21wbGV0ZS5fCiAqIEZvciBhIGZ1bmN0aW9uYWxseSBjb21wbGV0ZSBzY3JpcHQgYXMgd2VsbCBhcyBhIGRldmVsb3BtZW50IHRvb2xraXQsCiAqIHZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9Gb3JnZVJvY2svZm9yZ2Vyb2NrLWRldmljZS1tYXRjaC1zY3JpcHQuCiAqCiAqIEdsb2JhbCBub2RlIHZhcmlhYmxlcyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGlzIHNjb3BlOgogKiAxLiBgc2hhcmVkU3RhdGVgIHByb3ZpZGVzIGFjY2VzcyB0byBpbmNvbWluZyByZXF1ZXN0CiAqIDIuIGBkZXZpY2VQcm9maWxlc0Rhb2AgcHJvdmlkZXMgYWNjZXNzIHRvIHN0b3JlZCBwcm9maWxlcwogKiAzLiBgb3V0Y29tZWAgdmFyaWFibGUgbWFwcyB0byBhdXRoIHRyZWUgbm9kZSBvdXRjb21lczsgdmFsdWVzIGFyZQogKiAgICAndHJ1ZScsICdmYWxzZScsIG9yICd1bmtub3duRGV2aWNlJyAobm90aWNlIF9hbGxfIGFyZSBzdHJpbmdzKS4KICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgcmVxdWVzdCdzIGRldmljZSBwcm9maWxlLgogKiBSZXR1cm5zIHNlcmlhbGl6ZWQgSlNPTiAodHlwZSBzdHJpbmcpOyBwYXJzaW5nIHRoaXMgd2lsbCByZXN1bHQgYQogKiBuYXRpdmUgSlMgb2JqZWN0LgogKi8KdmFyIGluY29taW5nSnNvbiA9IHNoYXJlZFN0YXRlLmdldCgnZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlJykudG9TdHJpbmcoKTsKdmFyIGluY29taW5nID0gSlNPTi5wYXJzZShpbmNvbWluZ0pzb24pOwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgdXNlcidzIHVzZXJuYW1lIGFuZCByZWFsbS4KICogTm90aWNlIHRoZSB1c2Ugb2YgYC5hc1N0cmluZygpYC4KICovCnZhciB1c2VybmFtZSA9IHNoYXJlZFN0YXRlLmdldCgidXNlcm5hbWUiKS5hc1N0cmluZygpOwp2YXIgcmVhbG0gPSBzaGFyZWRTdGF0ZS5nZXQoInJlYWxtIikuYXNTdHJpbmcoKTsKCi8qKgogKiBHZXQgdGhlIHVzZXIncyBzdG9yZWQgcHJvZmlsZXMgZm9yIGFwcHJvcHJpYXRlIHJlYWxtLgogKiBSZXR1cm5zIGEgX3NwZWNpYWxfIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIHByb2ZpbGUgZGF0YQogKi8KdmFyIHN0b3JlZFByb2ZpbGVzID0gZGV2aWNlUHJvZmlsZXNEYW8uZ2V0RGV2aWNlUHJvZmlsZXModXNlcm5hbWUsIHJlYWxtKTsKCi8vIERlZmF1bHQgdG8gYG91dGNvbWVgIG9mICd1bmtub3duRGV2aWNlJwpvdXRjb21lID0gJ3Vua25vd25EZXZpY2UnOwoKaWYgKHN0b3JlZFByb2ZpbGVzKSB7CiAgICB2YXIgaSA9IDA7CiAgICAvLyBOT1RFOiBgLnNpemUoKWAgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBzdG9yZWQgcHJvZmlsZXMKICAgIHZhciBsZW4gPSBzdG9yZWRQcm9maWxlcy5zaXplKCk7CgogICAgZm9yIChpOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIHN0b3JlZCBwcm9maWxlLgogICAgICAgICAqIFJldHVybnMgc2VyaWFsaXplZCBKU09OICh0eXBlIHN0cmluZyk7IHBhcnNpbmcgdGhpcyB3aWxsIHJlc3VsdAogICAgICAgICAqIGEgbmF0aXZlIEpTIG9iamVjdC4KICAgICAgICAgKi8KICAgICAgICB2YXIgc3RvcmVkSnNvbiA9IHN0b3JlZFByb2ZpbGVzLmdldChpKTsKICAgICAgICB2YXIgc3RvcmVkID0gSlNPTi5wYXJzZShzdG9yZWRKc29uKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogRmluZCBhIHN0b3JlZCBwcm9maWxlIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllci4KICAgICAgICAgKi8KICAgICAgICBpZiAoaW5jb21pbmcuaWRlbnRpZmllciA9PT0gc3RvcmVkLmlkZW50aWZpZXIpIHsKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBOb3cgdGhhdCB5b3UndmUgZm91bmQgdGhlIGFwcHJvcHJpYXRlIHByb2ZpbGUsIHlvdSB3aWxsIHBlcmZvcm0KICAgICAgICAgICAgICogdGhlIGxvZ2ljIGhlcmUgdG8gbWF0Y2ggdGhlIHZhbHVlcyBvZiB0aGUgYGluY29taW5nYCBwcm9maWxlCiAgICAgICAgICAgICAqIHdpdGggdGhhdCBvZiB0aGUgYHN0b3JlZGAgcHJvZmlsZS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogVGhlIHJlc3VsdCBvZiB0aGUgbWF0Y2hpbmcgbG9naWMgaXMgYXNzaWduZWQgdG8gYG91dGNvbWVgLiBTaW5jZQogICAgICAgICAgICAgKiB3ZSBoYXZlIHByb2ZpbGVzIG9mIHRoZSBzYW1lIGlkZW50aWZpZXIsIHRoZSB2YWx1ZSAodHlwZSBzdHJpbmcpCiAgICAgICAgICAgICAqIHNob3VsZCBub3cgYmUgZWl0aGVyICd0cnVlJyBvciAnZmFsc2UnIChwcm9wZXJ0aWVzIG1hdGNoZWQgb3Igbm90KS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0b3BpYywgdmlzaXQgdGhpcyBHaXRodWIgcmVwbzoKICAgICAgICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL0ZvcmdlUm9jay9mb3JnZXJvY2stZGV2aWNlLW1hdGNoLXNjcmlwdAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgb3V0Y29tZSA9ICdmYWxzZSc7CiAgICAgICAgfQogICAgfQp9\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"name\":\"Remove Button\",\"description\":\"Remove button from page.\",\"script\":\"LyogUmVtb3ZlIEJ1dHRvbgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBIaWRlIGJ1dHRvbnMgb24gdGhlIGpvdXJuZXkgcGFnZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfSkiCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICB2YXIgbWVzc2FnZSA9ICIgIgogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIG1lc3NhZ2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"472534ec-a25f-468d-a606-3fb1935190df\",\"name\":\"WeChat Profile Normalization\",\"description\":\"Normalizes raw profile data from WeChat\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLm9wZW5pZCksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uaWNrbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5oZWFkaW1ndXJsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLm5pY2tuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6325cf19-a49b-471e-8d26-7e4df76df0e2\",\"name\":\"Okta Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJPa3RhIHJhd1Byb2ZpbGU6ICIrcmF3UHJvZmlsZSkKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5wcmVmZXJyZWRfdXNlcm5hbWUpKSk=\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"7b88752e-5529-459c-a970-1fb78ff0d87f\",\"name\":\"Set Email Verified\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkKKTsKd2l0aCAoZnIpIHsKICAKICB2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCiAgdmFyIGF0dHJpYnV0ZSA9ICJmci1hdHRyLXN0cjEiCiAKICBpZFJlcG9zaXRvcnkuc2V0QXR0cmlidXRlKHVzZXJuYW1lLCBhdHRyaWJ1dGUsIFsidmVyaWZpZWQiXSk7CiAgCiAgb3V0Y29tZSA9ICJ0cnVlIgp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1f389a3d-21cf-417c-a6d3-42ea620071f0\",\"name\":\"ForgeRock Internal: OIDC Claims Script\",\"description\":\"Internal OIDC Claims script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6c49bebe-3a62-11ed-a261-0242ac120002\",\"name\":\"Library Script\",\"description\":\"Default global library script to be referenced from other scripts\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjItMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIGlzIGFuIGV4YW1wbGUgbGlicmFyeSBzY3JpcHQgd2l0aCBtZXRob2RzIHRoYXQgY2FuIGJlIHVzZWQgaW4gb3RoZXIgc2NyaXB0cy4KICogVG8gcmVmZXJlbmNlIGl0LCB1c2UgdGhlIGZvbGxvd2luZzoKICoKICogdmFyIGxpYnJhcnkgPSByZXF1aXJlKCJMaWJyYXJ5IFNjcmlwdCIpOwogKgogKiBsaWJyYXJ5LmxvZ0Vycm9yKGxvZ2dlciwgIkVycm9yIG1lc3NhZ2UiKTsKICogbGlicmFyeS5sb2dEZWJ1Zyhsb2dnZXIsICJEZWJ1ZyBtZXNzYWdlIik7CiAqLwoKZnVuY3Rpb24gbG9nRXJyb3IobG9nLCBlcnJvck1lc3NhZ2UpIHsKICBsb2cuZXJyb3IoZXJyb3JNZXNzYWdlKTsKfQoKZnVuY3Rpb24gbG9nV2FybmluZyhsb2csIHdhcm5pbmdNZXNzYWdlKSB7CiAgbG9nLndhcm4od2FybmluZ01lc3NhZ2UpOwp9CgpleHBvcnRzLmxvZ0Vycm9yID0gbG9nRXJyb3I7CmV4cG9ydHMubG9nV2FybmluZyA9IGxvZ1dhcm5pbmc7CgovLyBBbHRlcm5hdGl2ZWx5LCBleHBvcnRzIGNhbiBiZSBkZWNsYXJlZCB1c2luZyBhbiBpbmxpbmUgYXJyb3cgZnVuY3Rpb24KCmV4cG9ydHMubG9nSW5mbyA9IChsb2csIGluZm9NZXNzYWdlKSA9PiBsb2cuaW5mbyhpbmZvTWVzc2FnZSk7CmV4cG9ydHMubG9nRGVidWcgPSAobG9nLCBkZWJ1Z01lc3NhZ2UpID0+IGxvZy5kZWJ1ZyhkZWJ1Z01lc3NhZ2UpOw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org\",\"creationDate\":1433147666269,\"lastModifiedBy\":\"id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org\",\"lastModifiedDate\":1433147666269,\"evaluatorVersion\":\"2.0\"}],\"resultCount\":95,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -108,18 +112,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "transfer-encoding", + "value": "chunked" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:21 GMT" + "value": "Wed, 19 Jun 2024 21:28:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -127,20 +139,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 800, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:21.920Z", - "time": 81, + "startedDateTime": "2024-06-19T21:28:25.980Z", + "time": 97, "timings": { "blocked": -1, "connect": -1, @@ -148,11 +156,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 81 + "wait": 97 } }, { - "_id": "0b5bdd5efa8fa86e894e34cbb0737401", + "_id": "60315e24f99439c8e4989ee6eb506111", "_order": 0, "cache": {}, "request": { @@ -164,16 +172,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -183,28 +191,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1625, + "headersSize": 1700, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"FrodoTestScript3\"" + "value": "name eq \"Device Id (Match) - Server Side\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript3%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Device%20Id%20%28Match%29%20-%20Server%20Side%22" }, "response": { - "bodySize": 1131, + "bodySize": 40318, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1131, - "text": "{\"result\":[{\"_id\":\"3b2f6836-184c-4ee9-8a1d-557cb01837a5\",\"name\":\"FrodoTestScript3\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 40318, + "text": "{\"result\":[{\"_id\":\"703dab1a-1921-4981-98dd-b8e5349d8548\",\"name\":\"Device Id (Match) - Server Side\",\"description\":\"Default global script for server side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAyMyBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIFNjYWxhckNvbXBhcmF0b3IgPSB7fSwgU2NyZWVuQ29tcGFyYXRvciA9IHt9LCBNdWx0aVZhbHVlQ29tcGFyYXRvciA9IHt9LCBVc2VyQWdlbnRDb21wYXJhdG9yID0ge30sIEdlb2xvY2F0aW9uQ29tcGFyYXRvciA9IHt9OwoKdmFyIGNvbmZpZyA9IHsKICAgIHByb2ZpbGVFeHBpcmF0aW9uOiAzMCwgICAgICAgICAgICAgIC8vaW4gZGF5cwogICAgbWF4UHJvZmlsZXNBbGxvd2VkOiA1LAogICAgbWF4UGVuYWx0eVBvaW50czogMCwKICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBzY3JlZW46IHsKICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICAgIGNvbXBhcmF0b3I6IFNjcmVlbkNvbXBhcmF0b3IsCiAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDUwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHBsdWdpbnM6IHsKICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2luczogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmb250czogewogICAgICAgICAgICBpbnN0YWxsZWRGb250czogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogU2NhbGFyQ29tcGFyYXRvciwKICAgICAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdXNlckFnZW50OiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgICBjb21wYXJhdG9yOiBVc2VyQWdlbnRDb21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBpZ25vcmVWZXJzaW9uOiB0cnVlLAogICAgICAgICAgICAgICAgcGVuYWx0eVBvaW50czogMTAwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdlb2xvY2F0aW9uOiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSwKICAgICAgICAgICAgY29tcGFyYXRvcjogR2VvbG9jYXRpb25Db21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBhbGxvd2VkUmFuZ2U6IDEwMCwgICAgICAgICAgICAvL2luIG1pbGVzCiAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJhdG9yIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCgp2YXIgYWxsLCBhbnksIGNhbGN1bGF0ZURpc3RhbmNlLCBjYWxjdWxhdGVJbnRlcnNlY3Rpb24sIGNhbGN1bGF0ZVBlcmNlbnRhZ2UsIG51bGxPclVuZGVmaW5lZCwgc3BsaXRBbmRUcmltLAogICAgdW5kZWZpbmVkTG9jYXRpb247CgovLyBDb21wYXJpc29uUmVzdWx0CgovKioKICogQ29uc3RydWN0cyBhbiBpbnN0YW5jZSBvZiBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gcGVuYWx0eSBwb2ludHMuCiAqCiAqIEBwYXJhbSBwZW5hbHR5UG9pbnRzIChOdW1iZXIpIFRoZSBwZW5hbHR5IHBvaW50cyBmb3IgdGhlIGNvbXBhcmlzb24gKGRlZmF1bHRzIHRvIDApLgogKiBAcGFyYW0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSAoYm9vbGVhbikgV2hldGhlciB0aGUgY3VycmVudCB2YWx1ZSBjb250YWlucyBtb3JlIGluZm9ybWF0aW9uCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIHRoZSBzdG9yZWQgdmFsdWUgKGRlZmF1bHRzIHRvIGZhbHNlKS4KICovCmZ1bmN0aW9uIENvbXBhcmlzb25SZXN1bHQoKSB7CgogICAgdmFyIHBlbmFsdHlQb2ludHMgPSAwLAogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBmYWxzZTsKCiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQpIHsKICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBhcmd1bWVudHNbMV07CiAgICB9CgogICAgaWYgKGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkICYmIGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgaWYgKHR5cGVvZihhcmd1bWVudHNbMF0pID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSA9IGFyZ3VtZW50c1swXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIH0KICAgIH0KCiAgICB0aGlzLnBlbmFsdHlQb2ludHMgPSBwZW5hbHR5UG9pbnRzOwogICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZTsKCn0KCkNvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUyA9IG5ldyBDb21wYXJpc29uUmVzdWx0KDApOwoKLyoqCiAqIFN0YXRpYyBtZXRob2QgZm9yIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcuCiAqCiAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkuCiAqLwpDb21wYXJpc29uUmVzdWx0LmlzU3VjY2Vzc2Z1bCA9ICBmdW5jdGlvbihjb21wYXJpc29uUmVzdWx0KSB7CiAgICByZXR1cm4gY29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKTsKfTsKCgovKioKICogU3RhdGljIG1ldGhvZCBmb3IgZnVuY3Rpb25hbCBwcm9ncmFtbWluZy4KICoKICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gIGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHJldHVybiBjb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU7Cn07CgovKioKICogQ29tcGFyaXNvbiBmdW5jdGlvbiB0aGF0IGNhbiBiZSBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCB0byBhcnJheS5zb3J0CiAqLwpDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUgPSBmdW5jdGlvbihmaXJzdCwgc2Vjb25kKSB7CiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGZpcnN0KSAmJiBudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAwOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoZmlyc3QpKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAxOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoZmlyc3QucGVuYWx0eVBvaW50cyAhPT0gc2Vjb25kLnBlbmFsdHlQb2ludHMpIHsKICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnBlbmFsdHlQb2ludHMgLSBzZWNvbmQucGVuYWx0eVBvaW50czsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gKGZpcnN0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCkgLSAoc2Vjb25kLmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCk7CiAgICAgICAgfQogICAgfQp9OwoKLyoqCiAqIEFtYWxnYW1hdGVzIHRoZSBnaXZlbiBDb21wYXJpc29uUmVzdWx0IGludG8gdGhpcyBDb21wYXJpc29uUmVzdWx0LgogKgogKiBAcGFyYW0gY29tcGFyaXNvblJlc3VsdCBUaGUgQ29tcGFyaXNvblJlc3VsdCB0byBpbmNsdWRlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5wcm90b3R5cGUuYWRkQ29tcGFyaXNvblJlc3VsdCA9IGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHRoaXMucGVuYWx0eVBvaW50cyArPSBjb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHM7CiAgICBpZiAoY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKSB7CiAgICAgICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlOwogICAgfQp9OwoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBubyBwZW5hbHR5IHBvaW50cyBoYXZlIGJlZW4gYXNzaWduZWQgZm9yIHRoZSBjb21wYXJpc29uLgogKgogKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgY29tcGFyaXNvbiB3YXMgc3VjY2Vzc2Z1bC4KICovCkNvbXBhcmlzb25SZXN1bHQucHJvdG90eXBlLmlzU3VjY2Vzc2Z1bCA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZCh0aGlzLnBlbmFsdHlQb2ludHMpIHx8IHRoaXMucGVuYWx0eVBvaW50cyA9PT0gMDsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gc2ltcGxlIG9iamVjdHMgKFN0cmluZ3xOdW1iZXIpIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybwogKiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIGN1cnJlbnQgdmFsdWUuCiAqIEBwYXJhbSBzdG9yZWRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIHN0b3JlZCB2YWx1ZS4KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0LgogKi8KU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlID0gZnVuY3Rpb24gKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUsIGNvbmZpZykgewogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlN0cmluZ0NvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOnN0b3JlZFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoc3RvcmVkVmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOmNvbmZpZzogIiArIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpOwogICAgfQogICAgaWYgKGNvbmZpZy5wZW5hbHR5UG9pbnRzID09PSAwKSB7CiAgICAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUzsKICAgIH0KCiAgICBpZiAoIW51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgfHwgY3VycmVudFZhbHVlICE9PSBzdG9yZWRWYWx1ZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoIW51bGxPclVuZGVmaW5lZChjdXJyZW50VmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KHRydWUpOwogICAgfQoKICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7Cn07CgovKioKICogQ29tcGFyZXMgdHdvIHNjcmVlbnMgYW5kIGlmIHRoZXkgYXJlIGVxdWFsIHRoZW4gcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB6ZXJvIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLAogKiBvdGhlcndpc2UgcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiB7CiAqICAgICAgICAgICAgInNjcmVlbldpZHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBoZWlnaHQuCiAqICAgICAgICAgICAgInNjcmVlbkNvbG91ckRlcHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBjb2xvdXIgZGVwdGguCiAqICAgICAgICB9CiAqIEBwYXJhbSBzdG9yZWRWYWx1ZTogewogKiAgICAgICAgICAgICJzY3JlZW5XaWR0aCI6IChOdW1iZXIpIFRoZSBzdG9yZWQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIHN0b3JlZCBjbGllbnQgc2NyZWVuIGhlaWdodC4KICogICAgICAgICAgICAic2NyZWVuQ29sb3VyRGVwdGgiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGNsaWVudCBzY3JlZW4gY29sb3VyIGRlcHRoLgogKiAgICAgICAgfQogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgInBlbmFsdHlQb2ludHMiOiAoTnVtYmVyKSBUaGUgbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzLgogKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovClNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTY3JlZW5Db21wYXJhdG9yLmNvbXBhcmU6Y3VycmVudFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICBjdXJyZW50VmFsdWUgPSB7c2NyZWVuV2lkdGg6IG51bGwsIHNjcmVlbkhlaWdodDogbnVsbCwgc2NyZWVuQ29sb3VyRGVwdGg6IG51bGx9OwogICAgfQogICAgaWYgKG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBzdG9yZWRWYWx1ZSA9IHtzY3JlZW5XaWR0aDogbnVsbCwgc2NyZWVuSGVpZ2h0OiBudWxsLCBzY3JlZW5Db2xvdXJEZXB0aDogbnVsbH07CiAgICB9CgogICAgdmFyIGNvbXBhcmlzb25SZXN1bHRzID0gWwogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuV2lkdGgsIHN0b3JlZFZhbHVlLnNjcmVlbldpZHRoLCBjb25maWcpLAogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuSGVpZ2h0LCBzdG9yZWRWYWx1ZS5zY3JlZW5IZWlnaHQsIGNvbmZpZyksCiAgICAgICAgU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlKGN1cnJlbnRWYWx1ZS5zY3JlZW5Db2xvdXJEZXB0aCwgc3RvcmVkVmFsdWUuc2NyZWVuQ29sb3VyRGVwdGgsIGNvbmZpZyldOwoKICAgIGlmIChhbGwoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKSkgewogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChhbnkoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSkpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgfQp9OwoKLyoqCiAqIFNwbGl0cyBib3RoIHZhbHVlcyB1c2luZyBkZWxpbWl0ZXIsIHRyaW1zIGV2ZXJ5IHZhbHVlIGFuZCBjb21wYXJlcyBjb2xsZWN0aW9ucyBvZiB2YWx1ZXMuCiAqIFJldHVybnMgemVyby1yZXN1bHQgZm9yIHNhbWUgbXVsdGktdmFsdWUgYXR0cmlidXRlcy4KICoKICogSWYgY29sbGVjdGlvbnMgYXJlIG5vdCBzYW1lIGNoZWNrcyBpZiBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaXMgbGVzcyBvciBlcXVhbCBtYXhEaWZmZXJlbmNlcyBvcgogKiBwZXJjZW50YWdlIG9mIGRpZmZlcmVuY2UgaXMgbGVzcyBvciBlcXVhbCBtYXhQZXJjZW50YWdlRGlmZmVyZW5jZS4KICoKICogSWYgeWVzIHRoZW4gcmV0dXJucyB6ZXJvLXJlc3VsdCB3aXRoIGFkZGl0aW9uYWwgaW5mbywgZWxzZSByZXR1cm5zIHBlbmFsdHlQb2ludHMtcmVzdWx0LgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlOiAoU3RyaW5nKSBUaGUgc3RvcmVkIHZhbHVlLgogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgIm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlIjogKE51bWJlcikgVGhlIG1heCBkaWZmZXJlbmNlIHBlcmNlbnRhZ2UgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgaXMgYXNzaWduZWQuCiAqICAgICAgICAgICAgIm1heERpZmZlcmVuY2VzIjogKE51bWJlcikgVGhlIG1heCBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgcG9pbnRzIGFyZSBhc3NpZ25lZC4KICogICAgICAgICAgICAicGVuYWx0eVBvaW50cyI6IChOdW1iZXIpIFRoZSBudW1iZXIgb2YgcGVuYWx0eSBwb2ludHMuCiAgKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovCk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgdmFyIGRlbGltaXRlciA9ICI7IiwKICAgICAgICBjdXJyZW50VmFsdWVzID0gc3BsaXRBbmRUcmltKGN1cnJlbnRWYWx1ZSwgZGVsaW1pdGVyKSwKICAgICAgICBzdG9yZWRWYWx1ZXMgPSBzcGxpdEFuZFRyaW0oc3RvcmVkVmFsdWUsIGRlbGltaXRlciksCiAgICAgICAgbWF4TnVtYmVyT2ZFbGVtZW50cyA9IE1hdGgubWF4KGN1cnJlbnRWYWx1ZXMubGVuZ3RoLCBzdG9yZWRWYWx1ZXMubGVuZ3RoKSwKICAgICAgICBudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9IGNhbGN1bGF0ZUludGVyc2VjdGlvbihjdXJyZW50VmFsdWVzLCBzdG9yZWRWYWx1ZXMpLmxlbmd0aCwKICAgICAgICBudW1iZXJPZkRpZmZlcmVuY2VzID0gbWF4TnVtYmVyT2ZFbGVtZW50cyAtIG51bWJlck9mVGhlU2FtZUVsZW1lbnRzLAogICAgICAgIHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzID0gY2FsY3VsYXRlUGVyY2VudGFnZShudW1iZXJPZkRpZmZlcmVuY2VzLCBtYXhOdW1iZXJPZkVsZW1lbnRzKTsKCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKHN0b3JlZFZhbHVlKSAmJiAhbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UobnVtYmVyT2ZUaGVTYW1lRWxlbWVudHMgKyAiIG9mICIgKyBtYXhOdW1iZXJPZkVsZW1lbnRzICsgIiBhcmUgc2FtZSIpOwogICAgfQoKICAgIGlmIChtYXhOdW1iZXJPZkVsZW1lbnRzID09PSAwKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBubyBhdHRyaWJ1dGVzIGZvdW5kIGluIGJvdGggcHJvZmlsZXMiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9PT0gbWF4TnVtYmVyT2ZFbGVtZW50cykgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJJZ25vcmVkIGJlY2F1c2UgYWxsIGF0dHJpYnV0ZXMgYXJlIHNhbWUiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZkRpZmZlcmVuY2VzID4gY29uZmlnLm1heERpZmZlcmVuY2VzKSB7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJXb3VsZCBiZSBpZ25vcmVkIGlmIG5vdCBtb3JlIHRoYW4gIiArIGNvbmZpZy5tYXhEaWZmZXJlbmNlcyArICIgZGlmZmVyZW5jZXMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KCiAgICBpZiAocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgPiBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgKyAiIHBlcmNlbnRzIGFyZSBkaWZmZXJlbnQiKTsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIldvdWxkIGJlIGlnbm9yZWQgaWYgbm90IG1vcmUgdGhhbiAiICsgY29uZmlnLm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlICsgIiBwZXJjZW50Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChjb25maWcucGVuYWx0eVBvaW50cyk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBudW1iZXIgb2YgZGlmZmVyZW5jZXMoIiArIG51bWJlck9mRGlmZmVyZW5jZXMgKyAiKSBub3QgbW9yZSB0aGFuICIKICAgICAgICAgICAgKyBjb25maWcubWF4RGlmZmVyZW5jZXMpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzICsgIiBwZXJjZW50cyBhcmUgZGlmZmVyZW50Iik7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBub3QgbW9yZSB0aGFuICIgKyBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UgKyAiIHBlcmNlbnQiKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdCh0cnVlKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gVXNlciBBZ2VudCBTdHJpbmdzIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybyBwZW5hbHR5CiAqIHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlIChTdHJpbmcpIFRoZSBzdG9yZWQgdmFsdWUuCiAqIEBwYXJhbSBjb25maWc6IHsKICogICAgICAgICAgICAiaWdub3JlVmVyc2lvbiI6IChib29sZWFuKSBJZiB0aGUgdmVyc2lvbiBudW1iZXJzIGluIHRoZSBVc2VyIEFnZW50IFN0cmluZ3Mgc2hvdWxkIGJlIGlnbm9yZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb21wYXJpc29uLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBBIENvbXBhcmlzb25SZXN1bHQuCiAqLwpVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiVXNlckFnZW50Q29tcGFyYXRvci5jb21wYXJlOmN1cnJlbnRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgaWYgKGNvbmZpZy5pZ25vcmVWZXJzaW9uKSB7CiAgICAgICAgLy8gcmVtb3ZlIHZlcnNpb24gbnVtYmVyCiAgICAgICAgY3VycmVudFZhbHVlID0gbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgPyBudWxsIDogY3VycmVudFZhbHVlLnJlcGxhY2UoL1tcZFwuXSsvZywgIiIpLnRyaW0oKTsKICAgICAgICBzdG9yZWRWYWx1ZSA9IG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkgPyBudWxsIDogc3RvcmVkVmFsdWUucmVwbGFjZSgvW1xkXC5dKy9nLCAiIikudHJpbSgpOwogICAgfQoKICAgIHJldHVybiBTY2FsYXJDb21wYXJhdG9yLmNvbXBhcmUoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gbG9jYXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50IGEgZGVncmVlIG9mIGRpZmZlcmVuY2UuCiAqCiAqIEBwYXJhbSBjdXJyZW50VmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgY3VycmVudCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGN1cnJlbnQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcGFyYW0gc3RvcmVkVmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxhdGl0dWRlLgogKiAgICAgICAgICAgICJsb25naXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJhbGxvd2VkUmFuZ2UiOiAoTnVtYmVyKSBUaGUgbWF4IGRpZmZlcmVuY2UgYWxsb3dlZCBpbiB0aGUgdHdvIGxvY2F0aW9ucywgYmVmb3JlIHRoZSBwZW5hbHR5IGlzIGFzc2lnbmVkLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KKiAgICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0CiAqLwpHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiR2VvbG9jYXRpb25Db21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICAvLyBDaGVjayBmb3IgdW5kZWZpbmVkIHN0b3JlZCBvciBjdXJyZW50IGxvY2F0aW9ucwoKICAgIGlmICh1bmRlZmluZWRMb2NhdGlvbihjdXJyZW50VmFsdWUpICYmIHVuZGVmaW5lZExvY2F0aW9uKHN0b3JlZFZhbHVlKSkgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CiAgICBpZiAodW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiAhdW5kZWZpbmVkTG9jYXRpb24oc3RvcmVkVmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KICAgIGlmICghdW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiB1bmRlZmluZWRMb2NhdGlvbihzdG9yZWRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgLy8gQm90aCBsb2NhdGlvbnMgZGVmaW5lZCwgdGhlcmVmb3JlIHBlcmZvcm0gY29tcGFyaXNvbgoKICAgIHZhciBkaXN0YW5jZSA9IGNhbGN1bGF0ZURpc3RhbmNlKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUpOwoKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJEaXN0YW5jZSBiZXR3ZWVuICgiICsgY3VycmVudFZhbHVlLmxhdGl0dWRlICsgIiwiICsgY3VycmVudFZhbHVlLmxvbmdpdHVkZSArICIpIGFuZCAoIiArCiAgICAgICAgICAgIHN0b3JlZFZhbHVlLmxhdGl0dWRlICsgIiwiICsgc3RvcmVkVmFsdWUubG9uZ2l0dWRlICsgIikgaXMgIiArIGRpc3RhbmNlICsgIiBtaWxlcyIpOwogICAgfQoKICAgIGlmIChwYXJzZUZsb2F0KGRpc3RhbmNlLnRvUHJlY2lzaW9uKDUpKSA9PT0gMCkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJMb2NhdGlvbiBpcyB0aGUgc2FtZSIpOwogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CgogICAgaWYgKGRpc3RhbmNlIDw9IGNvbmZpZy5hbGxvd2VkUmFuZ2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlRvbGVyYXRlZCBiZWNhdXNlIGRpc3RhbmNlIG5vdCBtb3JlIHRoZW4gIiArIGNvbmZpZy5hbGxvd2VkUmFuZ2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiV291bGQgYmUgaWdub3JlZCBpZiBkaXN0YW5jZSBub3QgbW9yZSB0aGVuICIgKyBjb25maWcuYWxsb3dlZFJhbmdlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KfTsKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi8vICAgICAgICAgICAgICAgICAgICBEZXZpY2UgUHJpbnQgTG9naWMgLSBETyBOT1QgTU9ESUZZICAgICAgICAgICAgICAgICAgICAgLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwoKLy8gVXRpbGl0eSBmdW5jdGlvbnMKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgZXZhbHVhdGluZyBmdW5jdGlvbiBmIG9uIGVhY2ggZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYWxsID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn07CgovKioKICogUmV0dXJucyB0cnVlIGlmIGV2YWx1YXRpbmcgZnVuY3Rpb24gZiBvbiBhbnkgZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYW55ID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGxvY2F0aW9uIGlzIG51bGwgb3IgaGFzIHVuZGVmaW5lZCBsb25naXR1ZGUgb3IgbGF0aXR1ZGUgdmFsdWVzLgogKgogKiBAcGFyYW0gbG9jYXRpb246IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBsb25naXR1ZGUuCiAqICAgICAgICB9CiAqIEByZXR1cm4gYm9vbGVhbgogKi8KdW5kZWZpbmVkTG9jYXRpb24gPSBmdW5jdGlvbihsb2NhdGlvbikgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZChsb2NhdGlvbikgfHwgbnVsbE9yVW5kZWZpbmVkKGxvY2F0aW9uLmxhdGl0dWRlKSB8fCBudWxsT3JVbmRlZmluZWQobG9jYXRpb24ubG9uZ2l0dWRlKTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLgogKgogKiBAcGFyYW0gdmFsdWU6IGEgdmFsdWUgb2YgYW55IHR5cGUKICogQHJldHVybiBib29sZWFuCiAqLwpudWxsT3JVbmRlZmluZWQgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7Cn07CgovKioKICogQ2FsY3VsYXRlcyB0aGUgZGlzdGFuY2VzIGJldHdlZW4gdGhlIHR3byBsb2NhdGlvbnMuCiAqCiAqIEBwYXJhbSBmaXJzdDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBmaXJzdCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGZpcnN0IGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIHNlY29uZDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcmV0dXJuIE51bWJlciBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdHdvIGxvY2F0aW9ucy4KICovCmNhbGN1bGF0ZURpc3RhbmNlID0gZnVuY3Rpb24oZmlyc3QsIHNlY29uZCkgewogICAgdmFyIGZhY3RvciA9IChNYXRoLlBJIC8gMTgwKSwKICAgICAgICB0aGV0YSwKICAgICAgICBkaXN0OwogICAgZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkZWdyZWVzKSB7CiAgICAgICAgcmV0dXJuIGRlZ3JlZXMgKiBmYWN0b3I7CiAgICB9CiAgICBmdW5jdGlvbiByYWRpYW5zVG9EZWdyZWVzKHJhZGlhbnMpIHsKICAgICAgICByZXR1cm4gcmFkaWFucyAvIGZhY3RvcjsKICAgIH0KICAgIHRoZXRhID0gZmlyc3QubG9uZ2l0dWRlIC0gc2Vjb25kLmxvbmdpdHVkZTsKICAgIGRpc3QgPSBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKyBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHRoZXRhKSk7CiAgICBkaXN0ID0gTWF0aC5hY29zKGRpc3QpOwogICAgZGlzdCA9IHJhZGlhbnNUb0RlZ3JlZXMoZGlzdCk7CiAgICBkaXN0ID0gZGlzdCAqIDYwICogMS4xNTE1OwogICAgcmV0dXJuIGRpc3Q7Cn07CgovKioKICogQ29udmVydHMgYSBTdHJpbmcgaG9sZGluZyBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMgaW50byBhbiBhcnJheS4KICoKICogQHBhcmFtIHRleHQgKFN0cmluZykgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMuCiAqIEBwYXJhbSBkZWxpbWl0ZXIgKFN0cmluZykgVGhlIGNoYXJhY3RlciBkZWxpbWl0aW5nIHZhbHVlcyB3aXRoaW4gdGhlIHRleHQgU3RyaW5nLgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMuCiAqLwpzcGxpdEFuZFRyaW0gPSBmdW5jdGlvbih0ZXh0LCBkZWxpbWl0ZXIpIHsKCiAgICB2YXIgcmVzdWx0cyA9IFtdLAogICAgICAgIGksCiAgICAgICAgdmFsdWVzLAogICAgICAgIHZhbHVlOwogICAgaWYgKHRleHQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KCiAgICB2YWx1ZXMgPSB0ZXh0LnNwbGl0KGRlbGltaXRlcik7CiAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFsdWUgPSB2YWx1ZXNbaV0udHJpbSgpOwogICAgICAgIGlmICh2YWx1ZSAhPT0gIiIpIHsKICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdHM7Cn07CgovKioKICogQ29udmVydHMgdmFsdWUgdG8gYSBwZXJjZW50YWdlIG9mIHJhbmdlLgogKgogKiBAcGFyYW0gdmFsdWUgKE51bWJlcikgVGhlIGFjdHVhbCBudW1iZXIgdG8gYmUgY29udmVydGVkIHRvIGEgcGVyY2VudGFnZS4KICogQHBhcmFtIHJhbmdlIChOdW1iZXIpIFRoZSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzIChpLmUuIHJlcHJlc2VudHMgMTAwJSkuCiAqIEByZXR1cm4gKE51bWJlcikgVGhlIHBlcmNlbnRhZ2UuCiAqLwpjYWxjdWxhdGVQZXJjZW50YWdlID0gZnVuY3Rpb24odmFsdWUsIHJhbmdlKSB7CiAgICBpZiAocmFuZ2UgPT09IDApIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBwYXJzZUZsb2F0KCh2YWx1ZSAvIHJhbmdlKS50b1ByZWNpc2lvbigyKSkgKiAxMDA7Cn07CgovKioKICogQ3JlYXRlcyBhIG5ldyBhcnJheSBjb250YWluaW5nIG9ubHkgdGhvc2UgZWxlbWVudHMgZm91bmQgaW4gYm90aCBhcnJheXMgcmVjZWl2ZWQgYXMgYXJndW1lbnRzLgogKgogKiBAcGFyYW0gZmlyc3QgKEFycmF5KSBUaGUgZmlyc3QgYXJyYXkuCiAqIEBwYXJhbSBzZWNvbmQgKEFycmF5KSBUaGUgc2Vjb25kIGFycmF5LgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGVsZW1lbnRzIHRoYXQgZm91bmQgaW4gZmlyc3QgYW5kIHNlY29uZC4KICovCmNhbGN1bGF0ZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGZpcnN0LCBzZWNvbmQpIHsKICAgIHJldHVybiBmaXJzdC5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgIHJldHVybiBzZWNvbmQuaW5kZXhPZihlbGVtZW50KSAhPT0gLTE7CiAgICB9KTsKfTsKCmZ1bmN0aW9uIGdldFZhbHVlKG9iaiwgYXR0cmlidXRlUGF0aCkgewogICAgdmFyIHZhbHVlID0gb2JqLAogICAgICAgIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cmlidXRlUGF0aC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICB2YWx1ZSA9IHZhbHVlW2F0dHJpYnV0ZVBhdGhbaV1dOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwp9CgoKZnVuY3Rpb24gaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWcpIHsKICAgIHJldHVybiBhdHRyaWJ1dGVDb25maWcuY29tcGFyYXRvciAhPT0gdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcsIGF0dHJpYnV0ZVBhdGgpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBbXSwKICAgICAgICBhdHRyaWJ1dGVOYW1lLAogICAgICAgIGF0dHJQYXRocywKICAgICAgICBhdHRyUGF0aCwKICAgICAgICBpOwoKICAgIGZvciAoYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVDb25maWcpIHsKICAgICAgICBpZiAoYXR0cmlidXRlQ29uZmlnLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZU5hbWUpKSB7CgogICAgICAgICAgICBpZiAoaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWdbYXR0cmlidXRlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBhdHRyUGF0aCA9IGF0dHJpYnV0ZVBhdGguc2xpY2UoKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRoLnB1c2goYXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVQYXRocy5wdXNoKGF0dHJQYXRoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJQYXRoID0gYXR0cmlidXRlUGF0aC5zbGljZSgpOwogICAgICAgICAgICAgICAgYXR0clBhdGgucHVzaChhdHRyaWJ1dGVOYW1lKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRocyA9IGdldEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZ1thdHRyaWJ1dGVOYW1lXSwgYXR0clBhdGgpOwogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGF0dHJQYXRocy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVBhdGhzLnB1c2goYXR0clBhdGhzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYXR0cmlidXRlUGF0aHM7Cn0KCmZ1bmN0aW9uIGdldERldmljZVByaW50QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnKSB7CiAgICByZXR1cm4gZ2V0QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnLCBbXSk7Cn0KCmZ1bmN0aW9uIGhhc1JlcXVpcmVkQXR0cmlidXRlcyhkZXZpY2VQcmludCwgYXR0cmlidXRlQ29uZmlnKSB7CgogICAgdmFyIGF0dHJpYnV0ZVBhdGhzID0gZ2V0RGV2aWNlUHJpbnRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcpLAogICAgICAgIGksCiAgICAgICAgYXR0clZhbHVlLAogICAgICAgIGF0dHJDb25maWc7CgogICAgZm9yIChpID0gMDsgaSA8IGF0dHJpYnV0ZVBhdGhzLmxlbmd0aDsgaSsrKSB7CgogICAgICAgIGF0dHJWYWx1ZSA9IGdldFZhbHVlKGRldmljZVByaW50LCBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICBpZiAoYXR0ckNvbmZpZy5yZXF1aXJlZCAmJiBhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBsb2dnZXIud2FybmluZygiRGV2aWNlIFByaW50IHByb2ZpbGUgbWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUsICIgKyBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZSBwcmludCBoYXMgcmVxdWlyZWQgYXR0cmlidXRlcyIpOwogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGF0dHJpYnV0ZUNvbmZpZywgZGV2aWNlUHJpbnQsIGRldmljZVByaW50UHJvZmlsZXMsIG1heFBlbmFsdHlQb2ludHMpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBnZXREZXZpY2VQcmludEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZyksCiAgICAgICAgZGFvID0gc2hhcmVkU3RhdGUuZ2V0KCdfRGV2aWNlSWREYW8nKSwKICAgICAgICByZXN1bHRzLAogICAgICAgIGosCiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQsCiAgICAgICAgaSwKICAgICAgICBjdXJyZW50VmFsdWUsCiAgICAgICAgc3RvcmVkVmFsdWUsCiAgICAgICAgYXR0ckNvbmZpZywKICAgICAgICBjb21wYXJpc29uUmVzdWx0LAogICAgICAgIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICBzZWxlY3RlZFByb2ZpbGUsCiAgICAgICAgY3VyRGV2aWNlUHJpbnRQcm9maWxlLAogICAgICAgIHZhbHM7CgogICAgcmVzdWx0cyA9IFtdOwogICAgZm9yIChqID0gMDsgaiA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBjdXJEZXZpY2VQcmludFByb2ZpbGUgPSBKU09OLnBhcnNlKG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvbihkZXZpY2VQcmludFByb2ZpbGVzW2pdKSk7CiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQgPSBuZXcgQ29tcGFyaXNvblJlc3VsdCgpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdHRyaWJ1dGVQYXRocy5sZW5ndGg7IGkrKykgewoKICAgICAgICAgICAgY3VycmVudFZhbHVlID0gZ2V0VmFsdWUoZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgc3RvcmVkVmFsdWUgPSBnZXRWYWx1ZShjdXJEZXZpY2VQcmludFByb2ZpbGUuZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICAgICAgaWYgKHN0b3JlZFZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb21wYXJpc29uUmVzdWx0ID0gbmV3IENvbXBhcmlzb25SZXN1bHQoYXR0ckNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbXBhcmlzb25SZXN1bHQgPSBhdHRyQ29uZmlnLmNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBhdHRyQ29uZmlnLmFyZ3MpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJDb21wYXJpbmcgYXR0cmlidXRlIHBhdGg6ICIgKyBhdHRyaWJ1dGVQYXRoc1tpXQogICAgICAgICAgICAgICAgICAgICsgIiwgQ29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkgKyAiLCBwZW5hbHR5UG9pbnRzPSIKICAgICAgICAgICAgICAgICAgICArIGNvbXBhcmlzb25SZXN1bHQucGVuYWx0eVBvaW50cyArICIsIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU9IgogICAgICAgICAgICAgICAgICAgICsgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5hZGRDb21wYXJpc29uUmVzdWx0KGNvbXBhcmlzb25SZXN1bHQpOwogICAgICAgIH0KICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIkFnZ3JlZ2F0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKSArICIsIHBlbmFsdHlQb2ludHM9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICAgICArIGFnZ3JlZ2F0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmVzdWx0cy5wdXNoKHsKICAgICAgICAgICAga2V5OiBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICAgICAgdmFsdWU6IGRldmljZVByaW50UHJvZmlsZXNbal0KICAgICAgICB9KTsKICAgIH0KCiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXN1bHRzLnNvcnQoZnVuY3Rpb24oYSwgYikgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUoYS5rZXksIGIua2V5KTsKICAgIH0pOwogICAgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0ID0gcmVzdWx0c1swXS5rZXk7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU2VsZWN0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKQogICAgICAgICAgICArICIsIHBlbmFsdHlQb2ludHM9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgfQoKICAgIHNlbGVjdGVkUHJvZmlsZSA9IG51bGw7CiAgICBpZiAoc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgPD0gbWF4UGVuYWx0eVBvaW50cykgewogICAgICAgIHNlbGVjdGVkUHJvZmlsZSA9IHJlc3VsdHNbMF0udmFsdWU7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTZWxlY3RlZCBwcm9maWxlOiAiICsgc2VsZWN0ZWRQcm9maWxlICsKICAgICAgICAgICAgICAgICIgd2l0aCAiICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgKyAiIHBlbmFsdHkgcG9pbnRzIik7CiAgICAgICAgfQogICAgfQoKICAgIGlmIChzZWxlY3RlZFByb2ZpbGUgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyogdXBkYXRlIHByb2ZpbGUgKi8KICAgIHNlbGVjdGVkUHJvZmlsZS5wdXQoInNlbGVjdGlvbkNvdW50ZXIiLAogICAgICAgIGphdmEubGFuZy5JbnRlZ2VyLnZhbHVlT2YocGFyc2VJbnQoc2VsZWN0ZWRQcm9maWxlLmdldCgic2VsZWN0aW9uQ291bnRlciIpLCAxMCkgKyAxKSk7CiAgICBzZWxlY3RlZFByb2ZpbGUucHV0KCJsYXN0U2VsZWN0ZWREYXRlIiwgamF2YS5sYW5nLkxvbmcudmFsdWVPZihuZXcgRGF0ZSgpLmdldFRpbWUoKSkpOwogICAgc2VsZWN0ZWRQcm9maWxlLnB1dCgiZGV2aWNlUHJpbnQiLCBkZXZpY2VQcmludCk7CgogICAgdmFscyA9IFtdOwogICAgZm9yIChpID0gMDsgaSA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YWxzLnB1c2gob3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uKGRldmljZVByaW50UHJvZmlsZXNbaV0pKTsKICAgIH0KCiAgICBkYW8uc2F2ZURldmljZVByb2ZpbGVzKHVzZXJuYW1lLCByZWFsbSwgdmFscyk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIG1hdGNoRGV2aWNlUHJpbnQoKSB7CgogICAgaWYgKCF1c2VybmFtZSkgewogICAgICAgIGxvZ2dlci5lcnJvcigiVXNlcm5hbWUgbm90IHNldC4gQ2Fubm90IGNvbXBhcmUgdXNlcidzIGRldmljZSBwcmludCBwcm9maWxlcy4iKTsKICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICB9IGVsc2UgewoKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImNsaWVudCBkZXZpY2VQcmludDogIiArIGNsaWVudFNjcmlwdE91dHB1dERhdGEpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGdldFByb2ZpbGVzID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRXhwaXJlZFByb2ZpbGUoZGV2aWNlUHJpbnRQcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cGlyYXRpb25EYXRlID0gbmV3IERhdGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNlbGVjdGVkRGF0ZTsKICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uRGF0ZS5zZXREYXRlKGV4cGlyYXRpb25EYXRlLmdldERhdGUoKSAtIGNvbmZpZy5wcm9maWxlRXhwaXJhdGlvbik7CgogICAgICAgICAgICAgICAgICAgIGxhc3RTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShkZXZpY2VQcmludFByb2ZpbGUubGFzdFNlbGVjdGVkRGF0ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0U2VsZWN0ZWREYXRlIDwgZXhwaXJhdGlvbkRhdGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICBkYW8gPSBzaGFyZWRTdGF0ZS5nZXQoJ19EZXZpY2VJZERhbycpLAogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVzLAogICAgICAgICAgICAgICAgICAgICAgICBpdGVyOwoKICAgICAgICAgICAgICAgICAgICBwcm9maWxlcyA9IGRhby5nZXREZXZpY2VQcm9maWxlcyh1c2VybmFtZSwgcmVhbG0pOwoKICAgICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaXRlciA9IHByb2ZpbGVzLml0ZXJhdG9yKCk7CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgPSBpdGVyLm5leHQoKS5nZXRPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFeHBpcmVkUHJvZmlsZShwcm9maWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChwcm9maWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoInN0b3JlZCBub24tZXhwaXJlZCBwcm9maWxlczogIiArIHJlc3VsdHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRldmljZVByaW50ID0gSlNPTi5wYXJzZShjbGllbnRTY3JpcHRPdXRwdXREYXRhKSwKICAgICAgICAgICAgZGV2aWNlUHJpbnRQcm9maWxlcyA9IGdldFByb2ZpbGVzKCk7CgogICAgICAgIGlmICghaGFzUmVxdWlyZWRBdHRyaWJ1dGVzKGRldmljZVByaW50LCBjb25maWcuYXR0cmlidXRlcykpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZVByaW50Lmhhc1JlcXVpcmVkQXR0cmlidXRlczogZmFsc2UiKTsKICAgICAgICAgICAgLy8gV2lsbCBmYWlsIHRoaXMgbW9kdWxlIGJ1dCBmYWxsLXRocm91Z2ggdG8gbmV4dCBtb2R1bGUuIFdoaWNoIHNob3VsZCBiZSBPVFAuCiAgICAgICAgICAgIGF1dGhTdGF0ZSA9IEZBSUxFRDsKICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGNvbmZpZy5hdHRyaWJ1dGVzLCBkZXZpY2VQcmludCwgZGV2aWNlUHJpbnRQcm9maWxlcywgY29uZmlnLm1heFBlbmFsdHlQb2ludHMpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJkZXZpY2VQcmludC5oYXNWYWxpZFByb2ZpbGU6IHRydWUiKTsKICAgICAgICAgICAgYXV0aFN0YXRlID0gU1VDQ0VTUzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiZGV2aWNlUHJpbnQuaGFzVmFsaWRQcm9maWxlOiBmYWxzZSIpOwogICAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoJ2RldmljZVByaW50UHJvZmlsZScsIEpTT04uc3RyaW5naWZ5KGRldmljZVByaW50KSk7CiAgICAgICAgICAgIC8vIFdpbGwgZmFpbCB0aGlzIG1vZHVsZSBidXQgZmFsbC10aHJvdWdoIHRvIG5leHQgbW9kdWxlLiBXaGljaCBzaG91bGQgYmUgT1RQLgogICAgICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICAgICAgfQogICAgfQp9CgptYXRjaERldmljZVByaW50KCk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -253,21 +265,25 @@ "value": "application/json;charset=UTF-8" }, { - "name": "content-length", - "value": "1131" + "name": "transfer-encoding", + "value": "chunked" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:21 GMT" + "value": "Wed, 19 Jun 2024 21:28:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -277,14 +293,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 800, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:22.007Z", - "time": 67, + "startedDateTime": "2024-06-19T21:28:26.082Z", + "time": 63, "timings": { "blocked": -1, "connect": -1, @@ -292,11 +308,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 67 + "wait": 63 } }, { - "_id": "c896d9e1d12bcb7e3a5d3d01a7c0dbbc", + "_id": "07d163ce19bcc152182b85d8f79a2690", "_order": 0, "cache": {}, "request": { @@ -308,16 +324,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -327,28 +343,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1673, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Social Identity Provider Profile Transformation Script\"" + "value": "name eq \"wks-ReadUserName\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Social%20Identity%20Provider%20Profile%20Transformation%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22wks-ReadUserName%22" }, "response": { - "bodySize": 1036, + "bodySize": 1500, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1036, - "text": "{\"result\":[{\"_id\":\"1d475815-72cb-42eb-aafd-4026989d28a7\",\"name\":\"Social Identity Provider Profile Transformation Script\",\"description\":\"Default global script for Social Identity Provider Profile Transformation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyogRGVmYXVsdCBTb2NpYWwgSWRlbnRpdHkgUHJvdmlkZXIgUHJvZmlsZSBUcmFuc2Zvcm1hdGlvbiBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzICov\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1500, + "text": "{\"result\":[{\"_id\":\"bae52680-c1ea-4a4b-be80-25db364d822a\",\"name\":\"wks-ReadUserName\",\"description\":\"Reading userName from Query Parameter \",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKb3V0Y29tZSA9ICJmYWxzZSI7CmlmIChyZXF1ZXN0UGFyYW1ldGVycy5nZXQoInVzZXJOYW1lIikpIHsKICAgIHZhciB1c2VyTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChyZXF1ZXN0UGFyYW1ldGVycy5nZXQoInVzZXJOYW1lIikuZ2V0KDApKTsKICAgIHZhciBvYmplY3RBdHRyaWJ1dGVzID0gewogICAgICB1c2VyTmFtZTogdXNlck5hbWUKICAgIH0KICBzaGFyZWRTdGF0ZS5wdXQoIm9iamVjdEF0dHJpYnV0ZXMiLCBvYmplY3RBdHRyaWJ1dGVzKTsKICBvdXRjb21lID0gInRydWUiOwp9Ci8qCmlmIChyZXF1ZXN0UGFyYW1ldGVycy5nZXQoImVtYWlsIikpIHsKICAgIHZhciBleHRlcm5hbGVtYWlsID0gcmVxdWVzdFBhcmFtZXRlcnMuZ2V0KCJlbWFpbCIpLmdldCgwKTsKICAgIHZhciBkZWNvZGVkRW1haWwgPSBkZWNvZGVVUklDb21wb25lbnQoZXh0ZXJuYWxlbWFpbCk7CiAgICB2YXIgb2JqZWN0QXR0cmlidXRlcyA9IHsKICAgICAgZnJJbmRleGVkU3RyaW5nNTogZGVjb2RlZEVtYWlsCiAgICB9CiAgc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgb2JqZWN0QXR0cmlidXRlcyk7CiAgb3V0Y29tZSA9ICJ0cnVlIjsKfQoqLwoKCgoK\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -398,20 +418,24 @@ }, { "name": "content-length", - "value": "1036" + "value": "1500" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:21 GMT" + "value": "Wed, 19 Jun 2024 21:28:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -421,14 +445,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:22.085Z", - "time": 60, + "startedDateTime": "2024-06-19T21:28:26.150Z", + "time": 55, "timings": { "blocked": -1, "connect": -1, @@ -436,11 +460,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 60 + "wait": 55 } }, { - "_id": "bdb484c0a5d4bad077537e0f972d3632", + "_id": "c5caa7291edc554233da2cdc3b03a448", "_order": 0, "cache": {}, "request": { @@ -452,16 +476,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -471,28 +495,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1643, + "headersSize": 1689, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Facebook Profile Normalization\"" + "value": "name eq \"LinkedIn Profile Normalization\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Facebook%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22LinkedIn%20Profile%20Normalization%22" }, "response": { - "bodySize": 1504, + "bodySize": 1600, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1504, - "text": "{\"result\":[{\"_id\":\"bae1d54a-e97d-4997-aa5d-c027f21af82c\",\"name\":\"Facebook Profile Normalization\",\"description\":\"Normalizes raw profile data from Facebook\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1600, + "text": "{\"result\":[{\"_id\":\"8862ca8f-7770-4af5-a888-ac0df0947f36\",\"name\":\"LinkedIn Profile Normalization\",\"description\":\"Normalizes raw profile data from LinkedIn\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5maXJzdE5hbWUubG9jYWxpemVkLmdldCgwKSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3ROYW1lLmxvY2FsaXplZC5nZXQoMCkpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucHJvZmlsZVBpY3R1cmUuZGlzcGxheUltYWdlKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVsZW1lbnRzLmdldCgwKS5nZXQoImhhbmRsZX4iKS5lbWFpbEFkZHJlc3MpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZWxlbWVudHMuZ2V0KDApLmdldCgiaGFuZGxlfiIpLmVtYWlsQWRkcmVzcykpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -542,20 +570,24 @@ }, { "name": "content-length", - "value": "1504" + "value": "1600" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:21 GMT" + "value": "Wed, 19 Jun 2024 21:28:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -565,14 +597,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:22.157Z", - "time": 62, + "startedDateTime": "2024-06-19T21:28:26.210Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -580,11 +612,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 62 + "wait": 52 } }, { - "_id": "d15d4354eec1219a37a90beaed3de432", + "_id": "306f5b3f9bae72de54660fbbffcb0b35", "_order": 0, "cache": {}, "request": { @@ -596,16 +628,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -615,28 +647,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1638, + "headersSize": 1666, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"SAML2 SP Adapter Script\"" + "value": "name eq \"havePush.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22SAML2%20SP%20Adapter%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22havePush.js%22" }, "response": { - "bodySize": 10793, + "bodySize": 677, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 10793, - "text": "{\"result\":[{\"_id\":\"69f06e63-128c-4e2f-af52-079a8a6f448b\",\"name\":\"SAML2 SP Adapter Script\",\"description\":\"Default global script for SAML2 SP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_SP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 677, + "text": "{\"result\":[{\"_id\":\"0cc09f53-7183-4829-a93a-1b3308318ba9\",\"name\":\"havePush.js\",\"description\":\"null\",\"script\":\"dmFyIHB1c2hEZXZpY2VQcm9maWxlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKSwgInB1c2hEZXZpY2VQcm9maWxlcyIpOwppZihwdXNoRGV2aWNlUHJvZmlsZXMubGVuPjApIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7Cn0KZWxzZSB7CiAgb3V0Y29tZSA9ICJmYWxzZSI7Cgp9Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -684,18 +720,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "content-length", + "value": "677" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:22 GMT" + "value": "Wed, 19 Jun 2024 21:28:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -703,20 +747,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:22.226Z", - "time": 65, + "startedDateTime": "2024-06-19T21:28:26.268Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -724,11 +764,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 65 + "wait": 53 } }, { - "_id": "93c3ab20c379d63b813aeb250e58e7d5", + "_id": "f92c54772e92b8bdd08e7cbef5aa4627", "_order": 0, "cache": {}, "request": { @@ -740,16 +780,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -759,28 +799,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1636, + "headersSize": 1711, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"OAuth2 May Act Script\"" + "value": "name eq \"OAuth2 Authorize Endpoint Data Provider Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20May%20Act%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20Authorize%20Endpoint%20Data%20Provider%20Script%22" }, "response": { - "bodySize": 3523, + "bodySize": 4978, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 3523, - "text": "{\"result\":[{\"_id\":\"c735de08-f8f2-4e69-aa4a-2d8d3d438323\",\"name\":\"OAuth2 May Act Script\",\"description\":\"Default global script for OAuth2 May Act\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKiB0b2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gdG8gYmUgdXBkYXRlZC4gTXV0YWJsZSBvYmplY3QsIGFsbCBjaGFuZ2VzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gd2lsbCBiZSByZWZsZWN0ZWQuCiAqIGxvZ2dlciAtIGFsd2F5cyBwcmVzZW50LCBjb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIHNjcmlwdE5hbWUgLSBhbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0CiAqIHNlc3Npb24gLSBwcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdAogKiByZXF1ZXN0UHJvcGVydGllcyAtIGFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIHRoZSByZXF1ZXN0IFVSSQogKiAgICAgICAgICAgICAgICAgICAgIHJlYWxtIC0gdGhlIHJlYWxtIHRoYXQgdGhlIHJlcXVlc3QgcmVsYXRlcyB0bwogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBhIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLiBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IKICogICAgICAgICAgICAgICAgICAgICBtb3JlIHByb3BlcnRpZXMuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QKICogICAgICAgICAgICAgICAgICAgICBwcmFjdGljZXMuCiAqIGNsaWVudFByb3BlcnRpZXMgLSBwcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICBjbGllbnRJZCAtIHRoZSBjbGllbnQncyBVcmkgZm9yIHRoZSByZXF1ZXN0IGxvY2FsZQogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBsaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gbGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudAogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFNjb3BlcyAtIGxpc3Qgb2YgdGhlIGFsbG93ZWQgc2NvcGVzIGZvciB0aGUgY2xpZW50CiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzLCBlLmc6CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdE1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyB0ZXN0bWFwIC0+IEtleTEgLT4gVmFsdWUxCiAqCiAqIGlkZW50aXR5IC0gYWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIKICogc2NvcGVzIC0gYWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzCiAqLwovKgppbXBvcnQgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQoKdG9rZW4uc2V0TWF5QWN0KAogICAgSnNvblZhbHVlLmpzb24oSnNvblZhbHVlLm9iamVjdCgKICAgICAgICBKc29uVmFsdWUuZmllbGQoImNsaWVudF9pZCIsICJteUNsaWVudCIpLCAKICAgICAgICBKc29uVmFsdWUuZmllbGQoInN1YiIsICIodXNyIW15QWN0b3IpIikpKSkKKi8=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"OAUTH2_MAY_ACT\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 4978, + "text": "{\"result\":[{\"_id\":\"3f93ef6e-e54a-4393-aba1-f322656db28a\",\"name\":\"OAuth2 Authorize Endpoint Data Provider Script\",\"description\":\"Default global script for OAuth2 Authorize Endpoint Data Provider\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcmV0dXJuIGFkZGl0aW9uYWwgZGF0YSB3aGVuIGF1dGhvcml6ZSByZXF1ZXN0IGlzIGNhbGxlZC4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LgogKgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cwogKgogKiBsb2dnZXIgLSBEZWJ1ZyAoMykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSAiU2NyaXB0ZWRBdXRob3JpemVFbmRwb2ludERhdGFQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FVVEhPUklaRV9FTkRQT0lOVF9EQVRBX1BST1ZJREVSLgogKgogKiBzY3JpcHROYW1lIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHNjcmlwdAogKgogKiBSZXR1cm4gLSBhIE1hcDxTdHJpbmcsIFN0cmluZz4gb2YgYWRkaXRpb25hbCBkYXRhICg0KS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgzKSBEZWJ1ZyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBhdXRob3JpemUgZW5kcG9pbnQgZGF0YSBwcm92aWRlciBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCi8qIEVYQU1QTEUKdmFyIG1hcCA9IG5ldyBqYXZhLnV0aWwuSGFzaE1hcCgpOwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGEoKSB7CgogICAgLy9JZiBjb25zdGFudCBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkCiAgICBtYXAucHV0KCJoZWxsbyIsICJ3b3JsZCIpOwoKICAgIC8vSWYgc29tZSBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkIGZyb20gdGhpcmQgcGFydHkgc2VydmljZQogICAgYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCk7CgogICAgLy9JZiB0aGVyZSBpcyBhIG5lZWQgdG8gcmV0dXJuIHNvbWUgdXNlciBzZXNzaW9uIGRhdGEKICAgIGFkZEFkZGl0aW9uYWxEYXRhRnJvbVNlc3Npb25Qcm9wZXJ0aWVzKCkKCiAgICByZXR1cm4gbWFwOwp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCkgewogIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLlNlcnZlckV4Y2VwdGlvbgogICAgKTsKICB0cnkgewogICAgICAgIC8vT2J0YWluIGFkZGl0aW9uYWwgZGF0YSBieSBwZXJmb3JtaW5nIGEgUkVTVCBjYWxsIHRvIGFuIGV4dGVybmFsIHNlcnZpY2UKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgICAgIHJlcXVlc3Quc2V0VXJpKCJodHRwczovL3RoaXJkLnBhcnR5LmFwcC9oZWxsby5qc3AiKTsKICAgICAgICByZXF1ZXN0LnNldE1ldGhvZCgiUE9TVCIpOwogICAgICAgIC8vcmVxdWVzdC5zZXRFbnRpdHkoImZvbz1iYXImaGVsbG89d29ybGQiKTsKICAgICAgICByZXF1ZXN0LnNldEVudGl0eShqc29uKG9iamVjdCgKICAgICAgICAgICAgICAgICAgICBmaWVsZCgiZm9vIiwgImJhciIpKSkpOwogICAgICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXRPclRocm93KCk7CiAgICAgICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwogICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICBtYXAucHV0KCJzb21lS2V5IixyZXN1bHQuZ2V0KCJzb21lS2V5IikpOwogIH0gY2F0Y2ggKGVycikgewogICAgIHRocm93IG5ldyBmckphdmEuU2VydmVyRXhjZXB0aW9uKGVycik7CiAgfQp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tU2Vzc2lvblByb3BlcnRpZXMoKSB7CiAgLy9BZGQgYWRkaXRpb25hbCBkYXRhIGZyb20gc2Vzc2lvbiBwcm9wZXJ0eSB2YWx1ZXMKICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeyAvLyBzZXNzaW9uIGlzIG5vdCBhdmFpbGFibGUgZm9yIHJlc291cmNlIG93bmVyIHBhc3N3b3JkIGNyZWRlbnRpYWxzIGdyYW50CiAgICAgbWFwLnB1dCgiaXBBZGRyZXNzIiwgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgiSG9zdCIpKQogICB9Cn07CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKSk7Cn07CgphZGRBZGRpdGlvbmFsRGF0YSgpOwoqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -830,20 +874,24 @@ }, { "name": "content-length", - "value": "3523" + "value": "4978" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:22 GMT" + "value": "Wed, 19 Jun 2024 21:28:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -853,14 +901,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:22.304Z", - "time": 60, + "startedDateTime": "2024-06-19T21:28:26.326Z", + "time": 56, "timings": { "blocked": -1, "connect": -1, @@ -868,11 +916,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 60 + "wait": 56 } }, { - "_id": "c122e0c34632754298c1cf3d78d7a86f", + "_id": "91ace92f5115d94b26cb380ff635ab0f", "_order": 0, "cache": {}, "request": { @@ -884,16 +932,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -903,28 +951,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1644, + "headersSize": 1728, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"WordPress Profile Normalization\"" + "value": "name eq \"Alpha endUserUIClient OAuth2 Access Token Modification Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22WordPress%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Alpha%20endUserUIClient%20OAuth2%20Access%20Token%20Modification%20Script%22" }, "response": { - "bodySize": 1382, + "bodySize": 1061, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1382, - "text": "{\"result\":[{\"_id\":\"91d197de-5916-4dca-83b5-9a4df26e7159\",\"name\":\"WordPress Profile Normalization\",\"description\":\"Normalizes raw profile data from WordPress\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJuYW1lKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5hdmF0YXJfVVJMKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1061, + "text": "{\"result\":[{\"_id\":\"e232cff3-2460-47cd-80b2-36c86c0d0f06\",\"name\":\"Alpha endUserUIClient OAuth2 Access Token Modification Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBpZiAoc2NvcGVzLmNvbnRhaW5zKCdmcjphdXRvYWNjZXNzOionKSB8fCBzY29wZXMuY29udGFpbnMoJ2ZyOmlnYToqJykgfHwgc2NvcGVzLmNvbnRhaW5zKCdmcjppZGM6YW5hbHl0aWNzOionKSkgewogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBjb20uc3VuLmlkZW50aXR5LmlkbS5JZFR5cGUKICAgICk7CiAgICB2YXIgZ3JvdXBzID0gW107CiAgICBpZGVudGl0eS5nZXRNZW1iZXJzaGlwcyhmci5JZFR5cGUuR1JPVVApLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkgewogICAgICBncm91cHMucHVzaChncm91cC5nZXRBdHRyaWJ1dGUoJ2NuJykudG9BcnJheSgpWzBdKTsKICAgIH0pOwogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ2dyb3VwcycsIGdyb3Vwcyk7CiAgfQp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -974,20 +1026,24 @@ }, { "name": "content-length", - "value": "1382" + "value": "1061" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:22 GMT" + "value": "Wed, 19 Jun 2024 21:28:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -997,14 +1053,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:22.372Z", - "time": 59, + "startedDateTime": "2024-06-19T21:28:26.387Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -1012,11 +1068,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 59 + "wait": 52 } }, { - "_id": "36cf1b4232865b8ec590209687e762ee", + "_id": "fab0981ac687745158b06222a5c6fa65", "_order": 0, "cache": {}, "request": { @@ -1028,16 +1084,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -1047,28 +1103,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1657, + "headersSize": 1670, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Alpha endUserUIClient OIDC Claims Script\"" + "value": "name eq \"wks-NEO-Twillio\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Alpha%20endUserUIClient%20OIDC%20Claims%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22wks-NEO-Twillio%22" }, "response": { - "bodySize": 41559, + "bodySize": 8417, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 41559, - "text": "{\"result\":[{\"_id\":\"e1db8a0a-0329-4962-a5bf-ecffaca376ae\",\"name\":\"Alpha endUserUIClient OIDC Claims Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 8417, + "text": "{\"result\":[{\"_id\":\"6aa47a41-af3d-4df3-a7a1-b1766cfeaf6b\",\"name\":\"wks-NEO-Twillio\",\"description\":\"null\",\"script\":\"LyoqCiAqIEBmaWxlIFRoaXMgc2NyaXB0IGRlbGl2ZXJzIGEgbWVzc2FnZSB3aXRoIHZhbHVlcyBmcm9tIHNoYXJlZCBzdGF0ZSB2aWEgVHdpbGlvIFNNUywgdXNpbmcgdGhlIGN1cnJlbnQgdXNlcidzIHRlbGVwaG9uZU51bWJlcgogKiBAdmVyc2lvbiAwLjEuMQogKiBAa2V5d29yZHMgc21zIG90cCBtZmEgdHdpbGlvIAogKi8KCi8qKgogKiBFbnZpcm9ubWVudCBzcGVjaWZpYyBUd2lsaW8gY29uZmlnIAogKi8KCnZhciB0d2lsaW9BY2NvdW50U2lkID0gIjxzZWNyZXQ+IjsgICAKdmFyIHR3aWxpb0FwaUtleVNpZCA9ICI8c2VjcmV0PiI7CnZhciB0d2lsaW9BcGlLZXlTZWNyZXQgPSAiPHNlY3JldD4iOwp2YXIgdHdpbGlvTWVzc2FnaW5nU2VydmljZVNpZCA9ICI8c2VjcmV0PiI7CnZhciB0d2lsaW9QaG9uZU51bWJlckZyb20gPSAiPHNlY3JldD4iOyAgICAKCi8qKgogKiBGdWxsIENvbmZpZ3VyYXRpb24gCiAqLwoKdmFyIGNvbmZpZyA9IHsKICAgIGFjY291bnRTaWQ6IHR3aWxpb0FjY291bnRTaWQsICAgIAogICAgYXBpS2V5U2lkOiB0d2lsaW9BcGlLZXlTaWQsCiAgICBhcGlLZXlTZWNyZXQ6IHR3aWxpb0FwaUtleVNlY3JldCwKICAgIHBob25lTnVtYmVyRnJvbTogdHdpbGlvUGhvbmVOdW1iZXJGcm9tLCAKICAgIG1lc3NhZ2luZ1NlcnZpY2VTaWQ6IHR3aWxpb01lc3NhZ2luZ1NlcnZpY2VTaWQsIAogICAgYmFzZVVyaTogImh0dHBzOi8vYXBpLnR3aWxpby5jb20vMjAxMC0wNC0wMSIsCiAgICBzaGFyZWRTdGF0ZUlkRmllbGQ6ICJfaWQiLAogICAgcGhvbmVOdW1iZXJGaWVsZDogInRlbGVwaG9uZU51bWJlciIsCiAgICBtZXNzYWdlVGVtcGxhdGU6ICJZb3VyIHNlY3VyaXR5IGNvZGUgaXMge3tvbmVUaW1lUGFzc3dvcmR9fSIsCiAgICBub2RlTmFtZTogInR3aWxpb1NtcyIKfTsKCi8qKgogKiBOb2RlIG91dGNvbWVzCiAqLwoKIHZhciBOb2RlT3V0Y29tZSA9IHsKICAgIERFTElWRVJFRDogICJkZWxpdmVyZWQiLAogICAgQVVUSEZBSUxFRDogImF1dGhGYWlsZWQiLAogICAgTk9QSE9ORTogICAgIm5vUGhvbmUiLAogICAgRVJST1I6ICAgICAgImVycm9yIgp9OwoKLyoqCiAqIEV4dGVybmFsIGRlcGVuZGVuY2llcwogKi8KCnZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sudXRpbC5lbmNvZGUuQmFzZTY0LAogICAgamF2YS5sYW5nLlN0cmluZwopOwoKLyoqCiAqIEFkZCB0aGUgbm9kZSBpbmZvIHByZWZpeCB0byBhIGxvZyBtZXNzYWdlCiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gdGhlIG1lc3NhZ2UgYm9keQogKiBAcmV0dXJucyBhIHRhZ2dlZCB2ZXJzaW9uIG9mIHRoZSBtZXNzYWdlCiAqLwpmdW5jdGlvbiB0YWcobWVzc2FnZSkgewogICAgcmV0dXJuICIqKioiLmNvbmNhdChjb25maWcubm9kZU5hbWUpLmNvbmNhdCgiICIpLmNvbmNhdChtZXNzYWdlKTsKfQoKLyoqCiAqIExvZyBhbiBIVFRQIHJlc3BvbnNlCiAqIAogKiBAcGFyYW0ge1Jlc3BvbnNlfSBIVFRQIHJlc3BvbnNlIG9iamVjdAogKi8KZnVuY3Rpb24gbG9nUmVzcG9uc2UocmVzcG9uc2UpIHsKICAgIGxvZ2dlci5tZXNzYWdlKHRhZygiU2NyaXB0ZWQgTm9kZSBIVFRQIFJlc3BvbnNlOiAiICsgcmVzcG9uc2UuZ2V0U3RhdHVzKCkgKyAiLCBCb2R5OiAiICsgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpKTsKfQoKLyoqCiAqIFJlc29sdmUgaGFuZGxlYmFyIHBsYWNlaG9sZGVycyBmcm9tIHNoYXJlZCBzdGF0ZQogKiAKICogQHBhcmFtIHt0ZW1wbGF0ZX0gaGFuZGxlYmFyIHRlbXBsYXRlCiAqLwpmdW5jdGlvbiByZXNvbHZlUGxhY2Vob2xkZXJzKHRlbXBsYXRlKSB7CiAgY29uc3QgcmVnZXggPSAve3suKj99fS9nOwogIGNvbnN0IHZhcmlhYmxlcyA9IHRlbXBsYXRlLm1hdGNoKHJlZ2V4KTsKCiAgaWYgKCF2YXJpYWJsZXMpIHsKICAgIHJldHVybiB0ZW1wbGF0ZTsKICB9CiAgCiAgdmFyIHJlc3VsdCA9IHRlbXBsYXRlOwogIAogIHZhcmlhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIHN1YihlbGVtZW50KSB7IAogICAgdmFyIHZhck5hbWUgPSBlbGVtZW50LnJlcGxhY2UoL1t7fV0vZywiIik7CiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShlbGVtZW50LHNoYXJlZFN0YXRlLmdldCh2YXJOYW1lKSk7CiAgfSk7CiAgCiAgcmV0dXJuIHJlc3VsdDsKfQoKLyoqCiAqIFNlbmQgYW4gU01TIHZpYSBUd2lsaW8KICogCiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIHRleHQgb2YgdGhlIG1lc3NhZ2UgdG8gc2VuZAogKiBAcGFyYW0ge3N0cmluZ30gbnVtYmVyRnJvbSAtIFRoZSBvcmlnaW5hdGluZyBwaG9uZSBudW1iZXIvc2hvcnRjb2RlCiAqIEBwYXJhbSB7c3RyaW5nfSBudW1iZXJUbyAtIFRoZSBwaG9uZSBudW1iZXIgdG8gc2VuZCB0bwogKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnaW5nU2VydmljZVNpZCAtIFR3aWxpbyBtZXNzYWdpbmcgc2VydmljZSBTSUQKICogQHBhcmFtIHtzdHJpZ30gdXJpIC0gVGhlIFVSSSBvZiB0aGUgVHdpbGlvIEFQSSBlbmRwb2ludCAKICogQHBhcmFtIHtzdHJpbmd9IHNpZCAtIFRoZSBUd2lsaW8gYWNjb3VudCBvciBBUEkga2V5IFNJRAogKiBAcGFyYW0geyp9IHNlY3JldCAtIFRoZSBUd2lsaW8gYWNjb3VudCBhdXRoa2V5IG9yIEFQSSBrZXkgc2VjcmV0CiAqIEByZXR1cm5zIC0gQSBub2RlIG91dGNvbWUgCiAqLwpmdW5jdGlvbiBzZW5kU01TKG1lc3NhZ2UsIG51bWJlckZyb20sIG51bWJlclRvLCBtZXNzYWdpbmdTZXJ2aWNlU2lkLCB1cmksIHNpZCwgc2VjcmV0KSB7CgogICAgbG9nZ2VyLm1lc3NhZ2UodGFnKCJDYWxsaW5nIFR3aWxpbyBlbmRwb2ludCAiICsgdXJpKSk7CiAgICBsb2dnZXIubWVzc2FnZSh0YWcoIlNlbmRpbmcgdG8gIiArIG51bWJlclRvKSk7CgogICAgLy8gVHdpbGlvIHNlZW1zIG5vdCB0byBleHBlY3QgdGhlIGZvcm0gdmFsdWVzIHRvIGJlIFVSTCBlbmNvZGVkCgogICAgY29uc3QgcmVxdWVzdEJvZHkgPSAiQm9keT0iLmNvbmNhdChlbmNvZGVVUklDb21wb25lbnQobWVzc2FnZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoIiZGcm9tPSIpLmNvbmNhdChudW1iZXJGcm9tKSAgCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoIiZUbz0iKS5jb25jYXQobnVtYmVyVG8pCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoIiZNZXNzYWdpbmdTZXJ2aWNlU2lkPSIpLmNvbmNhdChtZXNzYWdpbmdTZXJ2aWNlU2lkKTsKICAKICAgIGxvZ2dlci5tZXNzYWdlKHRhZygiTWVzc2FnZSBib2R5ICIgKyByZXF1ZXN0Qm9keSkpOwoKICAgIGNvbnN0IGJhc2ljQXV0aCA9IGZyLkJhc2U2NC5lbmNvZGUoZnIuU3RyaW5nKHNpZC5jb25jYXQoIjoiKS5jb25jYXQoc2VjcmV0KSkuZ2V0Qnl0ZXMoKSk7CiAgICAKICAgIHZhciByZXNwb25zZTsKCiAgICB0cnkgewogICAgICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIlBPU1QiKTsKICAgICAgICByZXF1ZXN0LnNldFVyaSh1cmkpOwogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIgKyBiYXNpY0F1dGgpOwogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgcmVxdWVzdC5nZXRFbnRpdHkoKS5zZXRTdHJpbmcocmVxdWVzdEJvZHkpOwoKICAgICAgICByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIH0KICAgIGNhdGNoIChlKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKHRhZygiRXhjZXB0aW9uIGNhbGxpbmcgdHdpbGlvIGVuZHBvaW50ICIgKyBlKSk7CiAgICAgICAgcmV0dXJuIE5vZGVPdXRjb21lLkVSUk9SOwogICAgfQoKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLmdldFN0YXR1cygpLmdldENvZGUoKTsKCiAgICBpZiAoc3RhdHVzID09PSA0MDEpIHsKICAgICAgICBsb2dnZXIuZXJyb3IodGFnKCJUd2lsaW8gYXV0aGVudGljYXRpb24gZmFpbGVkIikpOwogICAgICAgIHJldHVybiBOb2RlT3V0Y29tZS5BVVRIRkFJTEVEOyAgICAKICAgIH0KCiAgICBpZiAoc3RhdHVzICE9PSAyMDEpIHsKICAgICAgICBsb2dnZXIuZXJyb3IodGFnKCJCYWQgSFRUUCByZXNwb25zZSBmcm9tIFR3aWxpbzogIiArIHN0YXR1cykpOwogICAgICAgIHJldHVybiBOb2RlT3V0Y29tZS5FUlJPUjsgICAgCiAgICB9CgogICAgdmFyIHJlc3BvbnNlSnNvbiA9IHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpOwoKICAgIGlmICghcmVzcG9uc2VKc29uKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKHRhZygiTm8gcmVzcG9uc2UgYm9keSIpKTsKICAgICAgICByZXR1cm4gTm9kZU91dGNvbWUuRVJST1I7ICAgIAogICAgfQoKICAgIHZhciByZXNwb25zZU9iaiA9IEpTT04ucGFyc2UocmVzcG9uc2VKc29uKTsKCiAgICBpZiAoIXJlc3BvbnNlT2JqKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKHRhZygiQ291bGRuJ3QgcGFyc2UgcmVzcG9uc2UgYm9keSIpKTsKICAgICAgICByZXR1cm4gTm9kZU91dGNvbWUuRVJST1I7ICAgIAogICAgfQoKICAgIGlmICghKHJlc3BvbnNlT2JqLmhhc093blByb3BlcnR5KCJzaWQiKSkpIHsKICAgICAgICBsb2dnZXIuZXJyb3IodGFnKCJObyBzaWQgcHJvcGVydHkgaW4gVHdpbGlvIHJlc3BvbnNlIikpOwogICAgICAgIHJldHVybiBOb2RlT3V0Y29tZS5FUlJPUjsKICAgIH0gIAoKICAgIGxvZ2dlci5tZXNzYWdlKHRhZygibWVzc2FnZSBkZWxpdmVyZWQgc3VjY2Vzc2Z1bGx5IikpOwogICAgcmV0dXJuIE5vZGVPdXRjb21lLkRFTElWRVJFRDsKfQoKLyoqCiAqIE5vZGUgZW50cnkgcG9pbnQKICovCgpsb2dnZXIubWVzc2FnZSh0YWcoIm5vZGUgZXhlY3V0aW5nIikpOwoKdmFyIGlkOwp2YXIgdGVsZXBob25lTnVtYmVyczsKdmFyIG51bWJlclRvOwoKaWYgKCEoaWQgPSBzaGFyZWRTdGF0ZS5nZXQoY29uZmlnLnNoYXJlZFN0YXRlSWRGaWVsZCkpKSB7CiAgICBsb2dnZXIuZXJyb3IodGFnKCJObyBpZCBpbiBzaGFyZWQgc3RhdGUiKSk7CiAgICBvdXRjb21lID0gTm9kZU91dGNvbWUuRVJST1I7Cn0KZWxzZSBpZiAoISh0ZWxlcGhvbmVOdW1iZXJzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShpZCwgY29uZmlnLnBob25lTnVtYmVyRmllbGQpKSkgewogICAgbG9nZ2VyLmVycm9yKHRhZygiTm8gcGhvbmUgbnVtYmVycyBmb3IgdXNlciIpKTsKICAgIG91dGNvbWUgPSBOb2RlT3V0Y29tZS5OT1BIT05FOwp9CmVsc2UgaWYgKCEobnVtYmVyVG8gPSB0ZWxlcGhvbmVOdW1iZXJzLnRvQXJyYXkoKVswXSkpIHsKICAgIGxvZ2dlci5lcnJvcih0YWcoIm5vIHRlbGVwaG9uZU51bWJlciIpKTsKICAgIG91dGNvbWUgPSBOb2RlT3V0Y29tZS5OT1BIT05FOwp9CmVsc2UgaWYgKG51bWJlclRvID09PSAiIikgewogICAgbG9nZ2VyLmVycm9yKHRhZygiYmxhbmsgdGVsZXBob25lTnVtYmVyIikpOwogICAgb3V0Y29tZSA9IE5vZGVPdXRjb21lLk5PUEhPTkU7Cn0KZWxzZSB7CiAgICB2YXIgbWVzc2FnZSA9IHJlc29sdmVQbGFjZWhvbGRlcnMoY29uZmlnLm1lc3NhZ2VUZW1wbGF0ZSk7CiAgICB2YXIgdHdpbGlvVXJpID0gY29uZmlnLmJhc2VVcmkuY29uY2F0KCIvQWNjb3VudHMvIikuY29uY2F0KGNvbmZpZy5hY2NvdW50U2lkKS5jb25jYXQoIi9NZXNzYWdlcy5qc29uIik7CiAgICBvdXRjb21lID0gc2VuZFNNUyhtZXNzYWdlLCBjb25maWcucGhvbmVOdW1iZXJGcm9tLCBudW1iZXJUbywgY29uZmlnLm1lc3NhZ2luZ1NlcnZpY2VTaWQsIHR3aWxpb1VyaSwgY29uZmlnLmFwaUtleVNpZCwgY29uZmlnLmFwaUtleVNlY3JldCk7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -1116,18 +1176,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "transfer-encoding", + "value": "chunked" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:22 GMT" + "value": "Wed, 19 Jun 2024 21:28:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -1135,20 +1203,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 800, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:22.437Z", - "time": 71, + "startedDateTime": "2024-06-19T21:28:26.444Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -1156,11 +1220,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 71 + "wait": 52 } }, { - "_id": "000ff0f2b46c206e53f43f99849549df", + "_id": "b58afe5cd68f1b63d007dcf8166b3ab0", "_order": 0, "cache": {}, "request": { @@ -1172,16 +1236,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -1191,28 +1255,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1645, + "headersSize": 1685, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Normalized Profile to Identity\"" + "value": "name eq \"OAuth2 JWT Issuer Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Normalized%20Profile%20to%20Identity%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20JWT%20Issuer%20Script%22" }, "response": { - "bodySize": 1648, + "bodySize": 5308, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1648, - "text": "{\"result\":[{\"_id\":\"ed685f9f-5909-4726-86e8-22bd38b47663\",\"name\":\"Normalized Profile to Identity\",\"description\":\"Converts a normalized social profile into an Identity\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgaWRlbnRpdHkgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgiY24iLCBub3JtYWxpemVkUHJvZmlsZS5kaXNwbGF5TmFtZSksCiAgICAgICAgZmllbGQoInVzZXJOYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUudXNlcm5hbWUpLAogICAgICAgIGZpZWxkKCJpcGxhbmV0LWFtLXVzZXItYWxpYXMtbGlzdCIsIHNlbGVjdGVkSWRwICsgJy0nICsgbm9ybWFsaXplZFByb2ZpbGUuaWQuYXNTdHJpbmcoKSkpKQoKcmV0dXJuIGlkZW50aXR5\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 5308, + "text": "{\"result\":[{\"_id\":\"400e48ba-3f13-4144-ac7b-f824ea8e98c5\",\"name\":\"OAuth2 JWT Issuer Script\",\"description\":\"Default global script for scripted JWT Issuers\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgdG8gZGVyaXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIGR5bmFtaWMgSldUIGlzc3VlciBmcm9tIHRoZSBpc3N1ZXIgc3RyaW5nLgogKiBBIEpXVCBpc3N1ZXIgaXMgbWFkZSB1cCBvZiB0aGUgZm9sbG93aW5nOgogKiAgIC0gaXNzdWVyIC0gdGhlIGlkZW50aWZpZXIgb2YgdGhlIGVudGl0eSB0aGF0IGlzc3VlcyBKV1RzCiAqICAgLSByZXNvdXJjZSBvd25lciBzdWJqZWN0IGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCBpZGVudGlmaWVzIHRoZSByZXNvdXJjZSBvd25lcgogKiAgIC0gY29uc2VudGVkIHNjb3BlIGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCByZXByZXNlbnRzIHNjb3BlIHRoYXQgdGhlIHJlc291cmNlIG93bmVyCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYWxyZWFkeSBjb25zZW50ZWQgdG8gZXh0ZXJuYWxseQogKiAgIC0gYXV0aG9yaXplZCBzdWJqZWN0cyAtIHRoZSBzZXQgb2YgcHJpbmNpcGFsIGlkZW50aWZpZXJzIHRoYXQgYXJlIGF1dGhvcml6ZWQgdG8gYmUgdXNlZCBhcyByZXNvdXJjZSBvd25lcnMKICogICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgaXNzdWVyCiAqICAgLSBKV0tzIC0gZWl0aGVyIGEgc2V0IG9mIEpXS3Mgb3IgY29ubmVjdGlvbiBkZXRhaWxzIGZvciBvYnRhaW5pbmcgdGhhdCBzZXQsIHRoYXQgYXJlIHRoZSBwdWJsaWMga2V5cyB0aGF0CiAqICAgICAgICAgICAgY2FuIHZlcmlmeSB0aGUgc2lnbmF0dXJlIG9uIHRoZSBpc3N1ZWQgSldUcy4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIGlzc3VlciAtIFN0cmluZwogKiAgICAgICAgICBUaGUgaXNzdWVyIGZyb20gdGhlIGJlYXJlciBKV1QuCiAqIHJlYWxtIC0gU3RyaW5nCiAqICAgICAgICAgVGhlIHBhdGggb2YgdGhlIHJlYWxtIHRoYXQgaXMgaGFuZGxpbmcgdGhlIHJlcXVlc3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIHNjcmlwdCBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5PQVVUSDJfU0NSSVBURURfSldUX0lTU1VFUi4KICogaHR0cENsaWVudCAtIEhUVFAgQ2xpZW50ICgxKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgSFRUUCBDbGllbnQgaW5zdGFuY2U6CiAqICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC4KICogaWRSZXBvc2l0b3J5IC0gSWRlbnRpdHkgUmVwb3NpdG9yeSAoMikuIEFsd2F5cyBwcmVzZW50LgogKiBzZWNyZXRzIC0gU2VjcmV0cyBhY2Nlc3NvciAoMykuIEFsd2F5cyBwcmVzZW50LgogKgogKiBSZXR1cm4gLSBvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLlRydXN0ZWRKd3RJc3N1ZXJDb25maWcgKDQpIC0gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRydXN0ZWQgSldUIGlzc3Vlci4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgyKSBTY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuYW0vc2NyaXB0aW5nL2FwaS9pZGVudGl0eS9TY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeS5odG1sLgogKiAoMykgU2NyaXB0ZWRTZWNyZXRzIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5hbS9zY3JpcHRpbmcvYXBpL3NlY3JldHMvU2NyaXB0ZWRTZWNyZXRzLmh0bWwuCiAqICg0KSBUcnVzdGVkSnd0SXNzdWVyQ29uZmlnIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1RydXN0ZWRKd3RJc3N1ZXJDb25maWcuaHRtbC4KICovCgovKiBFWEFNUExFCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVHJ1c3RlZEp3dElzc3VlckNvbmZpZywKICAgICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbnMKICAgICk7CgogICAgdmFyIGlzcyA9IGlkUmVwb3NpdG9yeS5nZXRJZGVudGl0eShpc3N1ZXIpOwogICAgaWYgKGlzcyA9PSBudWxsKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoJ05vIGlzc3VlciBmb3VuZCBmb3I6ICcraXNzdWVyKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGxvZ2dlci5tZXNzYWdlKCdGb3VuZCBpc3N1ZXI6ICcraXNzKTsKICAgIC8vIGluIHRoaXMgZXhhbXBsZSBlaXRoZXIgYSBKV0sgc2V0IG9yIGEgVVJJIHRvIGEgSldLIHNldCBhcmUgaW4gdGhlIHBvc3RhbEFkZHJlc3MgYXR0cmlidXRlCiAgICB2YXIgandrc0F0dHJzID0gaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygncG9zdGFsQWRkcmVzcycpOwogICAgdmFyIGp3a1NldCA9IGp3a3NBdHRycy5sZW5ndGggPT09IDAgPyBudWxsIDogandrc0F0dHJzWzBdOwogICAgdmFyIGNvbmZpZyA9IG5ldyBmckphdmEuVHJ1c3RlZEp3dElzc3VlckNvbmZpZygKICAgICAgICBpc3N1ZXIsCiAgICAgICAgJ3N1YicsCiAgICAgICAgJ3Njb3BlJywKICAgICAgICAvLyBpbiB0aGlzIGV4YW1wbGUsIHZhbGlkIHN1YmplY3RzIGFyZSBzdG9yZWQgaW4gdGhlIG1haWwgYXR0cmlidXRlCiAgICAgICAgaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygnbWFpbCcpLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCd7JykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCdodHRwJykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgICc1IG1pbnV0ZXMnLAogICAgICAgICcxIG1pbnV0ZScKICAgICk7CiAgICByZXR1cm4gY29uZmlnOwp9KCkpOwoqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_SCRIPTED_JWT_ISSUER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -1262,20 +1330,24 @@ }, { "name": "content-length", - "value": "1648" + "value": "5308" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:22 GMT" + "value": "Wed, 19 Jun 2024 21:28:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -1285,14 +1357,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:22.521Z", - "time": 64, + "startedDateTime": "2024-06-19T21:28:26.501Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -1300,11 +1372,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 64 + "wait": 53 } }, { - "_id": "75d67cb54b1596db4dd7aef88161182c", + "_id": "a9c49b439be01d2b64c7940e0475028a", "_order": 0, "cache": {}, "request": { @@ -1316,16 +1388,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -1335,29 +1407,33 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1664, + "headersSize": 1690, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Alpha OAuth2 Access Token Modification Script\"" + "value": "name eq \"Microsoft Profile Normalization\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Alpha%20OAuth2%20Access%20Token%20Modification%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Microsoft%20Profile%20Normalization%22" }, "response": { - "bodySize": 10105, + "bodySize": 1466, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 10105, - "text": "{\"result\":[{\"_id\":\"39c08084-1238-43e8-857f-2e11005eac49\",\"name\":\"Alpha OAuth2 Access Token Modification Script\",\"description\":\"Default alpha realm script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" - }, + "size": 1466, + "text": "{\"result\":[{\"_id\":\"73cecbfc-dad0-4395-be6a-6858ee3a80e5\",\"name\":\"Microsoft Profile Normalization\",\"description\":\"Normalizes raw profile data from Microsoft\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlOYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbk5hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5zdXJuYW1lKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, "cookies": [], "headers": [ { @@ -1404,18 +1480,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "content-length", + "value": "1466" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:22 GMT" + "value": "Wed, 19 Jun 2024 21:28:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -1423,20 +1507,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:22.595Z", - "time": 63, + "startedDateTime": "2024-06-19T21:28:26.559Z", + "time": 50, "timings": { "blocked": -1, "connect": -1, @@ -1444,7 +1524,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 63 + "wait": 50 } }, { @@ -1460,16 +1540,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -1479,12 +1559,16 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1625, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ @@ -1554,16 +1638,20 @@ }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:22 GMT" + "value": "Wed, 19 Jun 2024 21:28:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -1573,14 +1661,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:22.671Z", - "time": 66, + "startedDateTime": "2024-06-19T21:28:26.613Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -1588,11 +1676,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 66 + "wait": 51 } }, { - "_id": "c1c393209e95869bcd07a4e023ad042d", + "_id": "b427b3c2ce2b156e6d63e4a2594eb9c4", "_order": 0, "cache": {}, "request": { @@ -1604,16 +1692,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -1623,28 +1711,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1643, + "headersSize": 1678, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Inactive Device Match Script\"" + "value": "name eq \"Save MFA Preference\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Inactive%20Device%20Match%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Save%20MFA%20Preference%22" }, "response": { - "bodySize": 546, + "bodySize": 1045, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 546, - "text": "{\"result\":[{\"_id\":\"3bd13a46-61c4-4974-8efb-1700c80c64e3\",\"name\":\"Inactive Device Match Script\",\"description\":\"Inactive Device Match Script\",\"script\":\"LyoKICogSW5hY3RpdmUgRGV2aWNlIE1hdGNoIFNjcmlwdAogKi8KCm91dGNvbWUgPSAidHJ1ZSI7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1045, + "text": "{\"result\":[{\"_id\":\"39e615b2-898e-4178-ba30-f58bcc095797\",\"name\":\"Save MFA Preference\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkKKTsKd2l0aCAoZnIpIHsKICAKICB2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCiAgdmFyIG1mYVByZWZBdHRyaWJ1dGUgPSAiZnItYXR0ci1pbXVsdGkyIgogIHZhciBtZmFUeXBlID0gIiI7CiAgCiAgaWYgKHNoYXJlZFN0YXRlLmdldCgid2ViLWF1dGhuLWNoYWxsZW5nZSIpICE9IG51bGwpIHsKICAgIG1mYVR5cGUgPSAid2ViYXV0aG4iOwogIH0gZWxzZSBpZiAoc2hhcmVkU3RhdGUuZ2V0KCJwdXNoUmVnaXN0cmF0aW9uVGltZW91dCIpICE9IG51bGwpIHsKICAgICAgIG1mYVR5cGUgPSAicHVzaCIKICB9CiAgCiAgaWRSZXBvc2l0b3J5LmFkZEF0dHJpYnV0ZSh1c2VybmFtZSwgbWZhUHJlZkF0dHJpYnV0ZSwgW21mYVR5cGVdKTsKICAKICBvdXRjb21lID0gInRydWUiCn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -1694,20 +1786,24 @@ }, { "name": "content-length", - "value": "546" + "value": "1045" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:22 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -1717,14 +1813,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 773, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:22.743Z", - "time": 59, + "startedDateTime": "2024-06-19T21:28:26.670Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -1732,11 +1828,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 59 + "wait": 51 } }, { - "_id": "3061b032426771626e9bedd19872123e", + "_id": "6d3985b76be90a623421cf1f1dab241b", "_order": 0, "cache": {}, "request": { @@ -1748,16 +1844,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -1767,28 +1863,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1625, + "headersSize": 1696, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"FrodoTestScript1\"" + "value": "name eq \"ADFS Profile Normalization (JS)\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript1%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22ADFS%20Profile%20Normalization%20%28JS%29%22" }, "response": { - "bodySize": 1131, + "bodySize": 7358, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1131, - "text": "{\"result\":[{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 7358, + "text": "{\"result\":[{\"_id\":\"dbe0bf9a-72aa-49d5-8483-9db147985a47\",\"name\":\"ADFS Profile Normalization (JS)\",\"description\":\"Normalizes raw profile data from ADFS\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIHRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIKICogaW4gYSBzdGFuZGFyZCBmb3JtIGV4cGVjdGVkIGJ5IHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogcmF3UHJvZmlsZSAtIFRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvdmlkZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIuCiAqICAgICAgICAgICAgICBKc29uVmFsdWUgKDEpLgogKiBsb2dnZXIgLSBUaGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiByZWFsbSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqIHJlcXVlc3RIZWFkZXJzIC0gVHJlZU1hcCAoMikuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFjY2Vzc2luZyBoZWFkZXJzIGluIHRoZSBsb2dpbiByZXF1ZXN0OgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1yZXF1ZXN0SGVhZGVycy4KICogcmVxdWVzdFBhcmFtZXRlcnMgLSBUcmVlTWFwICgyKS4KICogICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFyYW1ldGVycy4KICogc2VsZWN0ZWRJZHAgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgVGhlIHNvY2lhbCBpZGVudGl0eSBwcm92aWRlciBuYW1lLiBGb3IgZXhhbXBsZTogZ29vZ2xlLgogKiBzaGFyZWRTdGF0ZSAtIExpbmtlZEhhc2hNYXAgKDMpLgogKiAgICAgICAgICAgICAgIFRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgc3RhdGUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRyZWUgYW5kIGFsbG93cyBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gdGhlIHN0YXRlbGVzcyBub2RlczoKICogICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoLW5vZGVzL2NvcmUtYWN0aW9uLmh0bWwjYWNjZXNzaW5nLXRyZWUtc3RhdGUuCiAqIHRyYW5zaWVudFN0YXRlIC0gTGlua2VkSGFzaE1hcCAoMykuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCBmb3Igc3RvcmluZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdGhhdCBtdXN0IG5vdCBsZWF2ZSB0aGUgc2VydmVyIHVuZW5jcnlwdGVkLAogKiAgICAgICAgICAgICAgICAgIGFuZCB0aGF0IG1heSBub3QgbmVlZCB0byBwZXJzaXN0IGJldHdlZW4gYXV0aGVudGljYXRpb24gcmVxdWVzdHMgZHVyaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBzZXNzaW9uOgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGgtbm9kZXMvY29yZS1hY3Rpb24uaHRtbCNhY2Nlc3NpbmctdHJlZS1zdGF0ZS4KICoKICogUmV0dXJuIC0gYSBKc29uVmFsdWUgKDEpLgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqCiAqICAgICAgICAgIFRoaXMgc2NyaXB0J3MgbGFzdCBzdGF0ZW1lbnQgc2hvdWxkIHJlc3VsdCBpbiBhIEpzb25WYWx1ZSAoMSkgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAqICAgICAgICAgIHsKICogICAgICAgICAgICAgIHsiZGlzcGxheU5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZW1haWwiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZmFtaWx5TmFtZSI6ICJjb3JyZXNwb25kaW5nLXNvY2lhbC1pZGVudGl0eS1wcm92aWRlci12YWx1ZSJ9LAogKiAgICAgICAgICAgICAgeyJnaXZlbk5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiaWQiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsibG9jYWxlIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InBob3RvVXJsIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InVzZXJuYW1lIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0KICogICAgICAgICAgfQogKgogKiAgICAgICAgICBUaGUgY29uc3VtZXIgb2YgdGhpcyBkYXRhIGRlZmluZXMgd2hpY2gga2V5cyBhcmUgcmVxdWlyZWQgYW5kIHdoaWNoIGFyZSBvcHRpb25hbC4KICogICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlIGFuZCwKICogICAgICAgICAgdWx0aW1hdGVseSwgdGhlIG1hbmFnZWQgb2JqZWN0IGNyZWF0ZWQvdXBkYXRlZCB3aXRoIHRoaXMgZGF0YQogKiAgICAgICAgICB3aWxsIGV4cGVjdCBjZXJ0YWluIGtleXMgdG8gYmUgcG9wdWxhdGVkLgogKiAgICAgICAgICBJbiBzb21lIGNvbW1vbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB0aGUgZm9sbG93aW5nIGtleXMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vdCBlbXB0eToKICogICAgICAgICAgdXNlcm5hbWUsIGdpdmVuTmFtZSwgZmFtaWx5TmFtZSwgZW1haWwuCiAqCiAqICAgICAgICAgIEZyb20gUkZDNDUxNzogQSB2YWx1ZSBvZiB0aGUgRGlyZWN0b3J5IFN0cmluZyBzeW50YXggaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKICogICAgICAgICAgYXJiaXRyYXJ5IGNoYXJhY3RlcnMgZnJvbSB0aGUgVW5pdmVyc2FsIENoYXJhY3RlciBTZXQgKFVDUykuCiAqICAgICAgICAgIEEgemVyby1sZW5ndGggY2hhcmFjdGVyIHN0cmluZyBpcyBub3QgcGVybWl0dGVkLgogKgogKiAoMSkgSnNvblZhbHVlIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2pzb24vSnNvblZhbHVlLmh0bWwuCiAqICgyKSBUcmVlTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9UcmVlTWFwLmh0bWwuCiAqICgzKSBMaW5rZWRIYXNoTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqLwoKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQogICAgKTsKCiAgICB2YXIgbm9ybWFsaXplZFByb2ZpbGVEYXRhID0gZnJKYXZhLkpzb25WYWx1ZS5qc29uKGZySmF2YS5Kc29uVmFsdWUub2JqZWN0KCkpOwogIAogICAgICAvL2xvZ2dlci5tZXNzYWdlKCdTZWd1aW4gcmF3UHJvZmlsZTogJytyYXdQcm9maWxlKTsKCiAgICBub3JtYWxpemVkUHJvZmlsZURhdGEucHV0KCdpZCcsIHJhd1Byb2ZpbGUuZ2V0KCdzdWInKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2Rpc3BsYXlOYW1lJywgcmF3UHJvZmlsZS5nZXQoJ2dpdmVuTmFtZScpLmFzU3RyaW5nKCkgKyAnICcgKyByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2VtYWlsJywgcmF3UHJvZmlsZS5nZXQoJ21haWwnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2dpdmVuTmFtZScsIHJhd1Byb2ZpbGUuZ2V0KCdnaXZlbk5hbWUnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2ZhbWlseU5hbWUnLCByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ3VzZXJuYW1lJywgcmF3UHJvZmlsZS5nZXQoJ3VwbicpLmFzU3RyaW5nKCkpOwogICAgbm9ybWFsaXplZFByb2ZpbGVEYXRhLnB1dCgncm9sZXMnLCByYXdQcm9maWxlLmdldCgncm9sZXMnKS5hc1N0cmluZygpKTsKICAKICAgICAgLy9sb2dnZXIubWVzc2FnZSgnU2VndWluIG5vcm1hbGl6ZWRQcm9maWxlRGF0YTogJytub3JtYWxpemVkUHJvZmlsZURhdGEpOwoKICAgIHJldHVybiBub3JtYWxpemVkUHJvZmlsZURhdGE7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -1838,20 +1938,24 @@ }, { "name": "content-length", - "value": "1131" + "value": "7358" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:22 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -1861,14 +1965,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:22.813Z", - "time": 59, + "startedDateTime": "2024-06-19T21:28:26.727Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -1876,11 +1980,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 59 + "wait": 51 } }, { - "_id": "e6f3f3e413e0a2b0675cbfd8f8cb066e", + "_id": "3e120ffd0f3a240e12418e808b5ff1eb", "_order": 0, "cache": {}, "request": { @@ -1892,16 +1996,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -1911,28 +2015,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1675, + "headersSize": 1670, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Device Profile Match Template - Decision Node Script\"" + "value": "name eq \"MutilevelSelect\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Device%20Profile%20Match%20Template%20-%20Decision%20Node%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22MutilevelSelect%22" }, "response": { - "bodySize": 4597, + "bodySize": 7033, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 4597, - "text": "{\"result\":[{\"_id\":\"13e3f263-9cd3-4844-8d1c-040fd0dd02eb\",\"name\":\"Device Profile Match Template - Decision Node Script\",\"description\":\"Default global script template for Device Profile Match decision node script for Authentication Tree\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGEgc2ltcGxpZmllZCB0ZW1wbGF0ZSBmb3IgdW5kZXJzdGFuZGluZwogKiB0aGUgYmFzaWNzIG9mIGRldmljZSBtYXRjaGluZy4gX1RoaXMgaXMgbm90IGZ1bmN0aW9uYWxseSBjb21wbGV0ZS5fCiAqIEZvciBhIGZ1bmN0aW9uYWxseSBjb21wbGV0ZSBzY3JpcHQgYXMgd2VsbCBhcyBhIGRldmVsb3BtZW50IHRvb2xraXQsCiAqIHZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9Gb3JnZVJvY2svZm9yZ2Vyb2NrLWRldmljZS1tYXRjaC1zY3JpcHQuCiAqCiAqIEdsb2JhbCBub2RlIHZhcmlhYmxlcyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGlzIHNjb3BlOgogKiAxLiBgc2hhcmVkU3RhdGVgIHByb3ZpZGVzIGFjY2VzcyB0byBpbmNvbWluZyByZXF1ZXN0CiAqIDIuIGBkZXZpY2VQcm9maWxlc0Rhb2AgcHJvdmlkZXMgYWNjZXNzIHRvIHN0b3JlZCBwcm9maWxlcwogKiAzLiBgb3V0Y29tZWAgdmFyaWFibGUgbWFwcyB0byBhdXRoIHRyZWUgbm9kZSBvdXRjb21lczsgdmFsdWVzIGFyZQogKiAgICAndHJ1ZScsICdmYWxzZScsIG9yICd1bmtub3duRGV2aWNlJyAobm90aWNlIF9hbGxfIGFyZSBzdHJpbmdzKS4KICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgcmVxdWVzdCdzIGRldmljZSBwcm9maWxlLgogKiBSZXR1cm5zIHNlcmlhbGl6ZWQgSlNPTiAodHlwZSBzdHJpbmcpOyBwYXJzaW5nIHRoaXMgd2lsbCByZXN1bHQgYQogKiBuYXRpdmUgSlMgb2JqZWN0LgogKi8KdmFyIGluY29taW5nSnNvbiA9IHNoYXJlZFN0YXRlLmdldCgnZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlJykudG9TdHJpbmcoKTsKdmFyIGluY29taW5nID0gSlNPTi5wYXJzZShpbmNvbWluZ0pzb24pOwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgdXNlcidzIHVzZXJuYW1lIGFuZCByZWFsbS4KICogTm90aWNlIHRoZSB1c2Ugb2YgYC5hc1N0cmluZygpYC4KICovCnZhciB1c2VybmFtZSA9IHNoYXJlZFN0YXRlLmdldCgidXNlcm5hbWUiKS5hc1N0cmluZygpOwp2YXIgcmVhbG0gPSBzaGFyZWRTdGF0ZS5nZXQoInJlYWxtIikuYXNTdHJpbmcoKTsKCi8qKgogKiBHZXQgdGhlIHVzZXIncyBzdG9yZWQgcHJvZmlsZXMgZm9yIGFwcHJvcHJpYXRlIHJlYWxtLgogKiBSZXR1cm5zIGEgX3NwZWNpYWxfIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIHByb2ZpbGUgZGF0YQogKi8KdmFyIHN0b3JlZFByb2ZpbGVzID0gZGV2aWNlUHJvZmlsZXNEYW8uZ2V0RGV2aWNlUHJvZmlsZXModXNlcm5hbWUsIHJlYWxtKTsKCi8vIERlZmF1bHQgdG8gYG91dGNvbWVgIG9mICd1bmtub3duRGV2aWNlJwpvdXRjb21lID0gJ3Vua25vd25EZXZpY2UnOwoKaWYgKHN0b3JlZFByb2ZpbGVzKSB7CiAgICB2YXIgaSA9IDA7CiAgICAvLyBOT1RFOiBgLnNpemUoKWAgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBzdG9yZWQgcHJvZmlsZXMKICAgIHZhciBsZW4gPSBzdG9yZWRQcm9maWxlcy5zaXplKCk7CgogICAgZm9yIChpOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIHN0b3JlZCBwcm9maWxlLgogICAgICAgICAqIFJldHVybnMgc2VyaWFsaXplZCBKU09OICh0eXBlIHN0cmluZyk7IHBhcnNpbmcgdGhpcyB3aWxsIHJlc3VsdAogICAgICAgICAqIGEgbmF0aXZlIEpTIG9iamVjdC4KICAgICAgICAgKi8KICAgICAgICB2YXIgc3RvcmVkSnNvbiA9IHN0b3JlZFByb2ZpbGVzLmdldChpKTsKICAgICAgICB2YXIgc3RvcmVkID0gSlNPTi5wYXJzZShzdG9yZWRKc29uKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogRmluZCBhIHN0b3JlZCBwcm9maWxlIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllci4KICAgICAgICAgKi8KICAgICAgICBpZiAoaW5jb21pbmcuaWRlbnRpZmllciA9PT0gc3RvcmVkLmlkZW50aWZpZXIpIHsKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBOb3cgdGhhdCB5b3UndmUgZm91bmQgdGhlIGFwcHJvcHJpYXRlIHByb2ZpbGUsIHlvdSB3aWxsIHBlcmZvcm0KICAgICAgICAgICAgICogdGhlIGxvZ2ljIGhlcmUgdG8gbWF0Y2ggdGhlIHZhbHVlcyBvZiB0aGUgYGluY29taW5nYCBwcm9maWxlCiAgICAgICAgICAgICAqIHdpdGggdGhhdCBvZiB0aGUgYHN0b3JlZGAgcHJvZmlsZS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogVGhlIHJlc3VsdCBvZiB0aGUgbWF0Y2hpbmcgbG9naWMgaXMgYXNzaWduZWQgdG8gYG91dGNvbWVgLiBTaW5jZQogICAgICAgICAgICAgKiB3ZSBoYXZlIHByb2ZpbGVzIG9mIHRoZSBzYW1lIGlkZW50aWZpZXIsIHRoZSB2YWx1ZSAodHlwZSBzdHJpbmcpCiAgICAgICAgICAgICAqIHNob3VsZCBub3cgYmUgZWl0aGVyICd0cnVlJyBvciAnZmFsc2UnIChwcm9wZXJ0aWVzIG1hdGNoZWQgb3Igbm90KS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0b3BpYywgdmlzaXQgdGhpcyBHaXRodWIgcmVwbzoKICAgICAgICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL0ZvcmdlUm9jay9mb3JnZXJvY2stZGV2aWNlLW1hdGNoLXNjcmlwdAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgb3V0Y29tZSA9ICdmYWxzZSc7CiAgICAgICAgfQogICAgfQp9\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 7033, + "text": "{\"result\":[{\"_id\":\"cf63df8d-30e4-4839-b671-5b24006a3204\",\"name\":\"MutilevelSelect\",\"description\":\"null\",\"script\":\"Ly8gbGVnYWN5IC0gbXVsdGlwbGUgY2hvaWNlIGNhbGxiYWNrcwoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0LAogIG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXNwb25zZSwKICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLkNob2ljZUNhbGxiYWNrLAogIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ29uZmlybWF0aW9uQ2FsbGJhY2ssCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuSGlkZGVuVmFsdWVDYWxsYmFjaywKICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2ssCiAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0SW5wdXRDYWxsYmFjaywKICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuQm9vbGVhbkF0dHJpYnV0ZUlucHV0Q2FsbGJhY2sKKTsKCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogIHJldHVybiBmb3JtYXQucmVwbGFjZSgvW3hdL2csIGZ1bmN0aW9uKGMpIHsKICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpKjEwfDA7CiAgICAgIHZhciB2ID0gcjsKICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTApOwogIH0pOwp9CgpmdW5jdGlvbiBnZXRDb3VudHJpZXMoZGF0YSkgewogIHZhciBjID0gW107CiAgZGF0YS5mb3JFYWNoKGU9PmMucHVzaChlLm5hbWUpKTsKICByZXR1cm4gYzsKfQoKZnVuY3Rpb24gZ2V0U3RhdGVzKGRhdGEsIGMpIHsKICB2YXIgcyA9IFtdOwogIGRhdGFbY10uc3RhdGVzLmZvckVhY2goZT0+cy5wdXNoKGUubmFtZSkpOwogIHJldHVybiBzOwp9CgpmdW5jdGlvbiBnZXRDaXRpZXMoZGF0YSwgYywgcykgewogIHZhciBjaSA9IFtdOwogIGRhdGFbY10uc3RhdGVzW3NdLmNpdGllcy5mb3JFYWNoKGU9PmNpLnB1c2goZS5uYW1lKSk7CiAgcmV0dXJuIGNpOwp9CgpmdW5jdGlvbiBnZXREYXRhKCkgewogIHZhciByZXF1ZXN0VVJMID0gJ2h0dHBzOi8vZ2lzdC5naXRodWJ1c2VyY29udGVudC5jb20vYXRvbWljc2FtdXJhaS80OGM4OTFlOGE3OGU4YWEzNDBjMGZmZjk2ZDQ4MDZmNC9yYXcvOTk0NjFmZjdjZDNjYTFiMGI3YTU1MTk0MjkxNTM1N2UzYTQzOGFiNS9jb3VudHJ5LXN0YXRlLWNpdHkuanNvbic7CiAgdmFyIHJlcXVlc3QgPSBuZXcgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QoKTsKICByZXF1ZXN0LnNldFVyaShyZXF1ZXN0VVJMKTsKICByZXF1ZXN0LnNldE1ldGhvZCgnR0VUJyk7CiAgcmVxdWVzdC5nZXRIZWFkZXJzKCkuYWRkKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsnKTsKICAKICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7ICAKICB2YXIgcmVzcG9uc2VDb2RlID0gcmVzcG9uc2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpOwogIGlmIChyZXNwb25zZUNvZGUgPT09IDIwMCkgewogICAgcmV0dXJuIEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCihmdW5jdGlvbiAoKSB7CiAgdHJ5IHsKICAgIHZhciBhbmNob3IgPSBnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4Jyk7CiAgICB2YXIgZGF0YSA9IGdldERhdGEoKTsKICAgIHZhciBzdGF0ZXMgPSBbXTsKICAgIHZhciBjaXRpZXMgPSBbXTsKICAgIHZhciBzZWxlY3RlZENvdW50cnkgPSAwOwogICAgdmFyIHNlbGVjdGVkU3RhdGUgPSAwOwogICAgc2VsZWN0ZWRDb3VudHJ5ID0gc2hhcmVkU3RhdGUuZ2V0KCdzZWxlY3RlZENvdW50cnknKT9wYXJzZUludChub2RlU3RhdGUuZ2V0KCdzZWxlY3RlZENvdW50cnknKSk6MDsKICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogc2VsZWN0ZWQgY291bnRyeSB7fScsIHNlbGVjdGVkQ291bnRyeSk7CiAgICBzZWxlY3RlZFN0YXRlID0gc2hhcmVkU3RhdGUuZ2V0KCdzZWxlY3RlZFN0YXRlJyk/cGFyc2VJbnQobm9kZVN0YXRlLmdldCgnc2VsZWN0ZWRTdGF0ZScpKTowOwogICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOwogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgdmFyIGNiTGlzdCA9IFtdOwogICAgICB2YXIgY291bnRyeUNiID0gbmV3IGZyLkNob2ljZUNhbGxiYWNrKCdTZWxlY3QgY291bnRyeScsIGdldENvdW50cmllcyhkYXRhKSwgc2VsZWN0ZWRDb3VudHJ5LCBmYWxzZSk7CiAgICAgIGNvdW50cnlDYi5zZXRTZWxlY3RlZEluZGV4KHNlbGVjdGVkQ291bnRyeSk7CiAgICAgIGNiTGlzdC5wdXNoKGNvdW50cnlDYik7CiAgICAgIHN0YXRlcyA9IGdldFN0YXRlcyhkYXRhLCBzZWxlY3RlZENvdW50cnkpOwogICAgICB2YXIgc3RhdGVDYiA9IG5ldyBmci5DaG9pY2VDYWxsYmFjaygnU2VsZWN0IHN0YXRlJywgc3RhdGVzLCBzZWxlY3RlZFN0YXRlLCBmYWxzZSk7CiAgICAgIHN0YXRlQ2Iuc2V0U2VsZWN0ZWRJbmRleChzZWxlY3RlZFN0YXRlKTsKICAgICAgY2JMaXN0LnB1c2goc3RhdGVDYik7CiAgICAgIGNpdGllcyA9IGdldENpdGllcyhkYXRhLCBzZWxlY3RlZENvdW50cnksIHNlbGVjdGVkU3RhdGUpOwogICAgICBjYkxpc3QucHVzaChuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKDAsIGBMaXN0IG9mIGNpdGllcyBpbiAke3N0YXRlc1tzZWxlY3RlZFN0YXRlXX1gKSk7CiAgICAgIGNpdGllcy5mb3JFYWNoKGU9PnsKICAgICAgICBjYkxpc3QucHVzaChuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKDAsIGUpKTsKICAgICAgfSk7CgogICAgICB2YXIgc2NyaXB0ID0gYAogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygnc2NyaXB0IGVudGVyJyk7CiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtdWx0aXNlbGVjdF9fb3B0aW9uJykuZm9yRWFjaChmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBjb25zdCBodkNiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdGlvbkNoYW5nZWQnKTsKICAgICAgICAgICAgICBjb25zdCBldiA9IG5ldyBFdmVudCgiY2hhbmdlIik7CiAgICAgICAgICAgICAgaHZDYi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJ3RydWUnKTsKICAgICAgICAgICAgICBjb25zb2xlLmxvZygnaW52b2tpbmcgY2hhbmdlIG9uIGhpZGRlbiB2YWx1ZSBpbnB1dCcpOwogICAgICAgICAgICAgIGh2Q2IuZGlzcGF0Y2hFdmVudChldik7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3N1Ym1pdHRpbmcuLi4nKTsKICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9naW5CdXR0b25fMCcpLmNsaWNrKCk7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9KQogICAgICAgICAgfSkKICAgICAgICB9LCA1MCk7CiAgICAgIGA7CiAgICAgIGNiTGlzdC5wdXNoKG5ldyBmci5IaWRkZW5WYWx1ZUNhbGxiYWNrKCdzZWxlY3Rpb25DaGFuZ2VkJywgJ2ZhbHNlJykpOwogICAgICBjYkxpc3QucHVzaChuZXcgZnIuQ29uZmlybWF0aW9uQ2FsbGJhY2soMCwgWydGaW5pc2gnXSwgMCkpOwogICAgICBjYkxpc3QucHVzaChuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkpOwogICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZC5hcHBseShudWxsLCBjYkxpc3QpLmJ1aWxkKCk7CiAgICB9IGVsc2UgewogICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IGhpZGRlbiB0ZXh0IGlucHV0OiB7fScsIGNhbGxiYWNrcy5nZXQoY2FsbGJhY2tzLnNpemUoKS0zKS5nZXRWYWx1ZSgpKTsKICAgICAgaWYgKGNhbGxiYWNrcy5nZXQoY2FsbGJhY2tzLnNpemUoKS0zKS5nZXRWYWx1ZSgpID09ICd0cnVlJykgeyAvLyBjaGVjayB2YWx1ZSBvZiB0ZXh0IGlucHV0IGNhbGxiYWNrCiAgICAgICAgLy8gb25lIG9mIHRoZSBjYXRlZ29yeSBwaWNrZXJzIHdhcyBjaGFuZ2VkCiAgICAgICAgaWYoc2VsZWN0ZWRDb3VudHJ5ICE9IGNhbGxiYWNrcy5nZXQoMCkuZ2V0U2VsZWN0ZWRJbmRleGVzKClbMF0pIHsKICAgICAgICAgIHNlbGVjdGVkU3RhdGUgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZWxlY3RlZFN0YXRlID0gY2FsbGJhY2tzLmdldCgxKS5nZXRTZWxlY3RlZEluZGV4ZXMoKVswXTsKICAgICAgICB9CiAgICAgICAgc2VsZWN0ZWRDb3VudHJ5ID0gY2FsbGJhY2tzLmdldCgwKS5nZXRTZWxlY3RlZEluZGV4ZXMoKVswXTsKICAgICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNldCBzZWxlY3RlZCBjb3VudHJ5IHt9Jywgc2VsZWN0ZWRDb3VudHJ5KTsKICAgICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNldCBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOyAgCiAgICAgICAgc2hhcmVkU3RhdGUucHV0KCdzZWxlY3RlZENvdW50cnknLCBzZWxlY3RlZENvdW50cnkpOwogICAgICAgIHNoYXJlZFN0YXRlLnB1dCgnc2VsZWN0ZWRTdGF0ZScsIHNlbGVjdGVkU3RhdGUpOwogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKCd1cGRhdGUnKS5idWlsZCgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIHVzZXIgY2xpY2tlZCAiZmluaXNoIgogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKCdjb21wbGV0ZScpLmJ1aWxkKCk7CiAgICAgIH0KICAgIH0KICB9IGNhdGNoIChlKSB7CiAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IGVycm9yOiB7fSAnICsgZSwgZSk7CiAgICBvdXRjb21lID0gJ2Vycm9yJwogIH0KfSkoKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -1982,20 +2090,24 @@ }, { "name": "content-length", - "value": "4597" + "value": "7033" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:22 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -2005,14 +2117,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:22.880Z", - "time": 57, + "startedDateTime": "2024-06-19T21:28:26.784Z", + "time": 50, "timings": { "blocked": -1, "connect": -1, @@ -2020,11 +2132,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 57 + "wait": 50 } }, { - "_id": "60315e24f99439c8e4989ee6eb506111", + "_id": "363a71f39643a664381fab9835743d38", "_order": 0, "cache": {}, "request": { @@ -2036,16 +2148,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -2055,28 +2167,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1654, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Device Id (Match) - Server Side\"" + "value": "name eq \"Check Username\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Device%20Id%20%28Match%29%20-%20Server%20Side%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Check%20Username%22" }, "response": { - "bodySize": 40318, + "bodySize": 1129, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 40318, - "text": "{\"result\":[{\"_id\":\"703dab1a-1921-4981-98dd-b8e5349d8548\",\"name\":\"Device Id (Match) - Server Side\",\"description\":\"Default global script for server side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAyMyBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIFNjYWxhckNvbXBhcmF0b3IgPSB7fSwgU2NyZWVuQ29tcGFyYXRvciA9IHt9LCBNdWx0aVZhbHVlQ29tcGFyYXRvciA9IHt9LCBVc2VyQWdlbnRDb21wYXJhdG9yID0ge30sIEdlb2xvY2F0aW9uQ29tcGFyYXRvciA9IHt9OwoKdmFyIGNvbmZpZyA9IHsKICAgIHByb2ZpbGVFeHBpcmF0aW9uOiAzMCwgICAgICAgICAgICAgIC8vaW4gZGF5cwogICAgbWF4UHJvZmlsZXNBbGxvd2VkOiA1LAogICAgbWF4UGVuYWx0eVBvaW50czogMCwKICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBzY3JlZW46IHsKICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICAgIGNvbXBhcmF0b3I6IFNjcmVlbkNvbXBhcmF0b3IsCiAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDUwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHBsdWdpbnM6IHsKICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2luczogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmb250czogewogICAgICAgICAgICBpbnN0YWxsZWRGb250czogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogU2NhbGFyQ29tcGFyYXRvciwKICAgICAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdXNlckFnZW50OiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgICBjb21wYXJhdG9yOiBVc2VyQWdlbnRDb21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBpZ25vcmVWZXJzaW9uOiB0cnVlLAogICAgICAgICAgICAgICAgcGVuYWx0eVBvaW50czogMTAwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdlb2xvY2F0aW9uOiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSwKICAgICAgICAgICAgY29tcGFyYXRvcjogR2VvbG9jYXRpb25Db21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBhbGxvd2VkUmFuZ2U6IDEwMCwgICAgICAgICAgICAvL2luIG1pbGVzCiAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJhdG9yIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCgp2YXIgYWxsLCBhbnksIGNhbGN1bGF0ZURpc3RhbmNlLCBjYWxjdWxhdGVJbnRlcnNlY3Rpb24sIGNhbGN1bGF0ZVBlcmNlbnRhZ2UsIG51bGxPclVuZGVmaW5lZCwgc3BsaXRBbmRUcmltLAogICAgdW5kZWZpbmVkTG9jYXRpb247CgovLyBDb21wYXJpc29uUmVzdWx0CgovKioKICogQ29uc3RydWN0cyBhbiBpbnN0YW5jZSBvZiBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gcGVuYWx0eSBwb2ludHMuCiAqCiAqIEBwYXJhbSBwZW5hbHR5UG9pbnRzIChOdW1iZXIpIFRoZSBwZW5hbHR5IHBvaW50cyBmb3IgdGhlIGNvbXBhcmlzb24gKGRlZmF1bHRzIHRvIDApLgogKiBAcGFyYW0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSAoYm9vbGVhbikgV2hldGhlciB0aGUgY3VycmVudCB2YWx1ZSBjb250YWlucyBtb3JlIGluZm9ybWF0aW9uCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIHRoZSBzdG9yZWQgdmFsdWUgKGRlZmF1bHRzIHRvIGZhbHNlKS4KICovCmZ1bmN0aW9uIENvbXBhcmlzb25SZXN1bHQoKSB7CgogICAgdmFyIHBlbmFsdHlQb2ludHMgPSAwLAogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBmYWxzZTsKCiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQpIHsKICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBhcmd1bWVudHNbMV07CiAgICB9CgogICAgaWYgKGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkICYmIGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgaWYgKHR5cGVvZihhcmd1bWVudHNbMF0pID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSA9IGFyZ3VtZW50c1swXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIH0KICAgIH0KCiAgICB0aGlzLnBlbmFsdHlQb2ludHMgPSBwZW5hbHR5UG9pbnRzOwogICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZTsKCn0KCkNvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUyA9IG5ldyBDb21wYXJpc29uUmVzdWx0KDApOwoKLyoqCiAqIFN0YXRpYyBtZXRob2QgZm9yIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcuCiAqCiAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkuCiAqLwpDb21wYXJpc29uUmVzdWx0LmlzU3VjY2Vzc2Z1bCA9ICBmdW5jdGlvbihjb21wYXJpc29uUmVzdWx0KSB7CiAgICByZXR1cm4gY29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKTsKfTsKCgovKioKICogU3RhdGljIG1ldGhvZCBmb3IgZnVuY3Rpb25hbCBwcm9ncmFtbWluZy4KICoKICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gIGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHJldHVybiBjb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU7Cn07CgovKioKICogQ29tcGFyaXNvbiBmdW5jdGlvbiB0aGF0IGNhbiBiZSBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCB0byBhcnJheS5zb3J0CiAqLwpDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUgPSBmdW5jdGlvbihmaXJzdCwgc2Vjb25kKSB7CiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGZpcnN0KSAmJiBudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAwOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoZmlyc3QpKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAxOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoZmlyc3QucGVuYWx0eVBvaW50cyAhPT0gc2Vjb25kLnBlbmFsdHlQb2ludHMpIHsKICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnBlbmFsdHlQb2ludHMgLSBzZWNvbmQucGVuYWx0eVBvaW50czsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gKGZpcnN0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCkgLSAoc2Vjb25kLmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCk7CiAgICAgICAgfQogICAgfQp9OwoKLyoqCiAqIEFtYWxnYW1hdGVzIHRoZSBnaXZlbiBDb21wYXJpc29uUmVzdWx0IGludG8gdGhpcyBDb21wYXJpc29uUmVzdWx0LgogKgogKiBAcGFyYW0gY29tcGFyaXNvblJlc3VsdCBUaGUgQ29tcGFyaXNvblJlc3VsdCB0byBpbmNsdWRlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5wcm90b3R5cGUuYWRkQ29tcGFyaXNvblJlc3VsdCA9IGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHRoaXMucGVuYWx0eVBvaW50cyArPSBjb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHM7CiAgICBpZiAoY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKSB7CiAgICAgICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlOwogICAgfQp9OwoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBubyBwZW5hbHR5IHBvaW50cyBoYXZlIGJlZW4gYXNzaWduZWQgZm9yIHRoZSBjb21wYXJpc29uLgogKgogKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgY29tcGFyaXNvbiB3YXMgc3VjY2Vzc2Z1bC4KICovCkNvbXBhcmlzb25SZXN1bHQucHJvdG90eXBlLmlzU3VjY2Vzc2Z1bCA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZCh0aGlzLnBlbmFsdHlQb2ludHMpIHx8IHRoaXMucGVuYWx0eVBvaW50cyA9PT0gMDsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gc2ltcGxlIG9iamVjdHMgKFN0cmluZ3xOdW1iZXIpIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybwogKiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIGN1cnJlbnQgdmFsdWUuCiAqIEBwYXJhbSBzdG9yZWRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIHN0b3JlZCB2YWx1ZS4KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0LgogKi8KU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlID0gZnVuY3Rpb24gKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUsIGNvbmZpZykgewogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlN0cmluZ0NvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOnN0b3JlZFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoc3RvcmVkVmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOmNvbmZpZzogIiArIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpOwogICAgfQogICAgaWYgKGNvbmZpZy5wZW5hbHR5UG9pbnRzID09PSAwKSB7CiAgICAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUzsKICAgIH0KCiAgICBpZiAoIW51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgfHwgY3VycmVudFZhbHVlICE9PSBzdG9yZWRWYWx1ZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoIW51bGxPclVuZGVmaW5lZChjdXJyZW50VmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KHRydWUpOwogICAgfQoKICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7Cn07CgovKioKICogQ29tcGFyZXMgdHdvIHNjcmVlbnMgYW5kIGlmIHRoZXkgYXJlIGVxdWFsIHRoZW4gcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB6ZXJvIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLAogKiBvdGhlcndpc2UgcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiB7CiAqICAgICAgICAgICAgInNjcmVlbldpZHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBoZWlnaHQuCiAqICAgICAgICAgICAgInNjcmVlbkNvbG91ckRlcHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBjb2xvdXIgZGVwdGguCiAqICAgICAgICB9CiAqIEBwYXJhbSBzdG9yZWRWYWx1ZTogewogKiAgICAgICAgICAgICJzY3JlZW5XaWR0aCI6IChOdW1iZXIpIFRoZSBzdG9yZWQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIHN0b3JlZCBjbGllbnQgc2NyZWVuIGhlaWdodC4KICogICAgICAgICAgICAic2NyZWVuQ29sb3VyRGVwdGgiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGNsaWVudCBzY3JlZW4gY29sb3VyIGRlcHRoLgogKiAgICAgICAgfQogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgInBlbmFsdHlQb2ludHMiOiAoTnVtYmVyKSBUaGUgbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzLgogKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovClNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTY3JlZW5Db21wYXJhdG9yLmNvbXBhcmU6Y3VycmVudFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICBjdXJyZW50VmFsdWUgPSB7c2NyZWVuV2lkdGg6IG51bGwsIHNjcmVlbkhlaWdodDogbnVsbCwgc2NyZWVuQ29sb3VyRGVwdGg6IG51bGx9OwogICAgfQogICAgaWYgKG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBzdG9yZWRWYWx1ZSA9IHtzY3JlZW5XaWR0aDogbnVsbCwgc2NyZWVuSGVpZ2h0OiBudWxsLCBzY3JlZW5Db2xvdXJEZXB0aDogbnVsbH07CiAgICB9CgogICAgdmFyIGNvbXBhcmlzb25SZXN1bHRzID0gWwogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuV2lkdGgsIHN0b3JlZFZhbHVlLnNjcmVlbldpZHRoLCBjb25maWcpLAogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuSGVpZ2h0LCBzdG9yZWRWYWx1ZS5zY3JlZW5IZWlnaHQsIGNvbmZpZyksCiAgICAgICAgU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlKGN1cnJlbnRWYWx1ZS5zY3JlZW5Db2xvdXJEZXB0aCwgc3RvcmVkVmFsdWUuc2NyZWVuQ29sb3VyRGVwdGgsIGNvbmZpZyldOwoKICAgIGlmIChhbGwoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKSkgewogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChhbnkoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSkpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgfQp9OwoKLyoqCiAqIFNwbGl0cyBib3RoIHZhbHVlcyB1c2luZyBkZWxpbWl0ZXIsIHRyaW1zIGV2ZXJ5IHZhbHVlIGFuZCBjb21wYXJlcyBjb2xsZWN0aW9ucyBvZiB2YWx1ZXMuCiAqIFJldHVybnMgemVyby1yZXN1bHQgZm9yIHNhbWUgbXVsdGktdmFsdWUgYXR0cmlidXRlcy4KICoKICogSWYgY29sbGVjdGlvbnMgYXJlIG5vdCBzYW1lIGNoZWNrcyBpZiBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaXMgbGVzcyBvciBlcXVhbCBtYXhEaWZmZXJlbmNlcyBvcgogKiBwZXJjZW50YWdlIG9mIGRpZmZlcmVuY2UgaXMgbGVzcyBvciBlcXVhbCBtYXhQZXJjZW50YWdlRGlmZmVyZW5jZS4KICoKICogSWYgeWVzIHRoZW4gcmV0dXJucyB6ZXJvLXJlc3VsdCB3aXRoIGFkZGl0aW9uYWwgaW5mbywgZWxzZSByZXR1cm5zIHBlbmFsdHlQb2ludHMtcmVzdWx0LgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlOiAoU3RyaW5nKSBUaGUgc3RvcmVkIHZhbHVlLgogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgIm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlIjogKE51bWJlcikgVGhlIG1heCBkaWZmZXJlbmNlIHBlcmNlbnRhZ2UgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgaXMgYXNzaWduZWQuCiAqICAgICAgICAgICAgIm1heERpZmZlcmVuY2VzIjogKE51bWJlcikgVGhlIG1heCBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgcG9pbnRzIGFyZSBhc3NpZ25lZC4KICogICAgICAgICAgICAicGVuYWx0eVBvaW50cyI6IChOdW1iZXIpIFRoZSBudW1iZXIgb2YgcGVuYWx0eSBwb2ludHMuCiAgKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovCk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgdmFyIGRlbGltaXRlciA9ICI7IiwKICAgICAgICBjdXJyZW50VmFsdWVzID0gc3BsaXRBbmRUcmltKGN1cnJlbnRWYWx1ZSwgZGVsaW1pdGVyKSwKICAgICAgICBzdG9yZWRWYWx1ZXMgPSBzcGxpdEFuZFRyaW0oc3RvcmVkVmFsdWUsIGRlbGltaXRlciksCiAgICAgICAgbWF4TnVtYmVyT2ZFbGVtZW50cyA9IE1hdGgubWF4KGN1cnJlbnRWYWx1ZXMubGVuZ3RoLCBzdG9yZWRWYWx1ZXMubGVuZ3RoKSwKICAgICAgICBudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9IGNhbGN1bGF0ZUludGVyc2VjdGlvbihjdXJyZW50VmFsdWVzLCBzdG9yZWRWYWx1ZXMpLmxlbmd0aCwKICAgICAgICBudW1iZXJPZkRpZmZlcmVuY2VzID0gbWF4TnVtYmVyT2ZFbGVtZW50cyAtIG51bWJlck9mVGhlU2FtZUVsZW1lbnRzLAogICAgICAgIHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzID0gY2FsY3VsYXRlUGVyY2VudGFnZShudW1iZXJPZkRpZmZlcmVuY2VzLCBtYXhOdW1iZXJPZkVsZW1lbnRzKTsKCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKHN0b3JlZFZhbHVlKSAmJiAhbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UobnVtYmVyT2ZUaGVTYW1lRWxlbWVudHMgKyAiIG9mICIgKyBtYXhOdW1iZXJPZkVsZW1lbnRzICsgIiBhcmUgc2FtZSIpOwogICAgfQoKICAgIGlmIChtYXhOdW1iZXJPZkVsZW1lbnRzID09PSAwKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBubyBhdHRyaWJ1dGVzIGZvdW5kIGluIGJvdGggcHJvZmlsZXMiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9PT0gbWF4TnVtYmVyT2ZFbGVtZW50cykgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJJZ25vcmVkIGJlY2F1c2UgYWxsIGF0dHJpYnV0ZXMgYXJlIHNhbWUiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZkRpZmZlcmVuY2VzID4gY29uZmlnLm1heERpZmZlcmVuY2VzKSB7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJXb3VsZCBiZSBpZ25vcmVkIGlmIG5vdCBtb3JlIHRoYW4gIiArIGNvbmZpZy5tYXhEaWZmZXJlbmNlcyArICIgZGlmZmVyZW5jZXMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KCiAgICBpZiAocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgPiBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgKyAiIHBlcmNlbnRzIGFyZSBkaWZmZXJlbnQiKTsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIldvdWxkIGJlIGlnbm9yZWQgaWYgbm90IG1vcmUgdGhhbiAiICsgY29uZmlnLm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlICsgIiBwZXJjZW50Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChjb25maWcucGVuYWx0eVBvaW50cyk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBudW1iZXIgb2YgZGlmZmVyZW5jZXMoIiArIG51bWJlck9mRGlmZmVyZW5jZXMgKyAiKSBub3QgbW9yZSB0aGFuICIKICAgICAgICAgICAgKyBjb25maWcubWF4RGlmZmVyZW5jZXMpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzICsgIiBwZXJjZW50cyBhcmUgZGlmZmVyZW50Iik7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBub3QgbW9yZSB0aGFuICIgKyBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UgKyAiIHBlcmNlbnQiKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdCh0cnVlKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gVXNlciBBZ2VudCBTdHJpbmdzIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybyBwZW5hbHR5CiAqIHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlIChTdHJpbmcpIFRoZSBzdG9yZWQgdmFsdWUuCiAqIEBwYXJhbSBjb25maWc6IHsKICogICAgICAgICAgICAiaWdub3JlVmVyc2lvbiI6IChib29sZWFuKSBJZiB0aGUgdmVyc2lvbiBudW1iZXJzIGluIHRoZSBVc2VyIEFnZW50IFN0cmluZ3Mgc2hvdWxkIGJlIGlnbm9yZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb21wYXJpc29uLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBBIENvbXBhcmlzb25SZXN1bHQuCiAqLwpVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiVXNlckFnZW50Q29tcGFyYXRvci5jb21wYXJlOmN1cnJlbnRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgaWYgKGNvbmZpZy5pZ25vcmVWZXJzaW9uKSB7CiAgICAgICAgLy8gcmVtb3ZlIHZlcnNpb24gbnVtYmVyCiAgICAgICAgY3VycmVudFZhbHVlID0gbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgPyBudWxsIDogY3VycmVudFZhbHVlLnJlcGxhY2UoL1tcZFwuXSsvZywgIiIpLnRyaW0oKTsKICAgICAgICBzdG9yZWRWYWx1ZSA9IG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkgPyBudWxsIDogc3RvcmVkVmFsdWUucmVwbGFjZSgvW1xkXC5dKy9nLCAiIikudHJpbSgpOwogICAgfQoKICAgIHJldHVybiBTY2FsYXJDb21wYXJhdG9yLmNvbXBhcmUoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gbG9jYXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50IGEgZGVncmVlIG9mIGRpZmZlcmVuY2UuCiAqCiAqIEBwYXJhbSBjdXJyZW50VmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgY3VycmVudCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGN1cnJlbnQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcGFyYW0gc3RvcmVkVmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxhdGl0dWRlLgogKiAgICAgICAgICAgICJsb25naXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJhbGxvd2VkUmFuZ2UiOiAoTnVtYmVyKSBUaGUgbWF4IGRpZmZlcmVuY2UgYWxsb3dlZCBpbiB0aGUgdHdvIGxvY2F0aW9ucywgYmVmb3JlIHRoZSBwZW5hbHR5IGlzIGFzc2lnbmVkLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KKiAgICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0CiAqLwpHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiR2VvbG9jYXRpb25Db21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICAvLyBDaGVjayBmb3IgdW5kZWZpbmVkIHN0b3JlZCBvciBjdXJyZW50IGxvY2F0aW9ucwoKICAgIGlmICh1bmRlZmluZWRMb2NhdGlvbihjdXJyZW50VmFsdWUpICYmIHVuZGVmaW5lZExvY2F0aW9uKHN0b3JlZFZhbHVlKSkgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CiAgICBpZiAodW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiAhdW5kZWZpbmVkTG9jYXRpb24oc3RvcmVkVmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KICAgIGlmICghdW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiB1bmRlZmluZWRMb2NhdGlvbihzdG9yZWRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgLy8gQm90aCBsb2NhdGlvbnMgZGVmaW5lZCwgdGhlcmVmb3JlIHBlcmZvcm0gY29tcGFyaXNvbgoKICAgIHZhciBkaXN0YW5jZSA9IGNhbGN1bGF0ZURpc3RhbmNlKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUpOwoKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJEaXN0YW5jZSBiZXR3ZWVuICgiICsgY3VycmVudFZhbHVlLmxhdGl0dWRlICsgIiwiICsgY3VycmVudFZhbHVlLmxvbmdpdHVkZSArICIpIGFuZCAoIiArCiAgICAgICAgICAgIHN0b3JlZFZhbHVlLmxhdGl0dWRlICsgIiwiICsgc3RvcmVkVmFsdWUubG9uZ2l0dWRlICsgIikgaXMgIiArIGRpc3RhbmNlICsgIiBtaWxlcyIpOwogICAgfQoKICAgIGlmIChwYXJzZUZsb2F0KGRpc3RhbmNlLnRvUHJlY2lzaW9uKDUpKSA9PT0gMCkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJMb2NhdGlvbiBpcyB0aGUgc2FtZSIpOwogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CgogICAgaWYgKGRpc3RhbmNlIDw9IGNvbmZpZy5hbGxvd2VkUmFuZ2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlRvbGVyYXRlZCBiZWNhdXNlIGRpc3RhbmNlIG5vdCBtb3JlIHRoZW4gIiArIGNvbmZpZy5hbGxvd2VkUmFuZ2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiV291bGQgYmUgaWdub3JlZCBpZiBkaXN0YW5jZSBub3QgbW9yZSB0aGVuICIgKyBjb25maWcuYWxsb3dlZFJhbmdlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KfTsKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi8vICAgICAgICAgICAgICAgICAgICBEZXZpY2UgUHJpbnQgTG9naWMgLSBETyBOT1QgTU9ESUZZICAgICAgICAgICAgICAgICAgICAgLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwoKLy8gVXRpbGl0eSBmdW5jdGlvbnMKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgZXZhbHVhdGluZyBmdW5jdGlvbiBmIG9uIGVhY2ggZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYWxsID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn07CgovKioKICogUmV0dXJucyB0cnVlIGlmIGV2YWx1YXRpbmcgZnVuY3Rpb24gZiBvbiBhbnkgZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYW55ID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGxvY2F0aW9uIGlzIG51bGwgb3IgaGFzIHVuZGVmaW5lZCBsb25naXR1ZGUgb3IgbGF0aXR1ZGUgdmFsdWVzLgogKgogKiBAcGFyYW0gbG9jYXRpb246IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBsb25naXR1ZGUuCiAqICAgICAgICB9CiAqIEByZXR1cm4gYm9vbGVhbgogKi8KdW5kZWZpbmVkTG9jYXRpb24gPSBmdW5jdGlvbihsb2NhdGlvbikgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZChsb2NhdGlvbikgfHwgbnVsbE9yVW5kZWZpbmVkKGxvY2F0aW9uLmxhdGl0dWRlKSB8fCBudWxsT3JVbmRlZmluZWQobG9jYXRpb24ubG9uZ2l0dWRlKTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLgogKgogKiBAcGFyYW0gdmFsdWU6IGEgdmFsdWUgb2YgYW55IHR5cGUKICogQHJldHVybiBib29sZWFuCiAqLwpudWxsT3JVbmRlZmluZWQgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7Cn07CgovKioKICogQ2FsY3VsYXRlcyB0aGUgZGlzdGFuY2VzIGJldHdlZW4gdGhlIHR3byBsb2NhdGlvbnMuCiAqCiAqIEBwYXJhbSBmaXJzdDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBmaXJzdCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGZpcnN0IGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIHNlY29uZDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcmV0dXJuIE51bWJlciBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdHdvIGxvY2F0aW9ucy4KICovCmNhbGN1bGF0ZURpc3RhbmNlID0gZnVuY3Rpb24oZmlyc3QsIHNlY29uZCkgewogICAgdmFyIGZhY3RvciA9IChNYXRoLlBJIC8gMTgwKSwKICAgICAgICB0aGV0YSwKICAgICAgICBkaXN0OwogICAgZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkZWdyZWVzKSB7CiAgICAgICAgcmV0dXJuIGRlZ3JlZXMgKiBmYWN0b3I7CiAgICB9CiAgICBmdW5jdGlvbiByYWRpYW5zVG9EZWdyZWVzKHJhZGlhbnMpIHsKICAgICAgICByZXR1cm4gcmFkaWFucyAvIGZhY3RvcjsKICAgIH0KICAgIHRoZXRhID0gZmlyc3QubG9uZ2l0dWRlIC0gc2Vjb25kLmxvbmdpdHVkZTsKICAgIGRpc3QgPSBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKyBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHRoZXRhKSk7CiAgICBkaXN0ID0gTWF0aC5hY29zKGRpc3QpOwogICAgZGlzdCA9IHJhZGlhbnNUb0RlZ3JlZXMoZGlzdCk7CiAgICBkaXN0ID0gZGlzdCAqIDYwICogMS4xNTE1OwogICAgcmV0dXJuIGRpc3Q7Cn07CgovKioKICogQ29udmVydHMgYSBTdHJpbmcgaG9sZGluZyBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMgaW50byBhbiBhcnJheS4KICoKICogQHBhcmFtIHRleHQgKFN0cmluZykgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMuCiAqIEBwYXJhbSBkZWxpbWl0ZXIgKFN0cmluZykgVGhlIGNoYXJhY3RlciBkZWxpbWl0aW5nIHZhbHVlcyB3aXRoaW4gdGhlIHRleHQgU3RyaW5nLgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMuCiAqLwpzcGxpdEFuZFRyaW0gPSBmdW5jdGlvbih0ZXh0LCBkZWxpbWl0ZXIpIHsKCiAgICB2YXIgcmVzdWx0cyA9IFtdLAogICAgICAgIGksCiAgICAgICAgdmFsdWVzLAogICAgICAgIHZhbHVlOwogICAgaWYgKHRleHQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KCiAgICB2YWx1ZXMgPSB0ZXh0LnNwbGl0KGRlbGltaXRlcik7CiAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFsdWUgPSB2YWx1ZXNbaV0udHJpbSgpOwogICAgICAgIGlmICh2YWx1ZSAhPT0gIiIpIHsKICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdHM7Cn07CgovKioKICogQ29udmVydHMgdmFsdWUgdG8gYSBwZXJjZW50YWdlIG9mIHJhbmdlLgogKgogKiBAcGFyYW0gdmFsdWUgKE51bWJlcikgVGhlIGFjdHVhbCBudW1iZXIgdG8gYmUgY29udmVydGVkIHRvIGEgcGVyY2VudGFnZS4KICogQHBhcmFtIHJhbmdlIChOdW1iZXIpIFRoZSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzIChpLmUuIHJlcHJlc2VudHMgMTAwJSkuCiAqIEByZXR1cm4gKE51bWJlcikgVGhlIHBlcmNlbnRhZ2UuCiAqLwpjYWxjdWxhdGVQZXJjZW50YWdlID0gZnVuY3Rpb24odmFsdWUsIHJhbmdlKSB7CiAgICBpZiAocmFuZ2UgPT09IDApIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBwYXJzZUZsb2F0KCh2YWx1ZSAvIHJhbmdlKS50b1ByZWNpc2lvbigyKSkgKiAxMDA7Cn07CgovKioKICogQ3JlYXRlcyBhIG5ldyBhcnJheSBjb250YWluaW5nIG9ubHkgdGhvc2UgZWxlbWVudHMgZm91bmQgaW4gYm90aCBhcnJheXMgcmVjZWl2ZWQgYXMgYXJndW1lbnRzLgogKgogKiBAcGFyYW0gZmlyc3QgKEFycmF5KSBUaGUgZmlyc3QgYXJyYXkuCiAqIEBwYXJhbSBzZWNvbmQgKEFycmF5KSBUaGUgc2Vjb25kIGFycmF5LgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGVsZW1lbnRzIHRoYXQgZm91bmQgaW4gZmlyc3QgYW5kIHNlY29uZC4KICovCmNhbGN1bGF0ZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGZpcnN0LCBzZWNvbmQpIHsKICAgIHJldHVybiBmaXJzdC5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgIHJldHVybiBzZWNvbmQuaW5kZXhPZihlbGVtZW50KSAhPT0gLTE7CiAgICB9KTsKfTsKCmZ1bmN0aW9uIGdldFZhbHVlKG9iaiwgYXR0cmlidXRlUGF0aCkgewogICAgdmFyIHZhbHVlID0gb2JqLAogICAgICAgIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cmlidXRlUGF0aC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICB2YWx1ZSA9IHZhbHVlW2F0dHJpYnV0ZVBhdGhbaV1dOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwp9CgoKZnVuY3Rpb24gaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWcpIHsKICAgIHJldHVybiBhdHRyaWJ1dGVDb25maWcuY29tcGFyYXRvciAhPT0gdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcsIGF0dHJpYnV0ZVBhdGgpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBbXSwKICAgICAgICBhdHRyaWJ1dGVOYW1lLAogICAgICAgIGF0dHJQYXRocywKICAgICAgICBhdHRyUGF0aCwKICAgICAgICBpOwoKICAgIGZvciAoYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVDb25maWcpIHsKICAgICAgICBpZiAoYXR0cmlidXRlQ29uZmlnLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZU5hbWUpKSB7CgogICAgICAgICAgICBpZiAoaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWdbYXR0cmlidXRlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBhdHRyUGF0aCA9IGF0dHJpYnV0ZVBhdGguc2xpY2UoKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRoLnB1c2goYXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVQYXRocy5wdXNoKGF0dHJQYXRoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJQYXRoID0gYXR0cmlidXRlUGF0aC5zbGljZSgpOwogICAgICAgICAgICAgICAgYXR0clBhdGgucHVzaChhdHRyaWJ1dGVOYW1lKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRocyA9IGdldEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZ1thdHRyaWJ1dGVOYW1lXSwgYXR0clBhdGgpOwogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGF0dHJQYXRocy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVBhdGhzLnB1c2goYXR0clBhdGhzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYXR0cmlidXRlUGF0aHM7Cn0KCmZ1bmN0aW9uIGdldERldmljZVByaW50QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnKSB7CiAgICByZXR1cm4gZ2V0QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnLCBbXSk7Cn0KCmZ1bmN0aW9uIGhhc1JlcXVpcmVkQXR0cmlidXRlcyhkZXZpY2VQcmludCwgYXR0cmlidXRlQ29uZmlnKSB7CgogICAgdmFyIGF0dHJpYnV0ZVBhdGhzID0gZ2V0RGV2aWNlUHJpbnRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcpLAogICAgICAgIGksCiAgICAgICAgYXR0clZhbHVlLAogICAgICAgIGF0dHJDb25maWc7CgogICAgZm9yIChpID0gMDsgaSA8IGF0dHJpYnV0ZVBhdGhzLmxlbmd0aDsgaSsrKSB7CgogICAgICAgIGF0dHJWYWx1ZSA9IGdldFZhbHVlKGRldmljZVByaW50LCBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICBpZiAoYXR0ckNvbmZpZy5yZXF1aXJlZCAmJiBhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBsb2dnZXIud2FybmluZygiRGV2aWNlIFByaW50IHByb2ZpbGUgbWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUsICIgKyBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZSBwcmludCBoYXMgcmVxdWlyZWQgYXR0cmlidXRlcyIpOwogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGF0dHJpYnV0ZUNvbmZpZywgZGV2aWNlUHJpbnQsIGRldmljZVByaW50UHJvZmlsZXMsIG1heFBlbmFsdHlQb2ludHMpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBnZXREZXZpY2VQcmludEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZyksCiAgICAgICAgZGFvID0gc2hhcmVkU3RhdGUuZ2V0KCdfRGV2aWNlSWREYW8nKSwKICAgICAgICByZXN1bHRzLAogICAgICAgIGosCiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQsCiAgICAgICAgaSwKICAgICAgICBjdXJyZW50VmFsdWUsCiAgICAgICAgc3RvcmVkVmFsdWUsCiAgICAgICAgYXR0ckNvbmZpZywKICAgICAgICBjb21wYXJpc29uUmVzdWx0LAogICAgICAgIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICBzZWxlY3RlZFByb2ZpbGUsCiAgICAgICAgY3VyRGV2aWNlUHJpbnRQcm9maWxlLAogICAgICAgIHZhbHM7CgogICAgcmVzdWx0cyA9IFtdOwogICAgZm9yIChqID0gMDsgaiA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBjdXJEZXZpY2VQcmludFByb2ZpbGUgPSBKU09OLnBhcnNlKG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvbihkZXZpY2VQcmludFByb2ZpbGVzW2pdKSk7CiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQgPSBuZXcgQ29tcGFyaXNvblJlc3VsdCgpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdHRyaWJ1dGVQYXRocy5sZW5ndGg7IGkrKykgewoKICAgICAgICAgICAgY3VycmVudFZhbHVlID0gZ2V0VmFsdWUoZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgc3RvcmVkVmFsdWUgPSBnZXRWYWx1ZShjdXJEZXZpY2VQcmludFByb2ZpbGUuZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICAgICAgaWYgKHN0b3JlZFZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb21wYXJpc29uUmVzdWx0ID0gbmV3IENvbXBhcmlzb25SZXN1bHQoYXR0ckNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbXBhcmlzb25SZXN1bHQgPSBhdHRyQ29uZmlnLmNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBhdHRyQ29uZmlnLmFyZ3MpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJDb21wYXJpbmcgYXR0cmlidXRlIHBhdGg6ICIgKyBhdHRyaWJ1dGVQYXRoc1tpXQogICAgICAgICAgICAgICAgICAgICsgIiwgQ29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkgKyAiLCBwZW5hbHR5UG9pbnRzPSIKICAgICAgICAgICAgICAgICAgICArIGNvbXBhcmlzb25SZXN1bHQucGVuYWx0eVBvaW50cyArICIsIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU9IgogICAgICAgICAgICAgICAgICAgICsgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5hZGRDb21wYXJpc29uUmVzdWx0KGNvbXBhcmlzb25SZXN1bHQpOwogICAgICAgIH0KICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIkFnZ3JlZ2F0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKSArICIsIHBlbmFsdHlQb2ludHM9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICAgICArIGFnZ3JlZ2F0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmVzdWx0cy5wdXNoKHsKICAgICAgICAgICAga2V5OiBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICAgICAgdmFsdWU6IGRldmljZVByaW50UHJvZmlsZXNbal0KICAgICAgICB9KTsKICAgIH0KCiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXN1bHRzLnNvcnQoZnVuY3Rpb24oYSwgYikgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUoYS5rZXksIGIua2V5KTsKICAgIH0pOwogICAgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0ID0gcmVzdWx0c1swXS5rZXk7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU2VsZWN0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKQogICAgICAgICAgICArICIsIHBlbmFsdHlQb2ludHM9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgfQoKICAgIHNlbGVjdGVkUHJvZmlsZSA9IG51bGw7CiAgICBpZiAoc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgPD0gbWF4UGVuYWx0eVBvaW50cykgewogICAgICAgIHNlbGVjdGVkUHJvZmlsZSA9IHJlc3VsdHNbMF0udmFsdWU7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTZWxlY3RlZCBwcm9maWxlOiAiICsgc2VsZWN0ZWRQcm9maWxlICsKICAgICAgICAgICAgICAgICIgd2l0aCAiICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgKyAiIHBlbmFsdHkgcG9pbnRzIik7CiAgICAgICAgfQogICAgfQoKICAgIGlmIChzZWxlY3RlZFByb2ZpbGUgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyogdXBkYXRlIHByb2ZpbGUgKi8KICAgIHNlbGVjdGVkUHJvZmlsZS5wdXQoInNlbGVjdGlvbkNvdW50ZXIiLAogICAgICAgIGphdmEubGFuZy5JbnRlZ2VyLnZhbHVlT2YocGFyc2VJbnQoc2VsZWN0ZWRQcm9maWxlLmdldCgic2VsZWN0aW9uQ291bnRlciIpLCAxMCkgKyAxKSk7CiAgICBzZWxlY3RlZFByb2ZpbGUucHV0KCJsYXN0U2VsZWN0ZWREYXRlIiwgamF2YS5sYW5nLkxvbmcudmFsdWVPZihuZXcgRGF0ZSgpLmdldFRpbWUoKSkpOwogICAgc2VsZWN0ZWRQcm9maWxlLnB1dCgiZGV2aWNlUHJpbnQiLCBkZXZpY2VQcmludCk7CgogICAgdmFscyA9IFtdOwogICAgZm9yIChpID0gMDsgaSA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YWxzLnB1c2gob3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uKGRldmljZVByaW50UHJvZmlsZXNbaV0pKTsKICAgIH0KCiAgICBkYW8uc2F2ZURldmljZVByb2ZpbGVzKHVzZXJuYW1lLCByZWFsbSwgdmFscyk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIG1hdGNoRGV2aWNlUHJpbnQoKSB7CgogICAgaWYgKCF1c2VybmFtZSkgewogICAgICAgIGxvZ2dlci5lcnJvcigiVXNlcm5hbWUgbm90IHNldC4gQ2Fubm90IGNvbXBhcmUgdXNlcidzIGRldmljZSBwcmludCBwcm9maWxlcy4iKTsKICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICB9IGVsc2UgewoKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImNsaWVudCBkZXZpY2VQcmludDogIiArIGNsaWVudFNjcmlwdE91dHB1dERhdGEpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGdldFByb2ZpbGVzID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRXhwaXJlZFByb2ZpbGUoZGV2aWNlUHJpbnRQcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cGlyYXRpb25EYXRlID0gbmV3IERhdGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNlbGVjdGVkRGF0ZTsKICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uRGF0ZS5zZXREYXRlKGV4cGlyYXRpb25EYXRlLmdldERhdGUoKSAtIGNvbmZpZy5wcm9maWxlRXhwaXJhdGlvbik7CgogICAgICAgICAgICAgICAgICAgIGxhc3RTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShkZXZpY2VQcmludFByb2ZpbGUubGFzdFNlbGVjdGVkRGF0ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0U2VsZWN0ZWREYXRlIDwgZXhwaXJhdGlvbkRhdGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICBkYW8gPSBzaGFyZWRTdGF0ZS5nZXQoJ19EZXZpY2VJZERhbycpLAogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVzLAogICAgICAgICAgICAgICAgICAgICAgICBpdGVyOwoKICAgICAgICAgICAgICAgICAgICBwcm9maWxlcyA9IGRhby5nZXREZXZpY2VQcm9maWxlcyh1c2VybmFtZSwgcmVhbG0pOwoKICAgICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaXRlciA9IHByb2ZpbGVzLml0ZXJhdG9yKCk7CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgPSBpdGVyLm5leHQoKS5nZXRPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFeHBpcmVkUHJvZmlsZShwcm9maWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChwcm9maWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoInN0b3JlZCBub24tZXhwaXJlZCBwcm9maWxlczogIiArIHJlc3VsdHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRldmljZVByaW50ID0gSlNPTi5wYXJzZShjbGllbnRTY3JpcHRPdXRwdXREYXRhKSwKICAgICAgICAgICAgZGV2aWNlUHJpbnRQcm9maWxlcyA9IGdldFByb2ZpbGVzKCk7CgogICAgICAgIGlmICghaGFzUmVxdWlyZWRBdHRyaWJ1dGVzKGRldmljZVByaW50LCBjb25maWcuYXR0cmlidXRlcykpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZVByaW50Lmhhc1JlcXVpcmVkQXR0cmlidXRlczogZmFsc2UiKTsKICAgICAgICAgICAgLy8gV2lsbCBmYWlsIHRoaXMgbW9kdWxlIGJ1dCBmYWxsLXRocm91Z2ggdG8gbmV4dCBtb2R1bGUuIFdoaWNoIHNob3VsZCBiZSBPVFAuCiAgICAgICAgICAgIGF1dGhTdGF0ZSA9IEZBSUxFRDsKICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGNvbmZpZy5hdHRyaWJ1dGVzLCBkZXZpY2VQcmludCwgZGV2aWNlUHJpbnRQcm9maWxlcywgY29uZmlnLm1heFBlbmFsdHlQb2ludHMpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJkZXZpY2VQcmludC5oYXNWYWxpZFByb2ZpbGU6IHRydWUiKTsKICAgICAgICAgICAgYXV0aFN0YXRlID0gU1VDQ0VTUzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiZGV2aWNlUHJpbnQuaGFzVmFsaWRQcm9maWxlOiBmYWxzZSIpOwogICAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoJ2RldmljZVByaW50UHJvZmlsZScsIEpTT04uc3RyaW5naWZ5KGRldmljZVByaW50KSk7CiAgICAgICAgICAgIC8vIFdpbGwgZmFpbCB0aGlzIG1vZHVsZSBidXQgZmFsbC10aHJvdWdoIHRvIG5leHQgbW9kdWxlLiBXaGljaCBzaG91bGQgYmUgT1RQLgogICAgICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICAgICAgfQogICAgfQp9CgptYXRjaERldmljZVByaW50KCk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1129, + "text": "{\"result\":[{\"_id\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"name\":\"Check Username\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -2124,18 +2240,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "content-length", + "value": "1129" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:22 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -2143,20 +2267,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:22.943Z", - "time": 77, + "startedDateTime": "2024-06-19T21:28:26.839Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -2164,11 +2284,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 77 + "wait": 51 } }, { - "_id": "5e9aaa7940499ae88cb8e5c5b2d83090", + "_id": "1765289e6f5d93f97516bbad71fa265d", "_order": 0, "cache": {}, "request": { @@ -2180,16 +2300,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -2199,28 +2319,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1625, + "headersSize": 1669, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"FrodoTestScript4\"" + "value": "name eq \"FrodoSPAdapter\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript4%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoSPAdapter%22" }, "response": { - "bodySize": 1131, + "bodySize": 10747, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1131, - "text": "{\"result\":[{\"_id\":\"10643e95-873a-4ec0-b713-a7f56760d179\",\"name\":\"FrodoTestScript4\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 10747, + "text": "{\"result\":[{\"_id\":\"07ee6240-d106-4e25-a781-5fcabc477d22\",\"name\":\"FrodoSPAdapter\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_SP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -2269,21 +2393,25 @@ "value": "application/json;charset=UTF-8" }, { - "name": "content-length", - "value": "1131" + "name": "transfer-encoding", + "value": "chunked" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:22 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -2293,14 +2421,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 800, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:23.027Z", - "time": 69, + "startedDateTime": "2024-06-19T21:28:26.896Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -2308,11 +2436,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 69 + "wait": 52 } }, { - "_id": "c5cda9fdad2bde1459bbb88c54fff9e7", + "_id": "e7c65f07a991b9e8c707db71628693e6", "_order": 0, "cache": {}, "request": { @@ -2324,16 +2452,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -2343,28 +2471,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1654, + "headersSize": 1668, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Device Id (Match) - Client Side\"" + "value": "name eq \"pwdlessSet.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Device%20Id%20%28Match%29%20-%20Client%20Side%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22pwdlessSet.js%22" }, "response": { - "bodySize": 13210, + "bodySize": 1467, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 13210, - "text": "{\"result\":[{\"_id\":\"157298c0-7d31-4059-a95b-eeb08473b7e5\",\"name\":\"Device Id (Match) - Client Side\",\"description\":\"Default global script for client side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGZvbnREZXRlY3RvciA9IChmdW5jdGlvbiAoKSB7CiAgICAvKioKICAgICAqIEphdmFTY3JpcHQgY29kZSB0byBkZXRlY3QgYXZhaWxhYmxlIGF2YWlsYWJpbGl0eSBvZiBhCiAgICAgKiBwYXJ0aWN1bGFyIGZvbnQgaW4gYSBicm93c2VyIHVzaW5nIEphdmFTY3JpcHQgYW5kIENTUy4KICAgICAqCiAgICAgKiBBdXRob3IgOiBMYWxpdCBQYXRlbAogICAgICogV2Vic2l0ZTogaHR0cDovL3d3dy5sYWxpdC5vcmcvbGFiL2phdmFzY3JpcHQtY3NzLWZvbnQtZGV0ZWN0LwogICAgICogTGljZW5zZTogQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wCiAgICAgKiAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAgICAqIFZlcnNpb246IDAuMTUgKDIxIFNlcCAyMDA5KQogICAgICogICAgICAgICAgQ2hhbmdlZCBjb21wYXJpc2lvbiBmb250IHRvIGRlZmF1bHQgZnJvbSBzYW5zLWRlZmF1bHQtZGVmYXVsdCwKICAgICAqICAgICAgICAgIGFzIGluIEZGMy4wIGZvbnQgb2YgY2hpbGQgZWxlbWVudCBkaWRuJ3QgZmFsbGJhY2sKICAgICAqICAgICAgICAgIHRvIHBhcmVudCBlbGVtZW50IGlmIHRoZSBmb250IGlzIG1pc3NpbmcuCiAgICAgKiBWZXJzaW9uOiAwLjIgKDA0IE1hciAyMDEyKQogICAgICogICAgICAgICAgQ29tcGFyaW5nIGZvbnQgYWdhaW5zdCBhbGwgdGhlIDMgZ2VuZXJpYyBmb250IGZhbWlsaWVzIGllLAogICAgICogICAgICAgICAgJ21vbm9zcGFjZScsICdzYW5zLXNlcmlmJyBhbmQgJ3NhbnMnLiBJZiBpdCBkb2Vzbid0IG1hdGNoIGFsbCAzCiAgICAgKiAgICAgICAgICB0aGVuIHRoYXQgZm9udCBpcyAxMDAlIG5vdCBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbQogICAgICogVmVyc2lvbjogMC4zICgyNCBNYXIgMjAxMikKICAgICAqICAgICAgICAgIFJlcGxhY2VkIHNhbnMgd2l0aCBzZXJpZiBpbiB0aGUgbGlzdCBvZiBiYXNlRm9udHMKICAgICAqLwogICAgLyoKICAgICAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMgRm9yZ2VSb2NrIEFTLgogICAgICovCiAgICB2YXIgZGV0ZWN0b3IgPSB7fSwgYmFzZUZvbnRzLCB0ZXN0U3RyaW5nLCB0ZXN0U2l6ZSwgaCwgcywgZGVmYXVsdFdpZHRoID0ge30sIGRlZmF1bHRIZWlnaHQgPSB7fSwgaW5kZXg7CgogICAgLy8gYSBmb250IHdpbGwgYmUgY29tcGFyZWQgYWdhaW5zdCBhbGwgdGhlIHRocmVlIGRlZmF1bHQgZm9udHMuCiAgICAvLyBhbmQgaWYgaXQgZG9lc24ndCBtYXRjaCBhbGwgMyB0aGVuIHRoYXQgZm9udCBpcyBub3QgYXZhaWxhYmxlLgogICAgYmFzZUZvbnRzID0gWydtb25vc3BhY2UnLCAnc2Fucy1zZXJpZicsICdzZXJpZiddOwoKICAgIC8vd2UgdXNlIG0gb3IgdyBiZWNhdXNlIHRoZXNlIHR3byBjaGFyYWN0ZXJzIHRha2UgdXAgdGhlIG1heGltdW0gd2lkdGguCiAgICAvLyBBbmQgd2UgdXNlIGEgTExpIHNvIHRoYXQgdGhlIHNhbWUgbWF0Y2hpbmcgZm9udHMgY2FuIGdldCBzZXBhcmF0ZWQKICAgIHRlc3RTdHJpbmcgPSAibW1tbW1tbW1tbWxsaSI7CgogICAgLy93ZSB0ZXN0IHVzaW5nIDcycHggZm9udCBzaXplLCB3ZSBtYXkgdXNlIGFueSBzaXplLiBJIGd1ZXNzIGxhcmdlciB0aGUgYmV0dGVyLgogICAgdGVzdFNpemUgPSAnNzJweCc7CgogICAgaCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07CgogICAgLy8gY3JlYXRlIGEgU1BBTiBpbiB0aGUgZG9jdW1lbnQgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgdGV4dCB3ZSB1c2UgdG8gdGVzdAogICAgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIHMuc3R5bGUuZm9udFNpemUgPSB0ZXN0U2l6ZTsKICAgIHMuaW5uZXJIVE1MID0gdGVzdFN0cmluZzsKICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHQgd2lkdGggZm9yIHRoZSB0aHJlZSBiYXNlIGZvbnRzCiAgICAgICAgcy5zdHlsZS5mb250RmFtaWx5ID0gYmFzZUZvbnRzW2luZGV4XTsKICAgICAgICBoLmFwcGVuZENoaWxkKHMpOwogICAgICAgIGRlZmF1bHRXaWR0aFtiYXNlRm9udHNbaW5kZXhdXSA9IHMub2Zmc2V0V2lkdGg7IC8vd2lkdGggZm9yIHRoZSBkZWZhdWx0IGZvbnQKICAgICAgICBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dID0gcy5vZmZzZXRIZWlnaHQ7IC8vaGVpZ2h0IGZvciB0aGUgZGVmdWFsdCBmb250CiAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgIH0KCiAgICBkZXRlY3Rvci5kZXRlY3QgPSBmdW5jdGlvbihmb250KSB7CiAgICAgICAgdmFyIGRldGVjdGVkID0gZmFsc2UsIGluZGV4LCBtYXRjaGVkOwogICAgICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgICAgIHMuc3R5bGUuZm9udEZhbWlseSA9IGZvbnQgKyAnLCcgKyBiYXNlRm9udHNbaW5kZXhdOyAvLyBuYW1lIG9mIHRoZSBmb250IGFsb25nIHdpdGggdGhlIGJhc2UgZm9udCBmb3IgZmFsbGJhY2suCiAgICAgICAgICAgIGguYXBwZW5kQ2hpbGQocyk7CiAgICAgICAgICAgIG1hdGNoZWQgPSAocy5vZmZzZXRXaWR0aCAhPT0gZGVmYXVsdFdpZHRoW2Jhc2VGb250c1tpbmRleF1dIHx8IHMub2Zmc2V0SGVpZ2h0ICE9PSBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dKTsKICAgICAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgICAgICAgICAgZGV0ZWN0ZWQgPSBkZXRlY3RlZCB8fCBtYXRjaGVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGV0ZWN0ZWQ7CiAgICB9OwoKICAgIHJldHVybiBkZXRlY3RvcjsKfSgpKTsKLyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAxNCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGNvbGxlY3RTY3JlZW5JbmZvID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBzY3JlZW5JbmZvID0ge307CiAgICAgICAgaWYgKHNjcmVlbikgewogICAgICAgICAgICBpZiAoc2NyZWVuLndpZHRoKSB7CiAgICAgICAgICAgICAgICBzY3JlZW5JbmZvLnNjcmVlbldpZHRoID0gc2NyZWVuLndpZHRoOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLmhlaWdodCkgewogICAgICAgICAgICAgICAgc2NyZWVuSW5mby5zY3JlZW5IZWlnaHQgPSBzY3JlZW4uaGVpZ2h0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLnBpeGVsRGVwdGgpIHsKICAgICAgICAgICAgICAgIHNjcmVlbkluZm8uc2NyZWVuQ29sb3VyRGVwdGggPSBzY3JlZW4ucGl4ZWxEZXB0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3Qgc2NyZWVuIGluZm9ybWF0aW9uLiBzY3JlZW4gaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzY3JlZW5JbmZvOwogICAgfSwKICAgIGNvbGxlY3RUaW1lem9uZUluZm8gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHRpbWV6b25lSW5mbyA9ICB7fSwgb2Zmc2V0ID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOwoKICAgICAgICBpZiAob2Zmc2V0KSB7CiAgICAgICAgICAgIHRpbWV6b25lSW5mby50aW1lem9uZSA9IG9mZnNldDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbm5vdCBjb2xsZWN0IHRpbWV6b25lIGluZm9ybWF0aW9uLiB0aW1lem9uZSBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aW1lem9uZUluZm87CiAgICB9LAogICAgY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbyA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgaWYgKG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IucGx1Z2lucykgewogICAgICAgICAgICB2YXIgcGx1Z2luc0luZm8gPSB7fSwgaSwgcGx1Z2lucyA9IG5hdmlnYXRvci5wbHVnaW5zOwogICAgICAgICAgICBwbHVnaW5zSW5mby5pbnN0YWxsZWRQbHVnaW5zID0gIiI7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGx1Z2luc0luZm8uaW5zdGFsbGVkUGx1Z2lucyA9IHBsdWdpbnNJbmZvLmluc3RhbGxlZFBsdWdpbnMgKyBwbHVnaW5zW2ldLmZpbGVuYW1lICsgIjsiOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcGx1Z2luc0luZm87CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBicm93c2VyIHBsdWdpbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLnBsdWdpbnMgaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgICAgIHJldHVybiB7fTsKICAgICAgICB9CgogICAgfSwKLy8gR2V0dGluZyBnZW9sb2NhdGlvbiB0YWtlcyBzb21lIHRpbWUgYW5kIGlzIGRvbmUgYXN5bmNocm9ub3VzbHksIGhlbmNlIG5lZWQgYSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgb25jZSBnZW9sb2NhdGlvbiBpcyByZXRyaWV2ZWQuCiAgICBjb2xsZWN0R2VvbG9jYXRpb25JbmZvID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIGdlb2xvY2F0aW9uSW5mbyA9IHt9LAogICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgICAgICAgICAgZ2VvbG9jYXRpb25JbmZvLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGU7CiAgICAgICAgICAgICAgICBnZW9sb2NhdGlvbkluZm8ubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGU7CiAgICAgICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgICAgICB9LCBlcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3QgZ2VvbG9jYXRpb24gaW5mb3JtYXRpb24uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVycm9yLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgY2FsbGJhY2soZ2VvbG9jYXRpb25JbmZvKTsKICAgICAgICAgICAgfTsKICAgICAgICBpZiAobmF2aWdhdG9yICYmIG5hdmlnYXRvci5nZW9sb2NhdGlvbikgewogICAgICAgICAgICAvLyBOQjogSWYgdXNlciBjaG9vc2VzICdOb3Qgbm93JyBvbiBGaXJlZm94IG5laXRoZXIgY2FsbGJhY2sgZ2V0cyBjYWxsZWQKICAgICAgICAgICAgLy8gICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NTUzMwogICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBnZW9sb2NhdGlvbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgIH0KICAgIH0sCiAgICBjb2xsZWN0QnJvd3NlckZvbnRzSW5mbyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZm9udHNJbmZvID0ge30sIGksIGZvbnRzTGlzdCA9IFsiY3Vyc2l2ZSIsIm1vbm9zcGFjZSIsInNlcmlmIiwic2Fucy1zZXJpZiIsImZhbnRhc3kiLCJkZWZhdWx0IiwiQXJpYWwiLCJBcmlhbCBCbGFjayIsCiAgICAgICAgICAgICJBcmlhbCBOYXJyb3ciLCJBcmlhbCBSb3VuZGVkIE1UIEJvbGQiLCJCb29rbWFuIE9sZCBTdHlsZSIsIkJyYWRsZXkgSGFuZCBJVEMiLCJDZW50dXJ5IiwiQ2VudHVyeSBHb3RoaWMiLAogICAgICAgICAgICAiQ29taWMgU2FucyBNUyIsIkNvdXJpZXIiLCJDb3VyaWVyIE5ldyIsIkdlb3JnaWEiLCJHZW50aXVtIiwiSW1wYWN0IiwiS2luZyIsIkx1Y2lkYSBDb25zb2xlIiwiTGFsaXQiLAogICAgICAgICAgICAiTW9kZW5hIiwiTW9ub3R5cGUgQ29yc2l2YSIsIlBhcHlydXMiLCJUYWhvbWEiLCJUZVgiLCJUaW1lcyIsIlRpbWVzIE5ldyBSb21hbiIsIlRyZWJ1Y2hldCBNUyIsIlZlcmRhbmEiLAogICAgICAgICAgICAiVmVyb25hIl07CiAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gIiI7CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBmb250c0xpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGZvbnREZXRlY3Rvci5kZXRlY3QoZm9udHNMaXN0W2ldKSkgewogICAgICAgICAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzICsgZm9udHNMaXN0W2ldICsgIjsiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb250c0luZm87CiAgICB9LAogICAgZGV2aWNlUHJpbnQgPSB7fTsKCmRldmljZVByaW50LnNjcmVlbiA9IGNvbGxlY3RTY3JlZW5JbmZvKCk7CmRldmljZVByaW50LnRpbWV6b25lID0gY29sbGVjdFRpbWV6b25lSW5mbygpOwpkZXZpY2VQcmludC5wbHVnaW5zID0gY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbygpOwpkZXZpY2VQcmludC5mb250cyA9IGNvbGxlY3RCcm93c2VyRm9udHNJbmZvKCk7CgppZiAobmF2aWdhdG9yLnVzZXJBZ2VudCkgewogICAgZGV2aWNlUHJpbnQudXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKfQppZiAobmF2aWdhdG9yLmFwcE5hbWUpIHsKICAgIGRldmljZVByaW50LmFwcE5hbWUgPSBuYXZpZ2F0b3IuYXBwTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcENvZGVOYW1lKSB7CiAgICBkZXZpY2VQcmludC5hcHBDb2RlTmFtZSA9IG5hdmlnYXRvci5hcHBDb2RlTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcFZlcnNpb24pIHsKICAgIGRldmljZVByaW50LmFwcFZlcnNpb24gPSBuYXZpZ2F0b3IuYXBwVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbikgewogICAgZGV2aWNlUHJpbnQuYXBwTWlub3JWZXJzaW9uID0gbmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmJ1aWxkSUQpIHsKICAgIGRldmljZVByaW50LmJ1aWxkSUQgPSBuYXZpZ2F0b3IuYnVpbGRJRDsKfQppZiAobmF2aWdhdG9yLnBsYXRmb3JtKSB7CiAgICBkZXZpY2VQcmludC5wbGF0Zm9ybSA9IG5hdmlnYXRvci5wbGF0Zm9ybTsKfQppZiAobmF2aWdhdG9yLmNwdUNsYXNzKSB7CiAgICBkZXZpY2VQcmludC5jcHVDbGFzcyA9IG5hdmlnYXRvci5jcHVDbGFzczsKfQppZiAobmF2aWdhdG9yLm9zY3B1KSB7CiAgICBkZXZpY2VQcmludC5vc2NwdSA9IG5hdmlnYXRvci5vc2NwdTsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3QpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3QgPSBuYXZpZ2F0b3IucHJvZHVjdDsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3RTdWIpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3RTdWIgPSBuYXZpZ2F0b3IucHJvZHVjdFN1YjsKfQppZiAobmF2aWdhdG9yLnZlbmRvcikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yID0gbmF2aWdhdG9yLnZlbmRvcjsKfQppZiAobmF2aWdhdG9yLnZlbmRvclN1YikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yU3ViID0gbmF2aWdhdG9yLnZlbmRvclN1YjsKfQppZiAobmF2aWdhdG9yLmxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5sYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnVzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQudXNlckxhbmd1YWdlID0gbmF2aWdhdG9yLnVzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQuYnJvd3Nlckxhbmd1YWdlID0gbmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnN5c3RlbUxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5zeXN0ZW1MYW5ndWFnZSA9IG5hdmlnYXRvci5zeXN0ZW1MYW5ndWFnZTsKfQoKLy8gQXR0ZW1wdCB0byBjb2xsZWN0IGdlby1sb2NhdGlvbiBpbmZvcm1hdGlvbiBhbmQgcmV0dXJuIHRoaXMgd2l0aCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgovLyBPdGhlcndpc2UsIGlmIGdlby1sb2NhdGlvbiBmYWlscyBvciB0YWtlcyBsb25nZXIgdGhhbiAzMCBzZWNvbmRzLCBhdXRvLXN1Ym1pdCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgphdXRvU3VibWl0RGVsYXkgPSAzMDAwMDsKb3V0cHV0LnZhbHVlID0gSlNPTi5zdHJpbmdpZnkoZGV2aWNlUHJpbnQpOwpjb2xsZWN0R2VvbG9jYXRpb25JbmZvKGZ1bmN0aW9uKGdlb2xvY2F0aW9uSW5mbykgewogICAgZGV2aWNlUHJpbnQuZ2VvbG9jYXRpb24gPSBnZW9sb2NhdGlvbkluZm87CiAgICBvdXRwdXQudmFsdWUgPSBKU09OLnN0cmluZ2lmeShkZXZpY2VQcmludCk7CiAgICBzdWJtaXQoKTsKfSk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1467, + "text": "{\"result\":[{\"_id\":\"f203173e-bceb-4e8e-8bde-52f2616b7278\",\"name\":\"pwdlessSet.js\",\"description\":\"null\",\"script\":\"aWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwpzZXRDdXN0b21BdHRyVmFsdWUoImN1c3RvbV9wYXNzd29yZGxlc3MiLCB0cnVlKTsKaWRSZXBvc2l0b3J5LnNldEF0dHJpYnV0ZShpZCwgImFzc2lnbmVkRGFzaGJvYXJkIixbInJlZ2lzdGVyV2ViQXV0aE5EZXZpY2UiLCJzZXRVc2VybmFtZUxlc3MiLCJwZWVyUmVjb3ZlcnlFbWFpbCIsInBlZXJSZWNvdmVyeTFGQSIsICJyZWdpc3RlclB1c2giXSk7CgoKICAgIApvdXRjb21lID0gInRydWUiOwoKZnVuY3Rpb24gc2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSxjdXN0b21BdHRyVmFsdWUpCnsKICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCAnZnItaWRtLWN1c3RvbS1hdHRycycpOwogIGlmIChmcklkbUN1c3RvbUF0dHJpYnV0ZXMpCiAgewogICAgdmFyIGZySWRtQ3VzdG9tQXR0cmlidXRlc09iamVjdCA9IEpTT04ucGFyc2UoU3RyaW5nKGZySWRtQ3VzdG9tQXR0cmlidXRlcy50b0FycmF5KClbMF0pKTsKICAgIGZySWRtQ3VzdG9tQXR0cmlidXRlc09iamVjdFtjdXN0b21BdHRyTmFtZV0gPSBjdXN0b21BdHRyVmFsdWU7CiAgICB2YXIganNvbl9zdHJpbmcgPSBKU09OLnN0cmluZ2lmeShmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QpOwogICAgaWRSZXBvc2l0b3J5LnNldEF0dHJpYnV0ZShpZCwgImZyLWlkbS1jdXN0b20tYXR0cnMiLFtqc29uX3N0cmluZ10pOwogIH0KfQo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -2412,18 +2544,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "content-length", + "value": "1467" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:22 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -2431,20 +2571,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:23.111Z", - "time": 81, + "startedDateTime": "2024-06-19T21:28:26.953Z", + "time": 54, "timings": { "blocked": -1, "connect": -1, @@ -2452,11 +2588,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 81 + "wait": 54 } }, { - "_id": "e81a7568b2f332dd73d17af7613483cf", + "_id": "528d8c0c709e13fdba334c9c6a84a810", "_order": 0, "cache": {}, "request": { @@ -2468,16 +2604,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -2487,28 +2623,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1645, + "headersSize": 1697, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Salesforce Profile Normalization\"" + "value": "name eq \"Normalized Profile to Managed User\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Salesforce%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Normalized%20Profile%20to%20Managed%20User%22" }, "response": { - "bodySize": 1564, + "bodySize": 3150, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1564, - "text": "{\"result\":[{\"_id\":\"312e951f-70c5-49d2-a9ae-93aef909d5df\",\"name\":\"Salesforce Profile Normalization\",\"description\":\"Normalizes raw profile data from Salesforce\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZ2l2ZW5fbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmZhbWlseV9uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnBpY3R1cmUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJsb2NhbGUiLCByYXdQcm9maWxlLnpvbmVJbmZvKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 3150, + "text": "{\"result\":[{\"_id\":\"58c824ae-84ed-4724-82cd-db128fc3f6c\",\"name\":\"Normalized Profile to Managed User\",\"description\":\"Converts a normalized social profile into a managed user\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgbWFuYWdlZFVzZXIgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlck5hbWUiLCBub3JtYWxpemVkUHJvZmlsZS51c2VybmFtZSkpKQoKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgicG9zdGFsQWRkcmVzcyIsIG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MpCmlmIChub3JtYWxpemVkUHJvZmlsZS5hZGRyZXNzTG9jYWxpdHkuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgiY2l0eSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NMb2NhbGl0eSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24uaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgic3RhdGVQcm92aW5jZSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24pCmlmIChub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInBvc3RhbENvZGUiLCBub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlKQppZiAobm9ybWFsaXplZFByb2ZpbGUuY291bnRyeS5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KCJjb3VudHJ5Iiwgbm9ybWFsaXplZFByb2ZpbGUuY291bnRyeSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBob25lLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInRlbGVwaG9uZU51bWJlciIsIG5vcm1hbGl6ZWRQcm9maWxlLnBob25lKQoKLy8gaWYgdGhlIGdpdmVuTmFtZSBhbmQgZmFtaWx5TmFtZSBpcyBudWxsIG9yIGVtcHR5Ci8vIHRoZW4gYWRkIGEgYm9vbGVhbiBmbGFnIHRvIHRoZSBzaGFyZWQgc3RhdGUgdG8gaW5kaWNhdGUgbmFtZXMgYXJlIG5vdCBwcmVzZW50Ci8vIHRoaXMgY291bGQgYmUgdXNlZCBlbHNld2hlcmUKLy8gZm9yIGVnLiB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gYSBzY3JpcHRlZCBkZWNpc2lvbiBub2RlIHRvIGJ5LXBhc3MgcGF0Y2hpbmcKLy8gdGhlIHVzZXIgb2JqZWN0IHdpdGggYmxhbmsgdmFsdWVzIHdoZW4gZ2l2ZW5OYW1lICBhbmQgZmFtaWx5TmFtZSBpcyBub3QgcHJlc2VudApib29sZWFuIG5vR2l2ZW5OYW1lID0gbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmFzU3RyaW5nKCk/LnRyaW0oKSkKYm9vbGVhbiBub0ZhbWlseU5hbWUgPSBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZmFtaWx5TmFtZS5hc1N0cmluZygpPy50cmltKCkpCnNoYXJlZFN0YXRlLnB1dCgibmFtZUVtcHR5T3JOdWxsIiwgbm9HaXZlbk5hbWUgJiYgbm9GYW1pbHlOYW1lKQoKcmV0dXJuIG1hbmFnZWRVc2VyCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -2558,20 +2698,24 @@ }, { "name": "content-length", - "value": "1564" + "value": "3150" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:22 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -2581,14 +2725,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:23.205Z", - "time": 58, + "startedDateTime": "2024-06-19T21:28:27.012Z", + "time": 56, "timings": { "blocked": -1, "connect": -1, @@ -2596,11 +2740,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 58 + "wait": 56 } }, { - "_id": "d8b36e9647bacb5fb5169afeae53598f", + "_id": "6b041cdd91b1a940e2f050d4a2c575a6", "_order": 0, "cache": {}, "request": { @@ -2612,16 +2756,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -2631,28 +2775,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1615, + "headersSize": 1668, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"shared\"" + "value": "name eq \"Test-Script-1\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22shared%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Test-Script-1%22" }, "response": { - "bodySize": 814, + "bodySize": 854, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 814, - "text": "{\"result\":[{\"_id\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"name\":\"shared\",\"description\":\"set the same shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdzaGFyZWRWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzaGFyZWQgYWNyb3NzIGFsbCBuZXN0ZWQgam91cm5leXMuIEl0IGNvbnRhaW5zIGFuIGluZGljYXRvciBpbiB3aGljaCBsZXZlbCBpdCB3YXMgbGFzdCBzZXQuJyk7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 854, + "text": "{\"result\":[{\"_id\":\"59f84396-71e4-4c1d-a6ae-c4fc624d9752\",\"name\":\"Test-Script-1\",\"description\":\"A test script that uses an environment variable and a secret variable\",\"script\":\"Ly8gQ2FsY3VsYXRlIEU9bWNeMiB1c2luZyBtID0gNDIKY29uc3QgYzIgPSBzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi50ZXN0LnZhcmlhYmxlLmxpZ2h0Iik7CmNvbnNvbGUubG9nKGBFID0gJHs0MiAqIGMyICogYzJ9YCk7Ci8vIENhbGN1bGF0ZSB0aGUgYXJlYSBvZiBhIGNpcmNsZSB3aXRoIHJhZGl1cyByID0gNDIKY29uc3QgcGkgPSBwYXJzZUZsb2F0KHN5c3RlbUVudi5nZXRQcm9wZXJ0eSgiZXN2LnRlc3Quc2VjcmV0LnBpIikpOwpjb25zb2xlLmxvZyhgQSA9ICR7cGkgKiA0MiAqIDQyfWApOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -2702,20 +2850,24 @@ }, { "name": "content-length", - "value": "814" + "value": "854" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:23 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -2725,14 +2877,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 773, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:23.269Z", - "time": 63, + "startedDateTime": "2024-06-19T21:28:27.074Z", + "time": 56, "timings": { "blocked": -1, "connect": -1, @@ -2740,11 +2892,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 63 + "wait": 56 } }, { - "_id": "d03f9e8a49c3663717f6f44885052a82", + "_id": "9ae5250c7c369e659926259583ec72fe", "_order": 0, "cache": {}, "request": { @@ -2756,16 +2908,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -2775,28 +2927,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1639, + "headersSize": 1669, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Okta Profile Normalization\"" + "value": "name eq \"hasWebAuthN.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Okta%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22hasWebAuthN.js%22" }, "response": { - "bodySize": 1579, + "bodySize": 776, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1579, - "text": "{\"result\":[{\"_id\":\"6325cf19-a49b-471e-8d26-7e4df76df0e2\",\"name\":\"Okta Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJPa3RhIHJhd1Byb2ZpbGU6ICIrcmF3UHJvZmlsZSkKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5wcmVmZXJyZWRfdXNlcm5hbWUpKSk=\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 776, + "text": "{\"result\":[{\"_id\":\"29be3f4a-cf40-4aca-8fe3-de40c9a801dd\",\"name\":\"hasWebAuthN.js\",\"description\":\"null\",\"script\":\"dmFyIHdlYmF1dGhuRGV2aWNlUHJvZmlsZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHNoYXJlZFN0YXRlLmdldCgiX2lkIiksICJ3ZWJhdXRobkRldmljZVByb2ZpbGVzIikudG9TdHJpbmcoKTsKc2hhcmVkU3RhdGUucHV0KCJkZWJ1ZyIsd2ViYXV0aG5EZXZpY2VQcm9maWxlcyk7CmlmKHdlYmF1dGhuRGV2aWNlUHJvZmlsZXMubGVuZ3RoPjIpIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7Cn0KZWxzZSB7CiAgb3V0Y29tZSA9ICJmYWxzZSI7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -2846,20 +3002,24 @@ }, { "name": "content-length", - "value": "1579" + "value": "776" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:23 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -2869,14 +3029,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:23.340Z", - "time": 75, + "startedDateTime": "2024-06-19T21:28:27.135Z", + "time": 54, "timings": { "blocked": -1, "connect": -1, @@ -2884,11 +3044,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 75 + "wait": 54 } }, { - "_id": "528d8c0c709e13fdba334c9c6a84a810", + "_id": "0b5bdd5efa8fa86e894e34cbb0737401", "_order": 0, "cache": {}, "request": { @@ -2900,16 +3060,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -2919,28 +3079,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1651, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Normalized Profile to Managed User\"" + "value": "name eq \"FrodoTestScript3\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Normalized%20Profile%20to%20Managed%20User%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript3%22" }, "response": { - "bodySize": 3150, + "bodySize": 1131, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 3150, - "text": "{\"result\":[{\"_id\":\"58c824ae-84ed-4724-82cd-db128fc3f6c\",\"name\":\"Normalized Profile to Managed User\",\"description\":\"Converts a normalized social profile into a managed user\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgbWFuYWdlZFVzZXIgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlck5hbWUiLCBub3JtYWxpemVkUHJvZmlsZS51c2VybmFtZSkpKQoKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgicG9zdGFsQWRkcmVzcyIsIG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MpCmlmIChub3JtYWxpemVkUHJvZmlsZS5hZGRyZXNzTG9jYWxpdHkuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgiY2l0eSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NMb2NhbGl0eSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24uaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgic3RhdGVQcm92aW5jZSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24pCmlmIChub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInBvc3RhbENvZGUiLCBub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlKQppZiAobm9ybWFsaXplZFByb2ZpbGUuY291bnRyeS5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KCJjb3VudHJ5Iiwgbm9ybWFsaXplZFByb2ZpbGUuY291bnRyeSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBob25lLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInRlbGVwaG9uZU51bWJlciIsIG5vcm1hbGl6ZWRQcm9maWxlLnBob25lKQoKLy8gaWYgdGhlIGdpdmVuTmFtZSBhbmQgZmFtaWx5TmFtZSBpcyBudWxsIG9yIGVtcHR5Ci8vIHRoZW4gYWRkIGEgYm9vbGVhbiBmbGFnIHRvIHRoZSBzaGFyZWQgc3RhdGUgdG8gaW5kaWNhdGUgbmFtZXMgYXJlIG5vdCBwcmVzZW50Ci8vIHRoaXMgY291bGQgYmUgdXNlZCBlbHNld2hlcmUKLy8gZm9yIGVnLiB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gYSBzY3JpcHRlZCBkZWNpc2lvbiBub2RlIHRvIGJ5LXBhc3MgcGF0Y2hpbmcKLy8gdGhlIHVzZXIgb2JqZWN0IHdpdGggYmxhbmsgdmFsdWVzIHdoZW4gZ2l2ZW5OYW1lICBhbmQgZmFtaWx5TmFtZSBpcyBub3QgcHJlc2VudApib29sZWFuIG5vR2l2ZW5OYW1lID0gbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmFzU3RyaW5nKCk/LnRyaW0oKSkKYm9vbGVhbiBub0ZhbWlseU5hbWUgPSBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZmFtaWx5TmFtZS5hc1N0cmluZygpPy50cmltKCkpCnNoYXJlZFN0YXRlLnB1dCgibmFtZUVtcHR5T3JOdWxsIiwgbm9HaXZlbk5hbWUgJiYgbm9GYW1pbHlOYW1lKQoKcmV0dXJuIG1hbmFnZWRVc2VyCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1131, + "text": "{\"result\":[{\"_id\":\"3b2f6836-184c-4ee9-8a1d-557cb01837a5\",\"name\":\"FrodoTestScript3\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -2990,20 +3154,24 @@ }, { "name": "content-length", - "value": "3150" + "value": "1131" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:23 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -3013,14 +3181,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:23.420Z", - "time": 57, + "startedDateTime": "2024-06-19T21:28:27.194Z", + "time": 54, "timings": { "blocked": -1, "connect": -1, @@ -3028,11 +3196,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 57 + "wait": 54 } }, { - "_id": "1e5d993ae7967c35c67920283d9c1839", + "_id": "5b160758e77e5641a3f36258878baa00", "_order": 0, "cache": {}, "request": { @@ -3044,16 +3212,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -3063,28 +3231,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1613, + "headersSize": 1669, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"mode\"" + "value": "name eq \"timerButton.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22mode%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22timerButton.js%22" }, "response": { - "bodySize": 2093, + "bodySize": 3752, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 2093, - "text": "{\"result\":[{\"_id\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"name\":\"mode\",\"description\":\"Check if mode has already been set.\",\"script\":\"LyogbW9kZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDb2xsZWN0IG1vZGUgaWYgbm90IGFscmVhZHkgc2V0IGFuZCBzZXQgb3V0Y29tZSB0byBtb2RlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSAnc2hhcmVkIGFuZCBsZXZlbCcKICogLSAnc2hhcmVkIG9ubHknCiAqIC0gJ2xldmVsIG9ubHknCiAqIC0gJ25vbmUnCiAqLwooZnVuY3Rpb24gKCkgewogIHZhciBtb2RlID0gbm9kZVN0YXRlLmdldCgnbW9kZScpOwogIGlmIChtb2RlKSB7CiAgICBvdXRjb21lID0gbW9kZS5hc1N0cmluZygpOwogICAgdmFyIGxldmVsID0gbm9kZVN0YXRlLmdldCgnbGV2ZWwnKS5hc0ludGVnZXIoKSArIDE7CiAgICBsb2dnZXIuZXJyb3IoJ21vZGU6IG1vZGU9JyArIG1vZGUuYXNTdHJpbmcoKSArICcsIGxldmVsPScgKyBsZXZlbCk7CiAgICBzaGFyZWRTdGF0ZS5wdXQoJ2xldmVsJywgbGV2ZWwpOwogIH0KICBlbHNlIHsKICAgIHZhciBjaG9pY2VzID0gWydzaGFyZWQgYW5kIGxldmVsJywgJ3NoYXJlZCBvbmx5JywgJ2xldmVsIG9ubHknLCAnbm9uZSddOwogIAogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DaG9pY2VDYWxsYmFjawogICAgKQoKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKFsKICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soJ0Nob29zZSB0ZXN0IG1vZGUnLCBjaG9pY2VzLCAwLCBmYWxzZSkKICAgICAgXSkuYnVpbGQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBjaG9pY2UgPSBwYXJzZUludChjYWxsYmFja3MuZ2V0KDApLmdldFNlbGVjdGVkSW5kZXhlcygpWzBdKTsKICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgnbW9kZScsIGNob2ljZXNbY2hvaWNlXSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2xldmVsJywgMCk7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKGNob2ljZXNbY2hvaWNlXSkuYnVpbGQoKTsKICAgIH0KICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 3752, + "text": "{\"result\":[{\"_id\":\"13aaf8de-cd8c-4b0e-9167-39ca1fb590a4\",\"name\":\"timerButton.js\",\"description\":\"null\",\"script\":\"Ly8gVGltZXIgQnV0dG9uIG5vZGUKLy8gT3V0Y29tZXM6IFsgInRydWUiLCAidGltZXIiIF0KCgpERUxBWT0xMDsKTUVTU0FHRT0iU2tpcCB0byB5b3VyIHByZWZlcnJlZCBtZXRob2QuLi4gIjsKQlVUVE9OVEVYVD0iU2VsZWN0IGFub3RoZXIgbG9naW4gbWV0aG9kIjsKCnZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5OYW1lQ2FsbGJhY2ssCiAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKKQoKZnVuY3Rpb24gY3JlYXRlU2NyaXB0KCkgewogICAgcmV0dXJuIFN0cmluZygiIFxuXAogICAgICAgIHZhciBDT1VOVCA9ICIgKyBERUxBWSArICI7IFxuXAogICAgICAgIGZ1bmN0aW9uIGdvKG9icykgeyBcblwKICAgICAgICAgICAgY29uc3QgcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtdnYtYXM9XCJEVU1NWVwiXScpWzBdOyBcblwKICAgICAgICAgICAgaWYgKHApIHsgXG5cCiAgICAgICAgICAgICAgICBwLmhpZGRlbiA9IHRydWU7IFxuXAogICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbGFiZWxbZm9yPScgKyBwLmlkICsgJ10nKS5oaWRkZW4gPSB0cnVlOyBcblwKICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignYnV0dG9uW3R5cGU9c3VibWl0XScpLmlubmVyVGV4dCA9ICciICsgQlVUVE9OVEVYVCArICInOyBcblwKICAgICAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IFxuXAogICAgICAgICAgICAgICAgYi5jbGFzc0xpc3QuYWRkKFwiYnRuXCIsIFwibXQtM1wiLCBcImJ0bi1zZWNvbmRhcnlcIik7IFxuXAogICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSAnIiArIE1FU1NBR0UgKyAiJyArIENPVU5UICsgJ3MnOyBcblwKICAgICAgICAgICAgICAgIGIub25jbGljayA9IGZ1bmN0aW9uKCkgeyBwLnZhbHVlPSdfX19USU1FX19fJzsgcC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnKSk7IH07IFxuXAogICAgICAgICAgICAgICAgcC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShiLCBwLm5leHRTaWJsaW5nKTsgXG5cCiAgICAgICAgICAgICAgICB2YXIgdCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgeyBcblwKICAgICAgICAgICAgICAgICAgICBpZiAoQ09VTlQgPT0gMSkgeyBcblwKICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0KTsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgIHAudmFsdWU9J19fX1RJTUVfX18nOyBwLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcpKTsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dpbkJ1dHRvbl8wJykuY2xpY2soKTsgfSwgMjAwKTsgXG5cCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgIENPVU5ULS07IFxuXAogICAgICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9ICciICsgTUVTU0FHRSArICInICsgQ09VTlQgKyAncyc7IFxuXAogICAgICAgICAgICAgICAgICAgIH0gXG5cCiAgICAgICAgICAgICAgICB9LCAxMDAwICk7IFxuXAogICAgICAgICAgICAgICAgaWYgKG9icykgb2JzLmRpc2Nvbm5lY3QoKTsgXG5cCiAgICAgICAgICAgICAgICByZXR1cm47IFxuXAogICAgICAgICAgICB9IFxuXAogICAgICAgIH0gXG5cCiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtdnYtYXM9XCJEVU1NWVwiXScpWzBdKSBnbygpOyBcblwKICAgICAgICBlbHNlIHsgXG5cCiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucywgb2JzKSA9PiB7IGdvKG9icyk7IH0pOyBcblwKICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7IFxuXAogICAgICAgIH0gXG5cCiAgICAiKTsKfQoKCmlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKGNyZWF0ZVNjcmlwdCgpKSwKICAgICAgICBuZXcgZnIuTmFtZUNhbGxiYWNrKCJEVU1NWSIpCiAgICApLmJ1aWxkKCkKfSBlbHNlIHsKICAgIHZhciBjYiA9IGNhbGxiYWNrcy5nZXQoMSkuZ2V0TmFtZSgpOwogICAgaWYgKGNiID09PSAiX19fVElNRV9fXyIpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidGltZXIiKS5idWlsZCgpOwogICAgfSBlbHNlIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7CiAgICB9Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -3134,20 +3306,24 @@ }, { "name": "content-length", - "value": "2093" + "value": "3752" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:23 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -3157,14 +3333,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:23.486Z", - "time": 60, + "startedDateTime": "2024-06-19T21:28:27.252Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -3172,11 +3348,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 60 + "wait": 52 } }, { - "_id": "97e365ada37a9af61562e96f36b8cb1a", + "_id": "196330af484d2bef6f816b5f21b41a08", "_order": 0, "cache": {}, "request": { @@ -3188,16 +3364,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -3207,28 +3383,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1631, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"OIDC Claims Script\"" + "value": "name eq \"MultilevelSelect\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OIDC%20Claims%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22MultilevelSelect%22" }, "response": { - "bodySize": 41550, + "bodySize": 4634, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 41550, - "text": "{\"result\":[{\"_id\":\"36863ffb-40ec-48b9-94b1-9a99f71cc3b5\",\"name\":\"OIDC Claims Script\",\"description\":\"Default global script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 4634, + "text": "{\"result\":[{\"_id\":\"95143d29-e417-49a8-a86c-a3b4cf8fd8ed\",\"name\":\"MultilevelSelect\",\"description\":\"null\",\"script\":\"CmZ1bmN0aW9uIGdldENvdW50cmllcyhkYXRhKSB7CiAgdmFyIGMgPSBbXTsKICBkYXRhLmZvckVhY2goZT0+Yy5wdXNoKGUubmFtZSkpOwogIHJldHVybiBjOwp9CgpmdW5jdGlvbiBnZXRTdGF0ZXMoZGF0YSwgYykgewogIHZhciBzID0gW107CiAgZGF0YVtjXS5zdGF0ZXMuZm9yRWFjaChlPT5zLnB1c2goZS5uYW1lKSk7CiAgcmV0dXJuIHM7Cn0KCmZ1bmN0aW9uIGdldENpdGllcyhkYXRhLCBjLCBzKSB7CiAgdmFyIGNpID0gW107CiAgZGF0YVtjXS5zdGF0ZXNbc10uY2l0aWVzLmZvckVhY2goZT0+Y2kucHVzaChlLm5hbWUpKTsKICByZXR1cm4gY2k7Cn0KCmZ1bmN0aW9uIGdldERhdGEoKSB7CiAgdmFyIHJlcXVlc3RPcHRpb25zID0gewogICAgbWV0aG9kOiAnR0VUJywKICB9CgogIHZhciByZXF1ZXN0VVJMID0gJ2h0dHBzOi8vZ2lzdC5naXRodWJ1c2VyY29udGVudC5jb20vYXRvbWljc2FtdXJhaS80OGM4OTFlOGE3OGU4YWEzNDBjMGZmZjk2ZDQ4MDZmNC9yYXcvOTk0NjFmZjdjZDNjYTFiMGI3YTU1MTk0MjkxNTM1N2UzYTQzOGFiNS9jb3VudHJ5LXN0YXRlLWNpdHkuanNvbic7CiAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3RVUkwsIHJlcXVlc3RPcHRpb25zKS5nZXQoKTsKCiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7CiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXNwb25zZS50ZXh0KCkpOwogIH0gZWxzZSB7CiAgICBudWxsOwogIH0KfQoKKGZ1bmN0aW9uICgpIHsKICB0cnkgewogICAgdmFyIGRhdGEgPSBnZXREYXRhKCk7CiAgICB2YXIgc3RhdGVzID0gW107CiAgICB2YXIgY2l0aWVzID0gW107CiAgICB2YXIgc2VsZWN0ZWRDb3VudHJ5ID0gMDsKICAgIHZhciBzZWxlY3RlZFN0YXRlID0gMDsKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIHNlbGVjdGVkQ291bnRyeSA9IG5vZGVTdGF0ZS5nZXQoJ3NlbGVjdGVkQ291bnRyeScpP3BhcnNlSW50KG5vZGVTdGF0ZS5nZXQoJ3NlbGVjdGVkQ291bnRyeScpKTowOwogICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNlbGVjdGVkIGNvdW50cnkge30nLCBzZWxlY3RlZENvdW50cnkpOwogICAgICBzZWxlY3RlZFN0YXRlID0gbm9kZVN0YXRlLmdldCgnc2VsZWN0ZWRTdGF0ZScpP3BhcnNlSW50KG5vZGVTdGF0ZS5nZXQoJ3NlbGVjdGVkU3RhdGUnKSk6MDsKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOwogICAgICBjYWxsYmFja3NCdWlsZGVyLmNob2ljZUNhbGxiYWNrKCdTZWxlY3QgY291bnRyeScsIGdldENvdW50cmllcyhkYXRhKSwgc2VsZWN0ZWRDb3VudHJ5LCBmYWxzZSk7CiAgICAgIHN0YXRlcyA9IGdldFN0YXRlcyhkYXRhLCBzZWxlY3RlZENvdW50cnkpOwogICAgICBjYWxsYmFja3NCdWlsZGVyLmNob2ljZUNhbGxiYWNrKCdTZWxlY3Qgc3RhdGUnLCBzdGF0ZXMsIHNlbGVjdGVkU3RhdGUsIGZhbHNlKTsKICAgICAgY2l0aWVzID0gZ2V0Q2l0aWVzKGRhdGEsIHNlbGVjdGVkQ291bnRyeSwgc2VsZWN0ZWRTdGF0ZSk7CiAgICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogaGVyZSAxJyk7CiAgICAgIGNpdGllcy5mb3JFYWNoKGU9PnsKICAgICAgICBjYWxsYmFja3NCdWlsZGVyLnRleHRPdXRwdXRDYWxsYmFjaygwLCBlKTsKICAgICAgfSk7CiAgICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogaGVyZSAyJyk7CiAgICAgIGNhbGxiYWNrc0J1aWxkZXIuY29uZmlybWF0aW9uQ2FsbGJhY2soMCwgWydVcGRhdGUnLCAnQ29tcGxldGUnXSwgMCk7CiAgICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogaGVyZSAzOiB7fScsIGNhbGxiYWNrcy5nZXRDaG9pY2VDYWxsYmFja3MoKS5zaXplKCkpOwogICAgICBjYWxsYmFja3MuZ2V0Q2hvaWNlQ2FsbGJhY2tzKCkuZ2V0KDApLnNldFNlbGVjdGVkSW5kZXgoc2VsZWN0ZWRDb3VudHJ5KTsKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBoZXJlIDQnKTsKICAgICAgY2FsbGJhY2tzLmdldENob2ljZUNhbGxiYWNrcygpLmdldCgxKS5zZXRTZWxlY3RlZEluZGV4KHNlbGVjdGVkU3RhdGUpOwoKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBoZXJlIDUnKTsKICAgICAgdmFyIHNjcmlwdCA9IGAKICAgICAgICAgIGZ1bmN0aW9uIHNob3dPcmdEZXRhaWxzKCkgewogICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3cmFwcGVyJyk7CiAgICAgICAgICAgIHdyYXBwZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmViZWdpbicsICc8ZGl2PnRlc3Q8L2Rpdj4nKTsKICAgICAgICAgIH0KICAgICAgICAgIHNldFRpbWVvdXQoc2hvd09yZ0RldGFpbHMsIDEwMCk7CiAgICAgICAgICBgOwogICAgICAvLyBjYWxsYmFja3NCdWlsZGVyLnNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpOwogICAgICAvLyBjYWxsYmFja3NCdWlsZGVyLmhpZGRlblZhbHVlQ2FsbGJhY2soJ3NlbGVjdGlvbkNoYW5nZWQnLCAnZmFsc2UnKQogICAgfSBlbHNlIHsKICAgICAgc2VsZWN0ZWRDb3VudHJ5ID0gY2FsbGJhY2tzLmdldENob2ljZUNhbGxiYWNrcygpLmdldCgwKVswXTsKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBzZXQgc2VsZWN0ZWQgY291bnRyeSB7fScsIHNlbGVjdGVkQ291bnRyeSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ3NlbGVjdGVkQ291bnRyeScsIHNlbGVjdGVkQ291bnRyeSk7CiAgICAgIHNlbGVjdGVkU3RhdGUgPSBjYWxsYmFja3MuZ2V0Q2hvaWNlQ2FsbGJhY2tzKCkuZ2V0KDEpWzBdOwogICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNldCBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOwogICAgICBub2RlU3RhdGUucHV0U2hhcmVkKCdzZWxlY3RlZFN0YXRlJywgc2VsZWN0ZWRTdGF0ZSk7CiAgICAgIGlmIChjYWxsYmFja3MuZ2V0Q29uZmlybWF0aW9uQ2FsbGJhY2tzKCkuZ2V0KDApID09IDApIHsKICAgICAgICBvdXRjb21lID0gJ3VwZGF0ZSc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3V0Y29tZSA9ICdjb21wbGV0ZSc7CiAgICAgIH0KICAgIH0KICB9IGNhdGNoIChlKSB7CiAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IGVycm9yOiB7fSAnICsgZSwgZSk7CiAgICBvdXRjb21lID0gJ2Vycm9yJwogIH0KfSkoKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -3276,18 +3456,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "content-length", + "value": "4634" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:23 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -3295,20 +3483,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:23.551Z", - "time": 80, + "startedDateTime": "2024-06-19T21:28:27.309Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -3316,11 +3500,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 80 + "wait": 53 } }, { - "_id": "edf9e88ab9f0d37cfef8cabce82b3b72", + "_id": "1a05176e811af286cab7cd2351a67f5d", "_order": 0, "cache": {}, "request": { @@ -3332,16 +3516,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -3351,28 +3535,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1640, + "headersSize": 1698, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Itsme Profile Normalization\"" + "value": "name eq \"GitHub Profile Normalization (VS)\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Itsme%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22GitHub%20Profile%20Normalization%20%28VS%29%22" }, "response": { - "bodySize": 1530, + "bodySize": 1570, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1530, - "text": "{\"result\":[{\"_id\":\"3d97c436-42c0-4dd0-a571-ea6f34f752b3\",\"name\":\"Itsme Profile Normalization\",\"description\":\"Normalizes raw profile data from Itsme\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKaW1wb3J0IG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUKCkpzb25WYWx1ZSBtYW5hZ2VkVXNlciA9IGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuc3ViKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmdpdmVuX25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5mYW1pbHlfbmFtZSksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQpyZXR1cm4gbWFuYWdlZFVzZXI=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1570, + "text": "{\"result\":[{\"_id\":\"23143919-6b78-40c3-b25e-beca19b229e0\",\"name\":\"GitHub Profile Normalization (VS)\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJHaXRIdWIgcmF3UHJvZmlsZTogIityYXdQcm9maWxlKQoKcmV0dXJuIGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZmlyc3RfbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3RfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5waWN0dXJlLmRhdGEudXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLmVtYWlsKSkp\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -3422,20 +3610,24 @@ }, { "name": "content-length", - "value": "1530" + "value": "1570" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:23 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -3445,14 +3637,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:23.646Z", - "time": 62, + "startedDateTime": "2024-06-19T21:28:27.366Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -3460,11 +3652,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 62 + "wait": 51 } }, { - "_id": "4bc9120f25a9243849c85a20a60e3c33", + "_id": "14aafb5a130f24e5f2a8a21ebc2a8630", "_order": 0, "cache": {}, "request": { @@ -3476,16 +3668,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -3495,28 +3687,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1682, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"ForgeRock Internal: OAuth2 Access Token Modification Script\"" + "value": "name eq \"resetPushBomb.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22ForgeRock%20Internal%3A%20OAuth2%20Access%20Token%20Modification%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22resetPushBomb.js%22" }, "response": { - "bodySize": 921, + "bodySize": 614, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 921, - "text": "{\"result\":[{\"_id\":\"c234ba0b-58a1-4cfd-9567-09edde980745\",\"name\":\"ForgeRock Internal: OAuth2 Access Token Modification Script\",\"description\":\"Internal token modification script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwovLyBTY3JpcHQgaXMgaW50ZW50aW9uYWxseSBlbXB0eQo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":1433147666269,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 614, + "text": "{\"result\":[{\"_id\":\"e387c5d7-ceb8-459e-87e6-d09eca512385\",\"name\":\"resetPushBomb.js\",\"description\":\"null\",\"script\":\"dmFyIF9pZCA9IHNoYXJlZFN0YXRlLmdldCgiX2lkIik7CnZhciBhdHRyaWJ1dGUgPSAiZnItYXR0ci1zdHIyIjsKCmlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoX2lkLCBhdHRyaWJ1dGUsWyIiXSk7CgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -3566,20 +3762,24 @@ }, { "name": "content-length", - "value": "921" + "value": "614" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:23 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -3589,14 +3789,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 773, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:23.717Z", - "time": 58, + "startedDateTime": "2024-06-19T21:28:27.422Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -3604,11 +3804,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 58 + "wait": 51 } }, { - "_id": "343bec8da4c8829e19f0445d0c0c21af", + "_id": "e3c2d193ee5e301889ca03246f232640", "_order": 0, "cache": {}, "request": { @@ -3620,16 +3820,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -3639,28 +3839,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1643, + "headersSize": 1685, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"OAuth2 Validate Scope Script\"" + "value": "name eq \"SAML2 IDP Adapter Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20Validate%20Scope%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22SAML2%20IDP%20Adapter%20Script%22" }, "response": { - "bodySize": 4642, + "bodySize": 7044, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 4642, - "text": "{\"result\":[{\"_id\":\"25e6c06d-cf70-473b-bd28-26931edc476b\",\"name\":\"OAuth2 Validate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Validation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgdmFsaWRhdGVzIHRoZSByZXF1ZXN0ZWQgc2NvcGVzIGFnYWluc3QgdGhlIGFsbG93ZWQgc2NvcGVzLgogKiBJZiBubyBzY29wZXMgYXJlIHJlcXVlc3RlZCwgZGVmYXVsdCBzY29wZXMgYXJlIGFzc3VtZWQuCiAqIFRoZSBzY3JpcHQgaGFzIGZvdXIgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgZGlmZmVyZW50IE9BdXRoMiBmbG93czoKICogICAgICAtIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlCiAqICAgICAgLSB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUKICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHJlcXVlc3RlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgVGhlIHNldCBvZiByZXF1ZXN0ZWQgc2NvcGVzLgogKiBkZWZhdWx0U2NvcGVzIC0gU2V0PFN0cmluZz4gKDEpLgogKiAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBkZWZhdWx0IHNjb3Blcy4KICogYWxsb3dlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgYWxsb3dlZCBzY29wZXMuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIGRlYnVnIGxvZ2dlciBpbnN0YW5jZToKICogICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgICAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9BVVRIMl9WQUxJREFURV9TQ09QRQogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKgogKiBUaHJvd3MgSW52YWxpZFNjb3BlRXhjZXB0aW9uOgogKiAgICAgIC0gaWYgdGhlcmUgYXJlIG5vIHNjb3BlcyByZXF1ZXN0ZWQgYW5kIGRlZmF1bHQgc2NvcGVzIGFyZSBlbXB0eQogKiAgICAgIC0gaWYgYSByZXF1ZXN0ZWQgc2NvcGUgaXMgbm90IGFsbG93ZWQKICoKICogUmV0dXJuIC0gYSBTZXQ8U3RyaW5nPiBvZiB2YWxpZGF0ZWQgc2NvcGVzICgxKS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICgyKSBDbGllbnQgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svaHR0cC9DbGllbnQuaHRtbC4KICovCgovKioKICogRGVmYXVsdCB2YWxpZGF0ZSBzY29wZSBzY3JpcHQuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZVNjb3BlcyAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkU2NvcGVFeGNlcHRpb24KICAgICk7CgogICAgdmFyIHNjb3BlczsKICAgIGlmIChyZXF1ZXN0ZWRTY29wZXMgPT0gbnVsbCB8fCByZXF1ZXN0ZWRTY29wZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgc2NvcGVzID0gZGVmYXVsdFNjb3BlczsKICAgIH0gZWxzZSB7CiAgICAgICAgc2NvcGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KGFsbG93ZWRTY29wZXMpOwogICAgICAgIHNjb3Blcy5yZXRhaW5BbGwocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICBpZiAocmVxdWVzdGVkU2NvcGVzLnNpemUoKSA+IHNjb3Blcy5zaXplKCkpIHsKICAgICAgICAgICAgdmFyIGludmFsaWRTY29wZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICAgICAgaW52YWxpZFNjb3Blcy5yZW1vdmVBbGwoYWxsb3dlZFNjb3Blcyk7CiAgICAgICAgICAgIHRocm93IG5ldyBmckphdmEuSW52YWxpZFNjb3BlRXhjZXB0aW9uKCdVbmtub3duL2ludmFsaWQgc2NvcGUocyknKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKHNjb3BlcyA9PSBudWxsIHx8IHNjb3Blcy5pc0VtcHR5KCkpIHsKICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRTY29wZUV4Y2VwdGlvbignTm8gc2NvcGUgcmVxdWVzdGVkIGFuZCBubyBkZWZhdWx0IHNjb3BlIGNvbmZpZ3VyZWQnKTsKICAgIH0KICAgIHJldHVybiBzY29wZXM7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlICgpIHsKICAgIHJldHVybiB2YWxpZGF0ZVNjb3BlcygpOwp9CgpmdW5jdGlvbiB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_VALIDATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 7044, + "text": "{\"result\":[{\"_id\":\"248b8a56-df81-4b1b-b4ba-45d994f6504c\",\"name\":\"SAML2 IDP Adapter Script\",\"description\":\"Default global script for SAML2 IDP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9TQU1MMklkZW50aXR5UHJvdmlkZXJBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBJZHBBZGFwdGVyU2NyaXB0SGVscGVyICgxKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgSWRwQWRhcHRlclNjcmlwdEhlbHBlciBjb250YWluaW5nIGhlbHBlciBtZXRob2RzLiBTZWUgSmF2YWRvYyBmb3IgbW9yZSBkZXRhaWxzLgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgyKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDMpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDQpCiAqICAgICBUaGUgb3JpZ2luYWwgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IGZyb20gU1AKICogcmVxSWQgLSBTdHJpbmcKICogICAgIFRoZSBpZCB0byB1c2UgZm9yIGNvbnRpbnVhdGlvbiBvZiBwcm9jZXNzaW5nIGlmIHRoZSBhZGFwdGVyIHJlZGlyZWN0cwogKiByZXMgLSBSZXNwb25zZSAoNSkKICogICAgIFRoZSBTQU1MIFJlc3BvbnNlCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNikKICogICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLiBUaGUgcmVmZXJlbmNlIHR5cGUgb2YgdGhpcyBpcyBPYmplY3QgYW5kIHdvdWxkIG5lZWQgdG8gYmUgY2FzdGVkIHRvIFNTT1Rva2VuLgogKiByZWxheVN0YXRlIC0gU3RyaW5nCiAqICAgICBUaGUgcmVsYXlTdGF0ZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgcmVkaXJlY3QKICogZmF1bHRDb2RlIC0gU3RyaW5nCiAqICAgICB0aGUgZmF1bHQgY29kZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogZmF1bHREZXRhaWwgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBkZXRhaWwgdGhhdCB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBTQU1MIHJlc3BvbnNlCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwuCiAqICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuPHNjcmlwdCBuYW1lPgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb24gKDcpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL0F1dGhuUmVxdWVzdC5odG1sLgogKiAoNSkgUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvUmVzcG9uc2UuaHRtbC4KICogKDYpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBJRFAgQWRhcHRlciBzY3JpcHRlZCBwbHVnaW4uCiAqLwoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2luZ2xlU2lnbk9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlU2lnbk9uICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlQXV0aGVudGljYXRpb246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVBdXRoZW50aWNhdGlvbiAoKSB7CiAgICByZXR1cm4gZmFsc2U7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNlbmRSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgcmVxSWQKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIGJyb3dzZXIgcmVkaXJlY3Rpb24gaGFwcGVuZWQgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2VuZFJlc3BvbnNlICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2lnblJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIHJlcwogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTaWduUmVzcG9uc2UgKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgZmF1bHRDb2RlCiAqICAgICBmYXVsdERldGFpbAogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlICgpIHsKfQ==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -3710,20 +3914,24 @@ }, { "name": "content-length", - "value": "4642" + "value": "7044" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:23 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -3733,14 +3941,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:23.784Z", - "time": 82, + "startedDateTime": "2024-06-19T21:28:27.478Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -3748,11 +3956,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 82 + "wait": 51 } }, { - "_id": "cdb6bf47cf4e63bb698595aa7700365d", + "_id": "63054e0911bafed4c6e0d118e2b5d118", "_order": 0, "cache": {}, "request": { @@ -3764,16 +3972,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -3783,28 +3991,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1642, + "headersSize": 1686, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Twitter Profile Normalization\"" + "value": "name eq \"Apple Profile Normalization\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Twitter%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Apple%20Profile%20Normalization%22" }, "response": { - "bodySize": 1378, + "bodySize": 2942, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1378, - "text": "{\"result\":[{\"_id\":\"8e298710-b55e-4085-a464-88a375a4004b\",\"name\":\"Twitter Profile Normalization\",\"description\":\"Normalizes raw profile data from Twitter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkX3N0ciksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnByb2ZpbGVfaW1hZ2VfdXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnNjcmVlbl9uYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 2942, + "text": "{\"result\":[{\"_id\":\"484e6246-dbc6-4288-97e6-54e55431402e\",\"name\":\"Apple Profile Normalization\",\"description\":\"Normalizes raw profile data from Apple\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICoKICogSW4gc29tZSBjb21tb24gZGVmYXVsdCBjb25maWd1cmF0aW9ucywgdGhlIGZvbGxvd2luZyBrZXlzIGFyZSByZXF1aXJlZCB0byBiZSBub3QgZW1wdHk6CiAqIHVzZXJuYW1lLCBnaXZlbk5hbWUsIGZhbWlseU5hbWUsIGVtYWlsLgogKgogKiBGcm9tIFJGQzQ1MTc6IEEgdmFsdWUgb2YgdGhlIERpcmVjdG9yeSBTdHJpbmcgc3ludGF4IGlzIGEgc3RyaW5nIG9mIG9uZSBvciBtb3JlCiAqIGFyYml0cmFyeSBjaGFyYWN0ZXJzIGZyb20gdGhlIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0IChVQ1MpLgogKiBBIHplcm8tbGVuZ3RoIGNoYXJhY3RlciBzdHJpbmcgaXMgbm90IHBlcm1pdHRlZC4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKU3RyaW5nIGVtYWlsID0gImNoYW5nZUBtZS5jb20iClN0cmluZyBzdWJqZWN0SWQgPSByYXdQcm9maWxlLnN1YgpTdHJpbmcgZmlyc3ROYW1lID0gIiAiClN0cmluZyBsYXN0TmFtZSA9ICIgIgpTdHJpbmcgdXNlcm5hbWUgPSBzdWJqZWN0SWQKU3RyaW5nIG5hbWUKCmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgiZW1haWwiKSAmJiByYXdQcm9maWxlLmVtYWlsLmlzTm90TnVsbCgpKXsgLy8gVXNlciBjYW4gZWxlY3QgdG8gbm90IHNoYXJlIHRoZWlyIGVtYWlsCiAgICBlbWFpbCA9IHJhd1Byb2ZpbGUuZW1haWwuYXNTdHJpbmcoKQogICAgdXNlcm5hbWUgPSBlbWFpbAp9CmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgibmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5pc05vdE51bGwoKSkgewogICAgaWYgKHJhd1Byb2ZpbGUubmFtZS5pc0RlZmluZWQoImZpcnN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5maXJzdE5hbWUuaXNOb3ROdWxsKCkpIHsKICAgICAgICBmaXJzdE5hbWUgPSByYXdQcm9maWxlLm5hbWUuZmlyc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KICAgIGlmIChyYXdQcm9maWxlLm5hbWUuaXNEZWZpbmVkKCJsYXN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5sYXN0TmFtZS5pc05vdE51bGwoKSkgewogICAgICAgIGxhc3ROYW1lID0gcmF3UHJvZmlsZS5uYW1lLmxhc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KfQoKbmFtZSA9IChmaXJzdE5hbWU/LnRyaW0oKSA/IGZpcnN0TmFtZSA6ICIiKSArIChsYXN0TmFtZT8udHJpbSgpID8gKChmaXJzdE5hbWU/LnRyaW0oKSA/ICIgIiA6ICIiKSArIGxhc3ROYW1lKSA6ICIiKQpuYW1lID0gICghbmFtZT8udHJpbSgpKSA/ICIgIiA6IG5hbWUKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCBzdWJqZWN0SWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIG5hbWUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIGVtYWlsKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgZmlyc3ROYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIGxhc3ROYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCB1c2VybmFtZSkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -3854,20 +4066,24 @@ }, { "name": "content-length", - "value": "1378" + "value": "2942" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:23 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -3877,14 +4093,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:23.871Z", - "time": 106, + "startedDateTime": "2024-06-19T21:28:27.535Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -3892,11 +4108,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 106 + "wait": 53 } }, { - "_id": "3137a01335cedaf6a0d12265a00efda2", + "_id": "52794446c8f3a5d849b464d74d5ec188", "_order": 0, "cache": {}, "request": { @@ -3908,16 +4124,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -3927,28 +4143,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1646, + "headersSize": 1673, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Saml2 IDP Adapter Always Auth\"" + "value": "name eq \"selectFavFactor.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Saml2%20IDP%20Adapter%20Always%20Auth%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22selectFavFactor.js%22" }, "response": { - "bodySize": 7583, + "bodySize": 4348, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 7583, - "text": "{\"result\":[{\"_id\":\"85523e71-2d77-4577-b078-6f9674cc54e2\",\"name\":\"Saml2 IDP Adapter Always Auth\",\"description\":\"Always redirect browser pre-auth\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4yL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL1NBTUwySWRlbnRpdHlQcm92aWRlckFkYXB0ZXIuaHRtbAogKiBOb3RlIHRoYXQgdGhlIGluaXRpYWxpemUgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIHNjcmlwdHMuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzLiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMgZm9yIHRoZSB2YXJpYWJsZXMgYXZhaWxhYmxlIHRvIGl0LgogKgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZwogKiAgICAgRW50aXR5IElEIGZvciB0aGUgaG9zdGVkIElEUAogKiByZWFsbSAtIFN0cmluZwogKiAgICAgUmVhbG0gb2YgdGhlIGhvc3RlZCBJRFAKICogaWRwQWRhcHRlclNjcmlwdEhlbHBlciAtIElkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEpCiAqICAgICBBbiBpbnN0YW5jZSBvZiBJZHBBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIHJlcXVlc3QgLSBIdHRwU2VydmxldFJlcXVlc3QgKDIpCiAqICAgICBTZXJ2bGV0IHJlcXVlc3Qgb2JqZWN0CiAqIHJlc3BvbnNlIC0gSHR0cFNlcnZsZXRSZXNwb25zZSAoMykKICogICAgIFNlcnZsZXQgcmVzcG9uc2Ugb2JqZWN0CiAqIGF1dGhuUmVxdWVzdCAtIEF1dGhuUmVxdWVzdCAoNCkKICogICAgIFRoZSBvcmlnaW5hbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHNlbnQgZnJvbSBTUAogKiByZXFJZCAtIFN0cmluZwogKiAgICAgVGhlIGlkIHRvIHVzZSBmb3IgY29udGludWF0aW9uIG9mIHByb2Nlc3NpbmcgaWYgdGhlIGFkYXB0ZXIgcmVkaXJlY3RzCiAqIHJlcyAtIFJlc3BvbnNlICg1KQogKiAgICAgVGhlIFNBTUwgUmVzcG9uc2UKICogc2Vzc2lvbiAtIFNTT1Rva2VuICg2KQogKiAgICAgVGhlIHNpbmdsZSBzaWduLW9uIHNlc3Npb24uIFRoZSByZWZlcmVuY2UgdHlwZSBvZiB0aGlzIGlzIE9iamVjdCBhbmQgd291bGQgbmVlZCB0byBiZSBjYXN0ZWQgdG8gU1NPVG9rZW4uCiAqIHJlbGF5U3RhdGUgLSBTdHJpbmcKICogICAgIFRoZSByZWxheVN0YXRlIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSByZWRpcmVjdAogKiBmYXVsdENvZGUgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBjb2RlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgU0FNTCByZXNwb25zZQogKiBmYXVsdERldGFpbCAtIFN0cmluZwogKiAgICAgdGhlIGZhdWx0IGRldGFpbCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogbG9nZ2VyIC0gTG9nZ2VyIGluc3RhbmNlCiAqICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLjxzY3JpcHQgbmFtZT4KICoKICogVGhyb3dzIFNBTUwyRXhjZXB0aW9uICg3KToKICogICAgIGZvciBhbnkgZXhjZXB0aW9ucyBvY2N1cnJpbmcgaW4gdGhlIGFkYXB0ZXIuIFRoZSBmZWRlcmF0aW9uIHByb2Nlc3Mgd2lsbCBjb250aW51ZQogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBpZHBBZGFwdGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL1Jlc3BvbnNlLmh0bWwuCiAqICg2KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvY29tbW9uL1NBTUwyRXhjZXB0aW9uLmh0bWwuCiAqLwoKLyoKICogVGVtcGxhdGUvZGVmYXVsdCBzY3JpcHQgZm9yIFNBTUwyIElEUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTaW5nbGVTaWduT24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNpbmdsZVNpZ25PbiIpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZUF1dGhlbnRpY2F0aW9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlQXV0aGVudGljYXRpb24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZUF1dGhlbnRpY2F0aW9uIik7CiAgICByZXR1cm4gdHJ1ZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZFJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBoYXBwZW5lZCBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTZW5kUmVzcG9uc2UgKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNlbmRSZXNwb25zZSIpOwogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IGF1dGhuUmVxdWVzdDogIithdXRoblJlcXVlc3QpOwogICAgICByZXNwb25zZS5zZW5kUmVkaXJlY3QoImh0dHBzOi8vaWRjLnNjaGV1YmVyLmlvL2FtL1hVSS8/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPURpc3BhdGNoZXImRm9yY2VBdXRoPXRydWUmZ290bz0iK3JlbGF5U3RhdGUpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpZ25SZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICByZXMKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2lnblJlc3BvbnNlICgpIHsKICAgICAgbG9nZ2VyLmVycm9yKCJDaGljYWdvOiBwcmVTaWduUmVzcG9uc2UiKTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZEZhaWx1cmVSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGZhdWx0Q29kZQogKiAgICAgZmF1bHREZXRhaWwKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2VuZEZhaWx1cmVSZXNwb25zZSAoKSB7CiAgICAgIGxvZ2dlci5lcnJvcigiQ2hpY2FnbzogcHJlU2VuZEZhaWx1cmVSZXNwb25zZSIpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 4348, + "text": "{\"result\":[{\"_id\":\"3c9d3b4a-b38c-4c77-a8d7-4b937e48f62f\",\"name\":\"selectFavFactor.js\",\"description\":\"null\",\"script\":\"Ly8gRGlzcGxheXMgTUZBIG9wdGlvbnMgZmlsdGVyZWQgYnkgdXNlcnMgcHJlZmVyZW5jZXMKdmFyIHdlYmF1dGhuRGV2aWNlUHJvZmlsZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHNoYXJlZFN0YXRlLmdldCgiX2lkIiksICJ3ZWJhdXRobkRldmljZVByb2ZpbGVzIikudG9TdHJpbmcoKTsKdmFyIHB1c2hEZXZpY2VQcm9maWxlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKSwgInB1c2hEZXZpY2VQcm9maWxlcyIpLnRvU3RyaW5nKCk7Cgp2YXIgaGFzV2ViQXV0aE49ZmFsc2U7CnZhciBoYXNQdXNoPWZhbHNlOwoKaWYod2ViYXV0aG5EZXZpY2VQcm9maWxlcy5sZW5ndGg+MikgewogICAgaGFzV2ViQXV0aE4gPSB0cnVlOwp9CmlmKHB1c2hEZXZpY2VQcm9maWxlcy5sZW5ndGg+MikgewogICAgaGFzUHVzaCA9IHRydWU7Cn0KCgptZmFzID0geyAKICAgICAgICAgICJQdXNoIjogIlB1c2ggbm90aWZpY2F0aW9uIHZpYSBhdXRoZW50aWNhdG9yIGFwcCIsIAogICAgICAgICAiV2ViQXV0aE4iOiAiU2VjdXJpdHkgS2V5L1RvdWNoSUQvV2luZG93c0hlbGxvL1Bhc3NLZXkiLCAKICAgICAgICAgICAvLyJRUiIgOiAiUVIgQ29kZSBDYXNjYWRlZCBDb250ZXh0IChXZWJBdXRoTikiLAogICAgICAgICAgICJTTVMiIDogIlNNUyBDYXNjYWRlZCBDb250ZXh0IChXZWJBdXRoTikiLAogICAgICAgICAgLy8iRW1haWwiIDogIkUtbWFpbCBDYXNjYWRlZCBDb250ZXh0IChXZWJBdXRoTikiLAogICAgICAgICAgLy8gIlNNU01MIiA6ICJTTVMgTWFnaWMgTGluayIKICAgICAgIH07CgoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ2hvaWNlQ2FsbGJhY2sKKQoKdmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKCi8vIEFkZCBlbnRyeSB0byBtdWx0aSB2YWx1ZQp2YXIgY2hvaWNlcyA9IFtdOwppZihoYXNQdXNoPT10cnVlKXsKICAgICAgY2hvaWNlcy5wdXNoKG1mYXMuUHVzaCk7Cn0KaWYoaGFzV2ViQXV0aE49PXRydWUpewogICAgICBjaG9pY2VzLnB1c2gobWZhcy5XZWJBdXRoTik7CiAgICAgIC8vY2hvaWNlcy5wdXNoKG1mYXMuUVIpOwogICAgICAvL2Nob2ljZXMucHVzaChtZmFzLlNNUyk7CiAgICAvL2Nob2ljZXMucHVzaChtZmFzLkVtYWlsKTsKCn0KLy9jaG9pY2VzLnB1c2gobWZhcy5TTVNNTCk7CmZ1bmN0aW9uIHNldEN1c3RvbUF0dHJWYWx1ZSAoY3VzdG9tQXR0ck5hbWUsY3VzdG9tQXR0clZhbHVlKQp7CiAgdmFyIGlkID0gc2hhcmVkU3RhdGUuZ2V0KCdfaWQnKTsKICB2YXIgZnJJZG1DdXN0b21BdHRyaWJ1dGVzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShpZCwgJ2ZyLWlkbS1jdXN0b20tYXR0cnMnKTsKICBpZiAoZnJJZG1DdXN0b21BdHRyaWJ1dGVzKQogIHsKICAgIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QgPSBKU09OLnBhcnNlKFN0cmluZyhmcklkbUN1c3RvbUF0dHJpYnV0ZXMudG9BcnJheSgpWzBdKSk7CiAgICBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdID0gY3VzdG9tQXR0clZhbHVlOwogICAgdmFyIGpzb25fc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0KTsKICAgIGlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoaWQsICJmci1pZG0tY3VzdG9tLWF0dHJzIixbanNvbl9zdHJpbmddKTsKICB9Cn0KCgovL0NhbGxiYWNrIHRvIHByZXNlbnQgYW5kIHJldHJpZXZlIHNlbGVjdGVkIG9yZyBhbmQgc2V0Ci8vc2VsZWN0ZWQgdGhlbWUgZm9yIHNldHRpbmcgaW4gdGhlIG5leHQgbm9kZQoKCgp3aXRoIChmcikgewogICAgICBpZiAoY2hvaWNlcy5sZW5ndGggPCAyKSBhY3Rpb24gPSBBY3Rpb24uZ29UbyhvdXRjb21lKS5idWlsZCgpOwogICAgZWxzZSB7CiAgICAgICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soCiAgICAgICAgICAgICAgICAgICAgICAiU3Ryb25nIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkLiBQbGVhc2Ugc2VsZWN0IHlvdXIgcHJlZmVycmVkIGZvcm0gb2Ygc3Ryb25nIGF1dGhlbnRpY2F0aW9uIGZyb20gdGhlIGxpc3QgYmVsb3cuIiwKICAgICAgICAgICAgICAgICAgY2hvaWNlcywKICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgZmFsc2UKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApLndpdGhTdGFnZShKU09OLnN0cmluZ2lmeSh7ICJDaG9pY2VDYWxsYmFjayI6IFsgeyAiZGlzcGxheVR5cGUiOiJyYWRpbyIgfSBdIH0pKS53aXRoSGVhZGVyKCJDaG9vc2UgTWV0aG9kIikuYnVpbGQoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBzZWxlY3RlZEluZGV4ID0gY2FsbGJhY2tzLmdldCgwKS5nZXRTZWxlY3RlZEluZGV4ZXMoKVswXTsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkTmFtZTsKICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1mYXMpIGlmIChjaG9pY2VzW3NlbGVjdGVkSW5kZXhdID09IG1mYXNba2V5XSkgc2VsZWN0ZWROYW1lID0ga2V5OwogICAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoInNlbGVjdGVkTmFtZSIsIHNlbGVjdGVkTmFtZSk7CiAgICAgICAgICAgICAgc2V0Q3VzdG9tQXR0clZhbHVlICgiY3VzdG9tX2Zhdm91cml0ZUZhY3RvciIsc2VsZWN0ZWROYW1lKTsKICAgICAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8oc2VsZWN0ZWROYW1lKS5idWlsZCgpOwogICAgICAgIH0gICAKICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -3998,20 +4218,24 @@ }, { "name": "content-length", - "value": "7583" + "value": "4348" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:23 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -4021,14 +4245,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:23.990Z", - "time": 71, + "startedDateTime": "2024-06-19T21:28:27.593Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -4036,11 +4260,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 71 + "wait": 52 } }, { - "_id": "383132fe28b74d67e177962008c53d13", + "_id": "d3af4f4c72e384f18ea7e6e408bf5d8c", "_order": 0, "cache": {}, "request": { @@ -4052,16 +4276,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -4071,28 +4295,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1614, + "headersSize": 1692, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"level\"" + "value": "name eq \"Scripted Module - Server Side\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22level%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Scripted%20Module%20-%20Server%20Side%22" }, "response": { - "bodySize": 834, + "bodySize": 4699, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 834, - "text": "{\"result\":[{\"_id\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"name\":\"level\",\"description\":\"set per level shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdsZXZlbCcgKyBsZXZlbCArICdWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzZXQgYXQgZWFjaCBsZXZlbCBvZiB0aGUgbmVzdGVkIGpvdXJuZXlzLiBJdCBjb250YWlucyBhbiBpbmRpY2F0b3IgaW4gd2hpY2ggbGV2ZWwgaXQgd2FzIHNldC4nKTsKfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 4699, + "text": "{\"result\":[{\"_id\":\"7e3d7067-d50f-4674-8c76-a3e13a810c33\",\"name\":\"Scripted Module - Server Side\",\"description\":\"Default global script for server side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgp2YXIgU1RBUlRfVElNRSA9IDk7ICAvLyA5YW0KdmFyIEVORF9USU1FICAgPSAxNzsgLy8gNXBtCnZhciBsb25naXR1ZGUsIGxhdGl0dWRlOwp2YXIgbG9jYWxUaW1lOwoKbG9nZ2VyLm1lc3NhZ2UoIlN0YXJ0aW5nIHNjcmlwdGVkIGF1dGhlbnRpY2F0aW9uIik7CmxvZ2dlci5tZXNzYWdlKCJVc2VyOiAiICsgdXNlcm5hbWUpOwoKdmFyIHVzZXJQb3N0YWxBZGRyZXNzID0gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKTsKbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgYWRkcmVzczogIiArIHVzZXJQb3N0YWxBZGRyZXNzKTsKCmdldExvbmdpdHVkZUxhdGl0dWRlRnJvbVVzZXJQb3N0YWxBZGRyZXNzKCk7CmdldExvY2FsVGltZSgpOwoKbG9nZ2VyLm1lc3NhZ2UoIkN1cnJlbnQgdGltZSBhdCB0aGUgdXNlcnMgbG9jYXRpb246ICIgKyBsb2NhbFRpbWUuZ2V0SG91cnMoKSk7CmlmIChsb2NhbFRpbWUuZ2V0SG91cnMoKSA8IFNUQVJUX1RJTUUgfHwgbG9jYWxUaW1lLmdldEhvdXJzKCkgPiBFTkRfVElNRSkgewogICAgbG9nZ2VyLmVycm9yKCJMb2dpbiBmb3JiaWRkZW4gb3V0c2lkZSB3b3JrIGhvdXJzISIpOwogICAgYXV0aFN0YXRlID0gRkFJTEVEOwp9IGVsc2UgewogICAgbG9nZ2VyLm1lc3NhZ2UoIkF1dGhlbnRpY2F0aW9uIGFsbG93ZWQhIik7CiAgICBhdXRoU3RhdGUgPSBTVUNDRVNTOwp9CgpmdW5jdGlvbiBnZXRMb25naXR1ZGVMYXRpdHVkZUZyb21Vc2VyUG9zdGFsQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlclBvc3RhbEFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwogICAgICAvL3RoZSBhYm92ZSBVUkkgaGFzIHRvIGJlIGV4dGVuZGVkIHdpdGggYW4gQVBJX0tFWSBpZiB1c2VkIGluIGEgZnJlcXVlbnQgbWFubmVyCiAgICAgIC8vc2VlIGRvY3VtZW50YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9nZW9jb2RpbmcvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIGdlb2NvZGUgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIHZhciBpOwogICAgZm9yIChpID0gMDsgaSA8IGdlb2NvZGUucmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciByZXN1bHQgPSBnZW9jb2RlLnJlc3VsdHNbaV07CiAgICAgICAgbGF0aXR1ZGUgPSByZXN1bHQuZ2VvbWV0cnkubG9jYXRpb24ubGF0OwogICAgICAgIGxvbmdpdHVkZSA9IHJlc3VsdC5nZW9tZXRyeS5sb2NhdGlvbi5sbmc7CgogICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJsYXRpdHVkZToiICsgbGF0aXR1ZGUgKyAiIGxvbmdpdHVkZToiICsgbG9uZ2l0dWRlKTsKICAgIH0KfQoKZnVuY3Rpb24gZ2V0TG9jYWxUaW1lKCkgewoKICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7CiAgICB2YXIgbG9jYXRpb24gPSAibG9jYXRpb249IiArIGxhdGl0dWRlICsgIiwiICsgbG9uZ2l0dWRlOwogICAgdmFyIHRpbWVzdGFtcCA9ICJ0aW1lc3RhbXA9IiArIG5vdzsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS90aW1lem9uZS9qc29uPyIgKyBsb2NhdGlvbiArICImIiArIHRpbWVzdGFtcCk7CiAgICAgIHJlcXVlc3Quc2V0TWV0aG9kKCJHRVQiKTsKICAgICAgLy90aGUgYWJvdmUgVVJJIGhhcyB0byBiZSBleHRlbmRlZCB3aXRoIGFuIEFQSV9LRVkgaWYgdXNlZCBpbiBhIGZyZXF1ZW50IG1hbm5lcgogICAgICAvL3NlZSBkb2N1bWVudGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vdGltZXpvbmUvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIHRpbWV6b25lID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICB2YXIgbG9jYWxUaW1lc3RhbXAgPSBwYXJzZUludChub3cpICsgcGFyc2VJbnQodGltZXpvbmUuZHN0T2Zmc2V0KSArIHBhcnNlSW50KHRpbWV6b25lLnJhd09mZnNldCk7CiAgICBsb2NhbFRpbWUgPSBuZXcgRGF0ZShsb2NhbFRpbWVzdGFtcCoxMDAwKTsKfQoKZnVuY3Rpb24gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKSB7CiAgICB2YXIgdXNlckFkZHJlc3NTZXQgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCAicG9zdGFsQWRkcmVzcyIpOwogICAgaWYgKHVzZXJBZGRyZXNzU2V0ID09IG51bGwgfHwgdXNlckFkZHJlc3NTZXQuaXNFbXB0eSgpKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIGFkZHJlc3Mgc3BlY2lmaWVkIGZvciB1c2VyOiAiICsgdXNlcm5hbWUpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKQp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -4142,20 +4370,24 @@ }, { "name": "content-length", - "value": "834" + "value": "4699" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:23 GMT" + "value": "Wed, 19 Jun 2024 21:28:26 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -4165,14 +4397,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 773, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:24.075Z", - "time": 59, + "startedDateTime": "2024-06-19T21:28:27.651Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -4180,11 +4412,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 59 + "wait": 51 } }, { - "_id": "f92c54772e92b8bdd08e7cbef5aa4627", + "_id": "193c3c2054d3f1715bf9afab6efb5428", "_order": 0, "cache": {}, "request": { @@ -4196,16 +4428,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -4215,28 +4447,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1665, + "headersSize": 1674, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"OAuth2 Authorize Endpoint Data Provider Script\"" + "value": "name eq \"CheckIfValidSession\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20Authorize%20Endpoint%20Data%20Provider%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22CheckIfValidSession%22" }, "response": { - "bodySize": 4978, + "bodySize": 616, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 4978, - "text": "{\"result\":[{\"_id\":\"3f93ef6e-e54a-4393-aba1-f322656db28a\",\"name\":\"OAuth2 Authorize Endpoint Data Provider Script\",\"description\":\"Default global script for OAuth2 Authorize Endpoint Data Provider\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcmV0dXJuIGFkZGl0aW9uYWwgZGF0YSB3aGVuIGF1dGhvcml6ZSByZXF1ZXN0IGlzIGNhbGxlZC4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LgogKgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cwogKgogKiBsb2dnZXIgLSBEZWJ1ZyAoMykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSAiU2NyaXB0ZWRBdXRob3JpemVFbmRwb2ludERhdGFQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FVVEhPUklaRV9FTkRQT0lOVF9EQVRBX1BST1ZJREVSLgogKgogKiBzY3JpcHROYW1lIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHNjcmlwdAogKgogKiBSZXR1cm4gLSBhIE1hcDxTdHJpbmcsIFN0cmluZz4gb2YgYWRkaXRpb25hbCBkYXRhICg0KS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgzKSBEZWJ1ZyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBhdXRob3JpemUgZW5kcG9pbnQgZGF0YSBwcm92aWRlciBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCi8qIEVYQU1QTEUKdmFyIG1hcCA9IG5ldyBqYXZhLnV0aWwuSGFzaE1hcCgpOwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGEoKSB7CgogICAgLy9JZiBjb25zdGFudCBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkCiAgICBtYXAucHV0KCJoZWxsbyIsICJ3b3JsZCIpOwoKICAgIC8vSWYgc29tZSBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkIGZyb20gdGhpcmQgcGFydHkgc2VydmljZQogICAgYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCk7CgogICAgLy9JZiB0aGVyZSBpcyBhIG5lZWQgdG8gcmV0dXJuIHNvbWUgdXNlciBzZXNzaW9uIGRhdGEKICAgIGFkZEFkZGl0aW9uYWxEYXRhRnJvbVNlc3Npb25Qcm9wZXJ0aWVzKCkKCiAgICByZXR1cm4gbWFwOwp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCkgewogIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLlNlcnZlckV4Y2VwdGlvbgogICAgKTsKICB0cnkgewogICAgICAgIC8vT2J0YWluIGFkZGl0aW9uYWwgZGF0YSBieSBwZXJmb3JtaW5nIGEgUkVTVCBjYWxsIHRvIGFuIGV4dGVybmFsIHNlcnZpY2UKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgICAgIHJlcXVlc3Quc2V0VXJpKCJodHRwczovL3RoaXJkLnBhcnR5LmFwcC9oZWxsby5qc3AiKTsKICAgICAgICByZXF1ZXN0LnNldE1ldGhvZCgiUE9TVCIpOwogICAgICAgIC8vcmVxdWVzdC5zZXRFbnRpdHkoImZvbz1iYXImaGVsbG89d29ybGQiKTsKICAgICAgICByZXF1ZXN0LnNldEVudGl0eShqc29uKG9iamVjdCgKICAgICAgICAgICAgICAgICAgICBmaWVsZCgiZm9vIiwgImJhciIpKSkpOwogICAgICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXRPclRocm93KCk7CiAgICAgICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwogICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICBtYXAucHV0KCJzb21lS2V5IixyZXN1bHQuZ2V0KCJzb21lS2V5IikpOwogIH0gY2F0Y2ggKGVycikgewogICAgIHRocm93IG5ldyBmckphdmEuU2VydmVyRXhjZXB0aW9uKGVycik7CiAgfQp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tU2Vzc2lvblByb3BlcnRpZXMoKSB7CiAgLy9BZGQgYWRkaXRpb25hbCBkYXRhIGZyb20gc2Vzc2lvbiBwcm9wZXJ0eSB2YWx1ZXMKICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeyAvLyBzZXNzaW9uIGlzIG5vdCBhdmFpbGFibGUgZm9yIHJlc291cmNlIG93bmVyIHBhc3N3b3JkIGNyZWRlbnRpYWxzIGdyYW50CiAgICAgbWFwLnB1dCgiaXBBZGRyZXNzIiwgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgiSG9zdCIpKQogICB9Cn07CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKSk7Cn07CgphZGRBZGRpdGlvbmFsRGF0YSgpOwoqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 616, + "text": "{\"result\":[{\"_id\":\"3b7c5bbe-5a80-4ba1-8918-6a3e2ef891c4\",\"name\":\"CheckIfValidSession\",\"description\":\"Check if a valid session already exists\",\"script\":\"aWYgKHR5cGVvZiBleGlzdGluZ1Nlc3Npb24gIT09ICd1bmRlZmluZWQnKQp7CiAgb3V0Y29tZSA9ICJoYXNTZXNzaW9uIjsKfQplbHNlCnsKICBvdXRjb21lID0gIm5vU2Vzc2lvbiI7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -4286,20 +4522,24 @@ }, { "name": "content-length", - "value": "4978" + "value": "616" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:23 GMT" + "value": "Wed, 19 Jun 2024 21:28:27 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -4309,14 +4549,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:24.144Z", - "time": 75, + "startedDateTime": "2024-06-19T21:28:27.708Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -4324,11 +4564,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 75 + "wait": 52 } }, { - "_id": "b053354d3e96e3e2828f1986afdf05c8", + "_id": "3061b032426771626e9bedd19872123e", "_order": 0, "cache": {}, "request": { @@ -4340,16 +4580,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -4359,28 +4599,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1641, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"WeChat Profile Normalization\"" + "value": "name eq \"FrodoTestScript1\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22WeChat%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript1%22" }, "response": { - "bodySize": 1312, + "bodySize": 1131, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1312, - "text": "{\"result\":[{\"_id\":\"472534ec-a25f-468d-a606-3fb1935190df\",\"name\":\"WeChat Profile Normalization\",\"description\":\"Normalizes raw profile data from WeChat\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLm9wZW5pZCksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uaWNrbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5oZWFkaW1ndXJsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLm5pY2tuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1131, + "text": "{\"result\":[{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -4430,20 +4674,24 @@ }, { "name": "content-length", - "value": "1312" + "value": "1131" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:23 GMT" + "value": "Wed, 19 Jun 2024 21:28:27 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -4453,14 +4701,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:24.233Z", - "time": 62, + "startedDateTime": "2024-06-19T21:28:27.765Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -4468,11 +4716,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 62 + "wait": 52 } }, { - "_id": "363a71f39643a664381fab9835743d38", + "_id": "48a4e51decbcd68b9b96980ee4cf93b3", "_order": 0, "cache": {}, "request": { @@ -4484,16 +4732,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -4503,28 +4751,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1625, + "headersSize": 1683, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Check Username\"" + "value": "name eq \"Demo - Journey Chooser\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Check%20Username%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Demo%20-%20Journey%20Chooser%22" }, "response": { - "bodySize": 1129, + "bodySize": 6552, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1129, - "text": "{\"result\":[{\"_id\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"name\":\"Check Username\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 6552, + "text": "{\"result\":[{\"_id\":\"320012d2-ad02-401a-871e-3973db81a3d7\",\"name\":\"Demo - Journey Chooser\",\"description\":\"null\",\"script\":\"Ly8gRGlzcGxheSBjaG9pY2Ugb2Ygam91cm5leXMKLy8gU2VlIGh0dHBzOi8vY2RuLWljb25zLXBuZy5mbGF0aWNvbi5jb20gZm9yIGV4YW1wbGUgaWNvbnMKdmFyIGpvdXJuZXlzID0gWwogIC8veyAibmFtZSI6ICJMZWdhY3kgTG9naW4iLCAidXJsIjogIkxvZ2luIiwgImljb24iOiAiMTI4LzYzMTcvNjMxNzU3Ny5wbmciIH0sCiAgeyAibmFtZSI6ICJMb2dpbiIsICJ1cmwiOiAiUGFzc3dvcmRsZXNzLU1hc3RlciIsICJpY29uIjogIjEyOC85Njk5Lzk2OTk1ODIucG5nIiB9LAogIC8veyAibmFtZSI6ICJSZWdpc3RlciIsICJ1cmwiOiAiRGVtby1Qd2RsZXNzLU5ldy1Vc2VyICIsICJpY29uIjogIjEyOC8xNjk4LzE2OTg1NzIucG5nIiB9LAogIC8veyAibmFtZSI6ICJRUiBMb2dpbiIsICJ1cmwiOiAiRGVtby1Qd2RMZXNzLVFSIiwgImljb24iOiAiMTI4LzEyODcvMTI4NzU1OC5wbmciIH0sCiAgLy97ICJuYW1lIjogIlNNUyBXZWJBdXRoTiIsICJ1cmwiOiAiRGVtby1Qd2RMZXNzLVNNUyIsICJpY29uIjogIjEyOC8yNzA0LzI3MDQxNjcucG5nIiB9LAogIC8veyAibmFtZSI6ICJTTVMgTWFnaWMgTGluayIsICJ1cmwiOiAiRGVtby1Qd2RMZXNzLVNNUy1TaW1wbGUiLCAiaWNvbiI6ICIxMjgvMjcwNC8yNzA0MTY3LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiSUQgUHJvb2ZpbmciLCAidXJsIjogIkRlbW8tT25GaWRvIiwgImljb24iOiAiMTI4LzYwNjEvNjA2MTM5Ni5wbmciIH0sCiAgLy97ICJuYW1lIjogIlJlZ2lzdGVyK0lEVi1MaXZlIiwgInVybCI6ICJEZW1vLVNlbGZSZWdpc3RyYXRpb24iLCAiaWNvbiI6ICIxMjgvMTY5OC8xNjk4NTcyLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUmVnaXN0ZXIrSURWLVNhbmRib3giLCAidXJsIjogIkRlbW8tU2VsZlJlZ2lzdHJhdGlvblNhbmRib3giLCAiaWNvbiI6ICIxMjgvMTY5OC8xNjk4NTcyLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUmVtZW1iZXIgVXNlcm5hbWVzIiwgInVybCI6ICJEZW1vLVJlbWVtYmVyTXlVc2VybmFtZSIsICJpY29uIjogIjEyOC84ODkvODg5NjY4LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUGVlciBSZWNvdmVyeSIsICJ1cmwiOiAiRGVtby1SZWNvdmVyeSIsICJpY29uIjogIjEyOC8yNTk3LzI1OTcxNDMucG5nIiB9LAogIC8veyAibmFtZSI6ICJGaW5nZXJwcmludEpTIiwgInVybCI6ICJGaW5nZXJwcmludEpTIiwgImljb24iOiAiLzEyOC84MzM3LzgzMzc3MDIucG5nIiB9LAogIC8veyAibmFtZSI6ICJGaW5nZXJwcmludEpTIFBybyIsICJ1cmwiOiAiRmluZ2VycHJpbnRQcm9KUyIsICJpY29uIjogIi8xMjgvODMzNy84MzM3NzAyLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUmVzZXQgUGFzc3dvcmQiLCAidXJsIjogIlJlc2V0UGFzc3dvcmQiLCAiaWNvbiI6ICIxMjgvMTAwMC8xMDAwOTMzLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiU29jaWFsIExvZ2luIiwgInVybCI6ICJEZW1vLVNvY2lhbCIsICJpY29uIjogIjEyOC8zMDAvMzAwMjIxLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiU0FNTCIsICJ1cmwiOiAiRGVtby1TQU1MIiwgImljb24iOiAiMTI4LzI5LzI5NjExLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiTUZBLU9BVEgiLCAidXJsIjogIkRlbW8tTUZBLU9BVEgiLCAiaWNvbiI6ICIxMjgvNzQ3Ni83NDc2Nzk2LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiTUZBLVB1c2giLCAidXJsIjogIkRlbW8tTUZBLVB1c2giLCAiaWNvbiI6ICIxMjgvNzQ3Ni83NDc2Nzk2LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUGFzc3dvcmRsZXNzIiwgInVybCI6ICJEZW1vLU1GQS1QYXNzd2RsZXNzIiwgImljb24iOiAiMTI4LzI3NjcvMjc2NzE0Ni5wbmciIH0sICAKICAvL3sgIm5hbWUiOiAiTUZBLUNob2ljZSIsICJ1cmwiOiAiRGVtby1NRkEtQ2hvaWNlIiwgImljb24iOiAiMTI4Lzc0NzYvNzQ3Njc5Ni5wbmciIH0sCiAgLy97ICJuYW1lIjogIlByb2dyZXNzaXZlIFByb2ZpbGUiLCAidXJsIjogIlByb2dyZXNzaXZlUHJvZmlsZSIsICJpY29uIjogIjEyOC83MzE5LzczMTk1MDkucG5nIiB9LAogIC8veyAibmFtZSI6ICJBZ2UtQmFzZWQgTG9naW4iLCAidXJsIjogIkRlbW8tQWdlQmFzZWRMb2dpbiIsICJpY29uIjogIjEyOC8zMDgxLzMwODE5NjkucG5nIiB9LAogIC8veyAibmFtZSI6ICJNdWx0aSBCcmFuZCIsICJ1cmwiOiAiRGVtby1NdWx0aUJyYW5kIiwgImljb24iOiAiMTI4LzY5ODAvNjk4MDczNS5wbmciIH0sCiAgLy97ICJuYW1lIjogIkFudGkgRnJhdWQiLCAidXJsIjogIjEtRGVtby1DaG9vc2VyLUF1dG9BY2Nlc3MiLCAiaWNvbiI6ICIxMjgvMjg2Ny8yODY3NzI1LnBuZyIgfSwKICAKICAKXQoKCnZhciBJQ09OUyA9ICJodHRwczovL2Nkbi1pY29ucy1wbmcuZmxhdGljb24uY29tLyIKdmFyIFNJWkUgPSAiMjQiOwoKdmFyIGNzcyA9ICIqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfSAgLmNvbHVtbiB7IGZsb2F0OiBsZWZ0OyB3aWR0aDogNTAlOyBwYWRkaW5nOiAxMHB4OyB0ZXh0LWFsaWduOmxlZnQ7IH0gLnJvdzphZnRlciB7IGNvbnRlbnQ6IFwiXCI7IGRpc3BsYXk6IHRhYmxlOyBjbGVhcjogYm90aDsgfSAuYm94IHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgIGhlaWdodDogNjBweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBwYWRkaW5nOiAwIDEwcHg7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsgY29sb3I6IHJnYigwLCAwLCAwKTsgYm9yZGVyLWNvbG9yOiByZ2IoMCwgMCwgMCk7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDoxcHg7IG1hcmdpbi1ib3R0b206IDJweDsgIH0gLmljb24geyBoZWlnaHQ6IDMycHg7IG1pbi13aWR0aDogMzJweDsgbWFyZ2luLXJpZ2h0OiAxMHB4OyB9IGE6aG92ZXIgeyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0iOwoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKKQoKCndpdGgoZnIpIHsKICAgIHZhciBzY3JpcHQ7CiAgICBmdW5jdGlvbiBjcmVhdGVTY3JpcHQoKSB7CiAgICAgICAgICB2YXIgbGVmdCA9ICIiOwogICAgICAgIHZhciByaWdodCA9ICIiOwogICAgICAgICAgZm9yIChpIGluIGpvdXJuZXlzKSB7CiAgICAgICAgICAgIHZhciBlbGVtID0gJzxhIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tYmxvY2sgYm94XCIgaHJlZj1cImh0dHBzOi8vb3BlbmFtLXZvbGtlci1kZW1vLmZvcmdlYmxvY2tzLmNvbS9hbS9YVUk/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPScgKyBqb3VybmV5c1tpXVsidXJsIl0gKyAnXCI+PGltZyBjbGFzcz1cImljb25cIiBzcmM9XCInICsgSUNPTlMgKyBqb3VybmV5c1tpXVsiaWNvbiJdICsgJ1wiPjxzcGFuPicgKyBqb3VybmV5c1tpXVsibmFtZSJdICsgJzwvc3Bhbj48L2E+JzsKICAgICAgICAgICAgICBpZiAoaSAlIDIgPT0gMCkgCiAgICAgICAgICAgICAgICAgIGxlZnQgKz0gZWxlbTsKICAgICAgICAgICAgICBlbHNlIAogICAgICAgICAgICAgICAgICByaWdodCArPSBlbGVtOwogICAgICAgIH0KICAgICAgICByZXR1cm4gU3RyaW5nKCJkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSkuaW5uZXJIVE1MID0gJyIgKyBjc3MgKyAiJyBcblwKICAgICAgICAgICAgdmFyIGNob29zZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgXG5cCiAgICAgICAgICAgIGNob29zZXIuaWQgPSAnY2hvb3Nlcic7IFxuXAogICAgICAgICAgICB2YXIgY2IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FsbGJhY2tzUGFuZWwnKTsgXG5cCiAgICAgICAgICAgIGNiLmluc2VydEJlZm9yZShjaG9vc2VyLCBjYi5maXJzdENoaWxkKTsgXG5cCiAgICAgICAgICAgIGNob29zZXIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJyb3dcIj48ZGl2IGNsYXNzPVwiY29sdW1uXCI+IitsZWZ0KyI8L2Rpdj48ZGl2IGNsYXNzPVwiY29sdW1uXCI+IityaWdodCsiPC9kaXY+PC9kaXY+JyBcblwKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignYnV0dG9uW3R5cGU9c3VibWl0XScpKSB7IFxuXAogICAgICAgICAgICAgICAgdmFyIGIgPSBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvblt0eXBlPXN1Ym1pdF0nKTsgXG5cCiAgICAgICAgICAgICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbigpIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nob29zZXInKS5yZW1vdmUoKTsgIH0pOyBcblwKICAgICAgICAgICAgfSBcblwKICAgICAgICAiKTsKICAgIH0gIAogIAogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBBY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IFNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhjcmVhdGVTY3JpcHQoKSkKICAgICAgICApLmJ1aWxkKCkKICAgIH0gZWxzZSBhY3Rpb24gPSBBY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -4574,20 +4826,24 @@ }, { "name": "content-length", - "value": "1129" + "value": "6552" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:24 GMT" + "value": "Wed, 19 Jun 2024 21:28:27 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -4597,14 +4853,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:24.308Z", - "time": 62, + "startedDateTime": "2024-06-19T21:28:27.821Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -4612,11 +4868,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 62 + "wait": 52 } }, { - "_id": "fe90a50ae7c7e0edfbed453351ad162b", + "_id": "92a7bd7f1355ae753e4e937db47d63cd", "_order": 0, "cache": {}, "request": { @@ -4628,16 +4884,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -4647,28 +4903,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1643, + "headersSize": 1702, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"OAuth2 Evaluate Scope Script\"" + "value": "name eq \"OAuth2 Access Token Modification Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20Evaluate%20Scope%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20Access%20Token%20Modification%20Script%22" }, "response": { - "bodySize": 3734, + "bodySize": 10093, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 3734, - "text": "{\"result\":[{\"_id\":\"da56fe60-8b38-4c46-a405-d6b306d4b336\",\"name\":\"OAuth2 Evaluate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Evaluation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcG9wdWxhdGUgdGhlIHNjb3BlcyB3aXRoIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlcyB3aGVuIHRoZSB0b2tlbmluZm8gZW5kcG9pbnQgaXMgY2FsbGVkLgogKiBGb3IgZXhhbXBsZSwgaWYgb25lIG9mIHRoZSBzY29wZXMgaXMgbWFpbCwgQU0gc2V0cyBtYWlsIHRvIHRoZSByZXNvdXJjZSBvd25lcidzIGVtYWlsIGFkZHJlc3MgaW4gdGhlIHRva2VuIGluZm9ybWF0aW9uIHJldHVybmVkLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDIpLgogKiAgICAgICAgICAgIFRoZSBjbGllbnQncyBpZGVudGl0eSBpZiBwcmVzZW50IG9yIHRoZSByZXNvdXJjZSBvd25lcidzIGlkZW50aXR5LiBDYW4gYmUgbnVsbC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0VWQUxVQVRFX1NDT1BFCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoMykuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIGEgTWFwPFN0cmluZywgT2JqZWN0PiBvZiB0aGUgYWNjZXNzIHRva2VuJ3MgaW5mb3JtYXRpb24gKDQpLgogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBBY2Nlc3NUb2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vYXV0aDIvY29yZS9BY2Nlc3NUb2tlbi5odG1sLgogKiAoMikgQU1JZGVudGl0eSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9pZG0vQU1JZGVudGl0eS5odG1sLgogKiAoMykgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBldmFsdWF0ZSBzY29wZSBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgbWFwID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7CiAgICBpZiAoaWRlbnRpdHkgIT09IG51bGwpIHsKICAgICAgICB2YXIgc2NvcGVzID0gYWNjZXNzVG9rZW4uZ2V0U2NvcGUoKS50b0FycmF5KCk7CiAgICAgICAgc2NvcGVzLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKHNjb3BlKS50b0FycmF5KCk7CiAgICAgICAgICAgIG1hcC5wdXQoc2NvcGUsIGF0dHJpYnV0ZXMuam9pbigiLCIpKTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKCdpZGVudGl0eSBpcyBudWxsJyk7CiAgICB9CiAgICByZXR1cm4gbWFwOwp9KCkpOw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_EVALUATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 10093, + "text": "{\"result\":[{\"_id\":\"d22f9a0c-426a-4466-b95e-d0f125b0d5fa\",\"name\":\"OAuth2 Access Token Modification Script\",\"description\":\"Default global script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -4717,21 +4977,25 @@ "value": "application/json;charset=UTF-8" }, { - "name": "content-length", - "value": "3734" + "name": "transfer-encoding", + "value": "chunked" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:24 GMT" + "value": "Wed, 19 Jun 2024 21:28:27 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -4741,14 +5005,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 800, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:24.374Z", - "time": 69, + "startedDateTime": "2024-06-19T21:28:27.878Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -4756,11 +5020,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 69 + "wait": 51 } }, { - "_id": "c5caa7291edc554233da2cdc3b03a448", + "_id": "bc60b63002c1eecace0496edd0cf81dd", "_order": 0, "cache": {}, "request": { @@ -4772,16 +5036,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -4791,28 +5055,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1643, + "headersSize": 1674, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"LinkedIn Profile Normalization\"" + "value": "name eq \"wks-DisplayUserName\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22LinkedIn%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22wks-DisplayUserName%22" }, "response": { - "bodySize": 1600, + "bodySize": 3288, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1600, - "text": "{\"result\":[{\"_id\":\"8862ca8f-7770-4af5-a888-ac0df0947f36\",\"name\":\"LinkedIn Profile Normalization\",\"description\":\"Normalizes raw profile data from LinkedIn\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5maXJzdE5hbWUubG9jYWxpemVkLmdldCgwKSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3ROYW1lLmxvY2FsaXplZC5nZXQoMCkpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucHJvZmlsZVBpY3R1cmUuZGlzcGxheUltYWdlKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVsZW1lbnRzLmdldCgwKS5nZXQoImhhbmRsZX4iKS5lbWFpbEFkZHJlc3MpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZWxlbWVudHMuZ2V0KDApLmdldCgiaGFuZGxlfiIpLmVtYWlsQWRkcmVzcykpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 3288, + "text": "{\"result\":[{\"_id\":\"0ab1dc10-a54f-476f-ad07-2a04915cd443\",\"name\":\"wks-DisplayUserName\",\"description\":\"DisplayUserName\",\"script\":\"LyogRGlzcGxheSBVc2VybmFtZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBEaXNwbGF5IHRoZSB1c2VybmFtZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICB0cnkgewogICAgdmFyIG91dGNvbWUgPSAndHJ1ZSc7CiAgICB2YXIgdXNlcm5hbWUgPSBub2RlU3RhdGUuZ2V0KCd1c2VybmFtZScpLmFzU3RyaW5nKCk7CgogICAgLy8gU3BlY2lmeSB0aGUgbWVzc2FnZSB5b3Ugd2FudCB0byBkaXNwbGF5LiBZb3UgbWF5IHVzZSBIVE1MIGZvciBmb3JtYXR0aW5nLiBBdm9pZCBsaW5lIGJyZWFrcyEgVXNlIDxicj4gaW5zdGVhZC4KICAgIHZhciBtZXNzYWdlID0gJ1lvdXIgRW5jb3JlIHVzZXJuYW1lIGlzOjxoMyBzdHlsZT0iY29sb3I6IzI5NDhBNzsiPicrdXNlcm5hbWUrJzwvaDM+JzsKCiAgICB2YXIgYW5jaG9yID0gJ2FuY2hvci0nK2dlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKTsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4gXAogICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiBcCiAgICAgIGZ1bmN0aW9uIChlKSB7XG4gXAogICAgICAgIHZhciBtZXNzYWdlID0gZS5maXJzdEVsZW1lbnRDaGlsZDtcbiBcCiAgICAgICAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIithbmNob3IrIicpIHtcbiBcCiAgICAgICAgICBtZXNzYWdlLmlubmVySFRNTCA9ICciK21lc3NhZ2UrIic7XG4gXAogICAgICAgIH1cbiBcCiAgICAgIH0pIjsKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgICAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKICAgICkKICAgIGlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICAgIG5ldyBmci5UZXh0T3V0cHV0Q2FsbGJhY2soCiAgICAgICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgICAgICBhbmNob3IKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9CiAgICBlbHNlIHsKICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgIH0KICB9IGNhdGNoIChlcnJvcikgewogICAgbG9nZ2VyLmVycm9yKCdFcnJvcjogJyArIGVycm9yKTsKICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2Vycm9yJywgZXJyb3IubWVzc2FnZSk7CiAgfQoKICAgLyoKICAgICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAgICogCiAgICAqIEV4YW1wbGU6CiAgICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICAqLwogIGZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbihjKSB7CiAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkqMTB8MDsKICAgICAgICAgIHZhciB2ID0gcjsKICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDEwKTsKICAgICAgfSk7CiAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -4862,20 +5130,24 @@ }, { "name": "content-length", - "value": "1600" + "value": "3288" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:24 GMT" + "value": "Wed, 19 Jun 2024 21:28:27 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -4885,14 +5157,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:24.448Z", - "time": 69, + "startedDateTime": "2024-06-19T21:28:27.934Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -4900,11 +5172,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 69 + "wait": 53 } }, { - "_id": "dcc34405f9b2c07186729f2a8039368f", + "_id": "cdfe982399a02cf5e2c34a763a4473ef", "_order": 0, "cache": {}, "request": { @@ -4916,16 +5188,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -4935,28 +5207,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1644, + "headersSize": 1680, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Instagram Profile Normalization\"" + "value": "name eq \"Get esv admin token\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Instagram%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Get%20esv%20admin%20token%22" }, "response": { - "bodySize": 1178, + "bodySize": 844, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1178, - "text": "{\"result\":[{\"_id\":\"1244e639-4a31-401d-ab61-d75133d8dc9e\",\"name\":\"Instagram Profile Normalization\",\"description\":\"Normalizes raw profile data from Instagram\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 844, + "text": "{\"result\":[{\"_id\":\"9674f7d1-7448-4544-879e-91587bb04f46\",\"name\":\"Get esv admin token\",\"description\":\"Get esc admin token\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwp2YXIgYWRtaW5Ub2tlbiA9ICBzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi5hZG1pbi50b2tlbiIpOwpzaGFyZWRTdGF0ZS5wdXQoJ2FkbWluVG9rZW4nLCBhZG1pblRva2VuKTsKb3V0Y29tZSA9ICJ0cnVlIjs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -5006,20 +5282,24 @@ }, { "name": "content-length", - "value": "1178" + "value": "844" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:24 GMT" + "value": "Wed, 19 Jun 2024 21:28:27 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -5029,14 +5309,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:24.531Z", - "time": 62, + "startedDateTime": "2024-06-19T21:28:27.992Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -5044,11 +5324,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 62 + "wait": 51 } }, { - "_id": "107a4931480ecae131b0dd4dbfc827bd", + "_id": "de7aeea45f0d5f5bc11451a836edabc8", "_order": 0, "cache": {}, "request": { @@ -5060,16 +5340,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -5079,28 +5359,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1657, + "headersSize": 1663, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"ForgeRock Internal: OIDC Claims Script\"" + "value": "name eq \"FR-Debug\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22ForgeRock%20Internal%3A%20OIDC%20Claims%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FR-Debug%22" }, "response": { - "bodySize": 41560, + "bodySize": 16721, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 41560, - "text": "{\"result\":[{\"_id\":\"1f389a3d-21cf-417c-a6d3-42ea620071f0\",\"name\":\"ForgeRock Internal: OIDC Claims Script\",\"description\":\"Internal OIDC Claims script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 16721, + "text": "{\"result\":[{\"_id\":\"c0413dae-fdd1-45b7-9302-61d6ae02b194\",\"name\":\"FR-Debug\",\"description\":\"Debug to show AM States\",\"script\":\"LyogRElTQ0xBSU1FUjogVGhpcyBjb2RlIGlzIHByb3ZpZGVkIHRvIHlvdSBleHByZXNzbHkgYXMgYW4gZXhhbXBsZSAgKOKAnFNhbXBsZSBDb2Rl4oCdKS4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBpbmRpdmlkdWFsIHJlY2lwaWVudCB1c2VyLCBpbiBoaXMvaGVyIHNvbGUgZGlzY3JldGlvbiwgdG8gZGlsaWdlbmNlIHN1Y2ggU2FtcGxlIENvZGUgZm9yIGFjY3VyYWN5LCBjb21wbGV0ZW5lc3MsIHNlY3VyaXR5LCBhbmQgZmluYWwgZGV0ZXJtaW5hdGlvbiBmb3IgYXBwcm9wcmlhdGVuZXNzIG9mIHVzZS4gCiAqIEFOWSBTQU1QTEUgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiDigJxBUyBJU+KAnSBJUyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gRk9SR0VST0NLIEFORCBJVFMgTElDRU5TT1JTIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUywgIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCwgT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTICBPRiBNRVJDSEFOVEFCSUxJVFksIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogKiBGT1JHRVJPQ0sgU0hBTEwgTk9UIEhBVkUgQU5ZIExJQUJJTElUWSBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBBTlkgVVNFLCBJTVBMRU1FTlRBVElPTiwgSU5URUdSQVRJT04sIE9SIENPTkZJR1VSQVRJT04gT0YgQU5ZIFNBTVBMRSBDT0RFIElOIEFOWSBQUk9EVUNUSU9OIEVOVklST05NRU5UIE9SIEZPUiBBTlkgQ09NTUVSQ0lBTCBERVBMT1lNRU5UKFMpLgogKgogKiBTY3JpcHQgTmFtZTogQU0gSm91cm5leSBUZW1wbGF0ZQogKgogKiBBdXRob3JzOiBzZUBmb3JnZXJvY2suY29tCiAqIAogKiBUaGlzIHNjcmlwdCBzaG93cyBhIGRlZmF1bHQgdGVtcGxhdGUgb24gaG93IHlvdXIgU2NyaXB0aW5nIERlY2lzaW9uIE5vZGUgc2NyaXB0cyBzaG91bGQgYmUgd3JpdHRlbi4KICogSXQgc2hvd3MgeW91IGhvdyB0byB3b3JrIHdpdGggc2hhcmVkU3RhdGUsIHRyYW5zaWVudFN0YXRlLCBzZWN1cmVTdGF0ZS4KICogVGhpcyBpcyBhIGdyZWF0IGRlYnVnIHNjcmlwdCB0byB1c2UgaW4gYW5kIG9mIGl0c2VsZiBhcyBpdCB3aWxsIGRpc3BsYXkgYWxsIHRocmVlIHN0YXRlcyBtZW50aW9uZWQgYWJvdmUgaW4gYSBmb3JtYXR0ZWQgdGFibGUKICogCiAqIFRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCBub3Qgd29yayBwcm9wZXJseSBhcyBpcy4gCiAqIEl0IHJlcXVpcmVzIHNvbWUgbm9kZXMgdGhhdCBzZXQgYXQgbGVhc3Qgc2hhcmVkU3RhdGUgYmVmb3JlIGl0IGNhbiBvcGVyYXRlLgogKiBGb3IgZXhhbXBsZSwgc2V0IGEgcGFnZSBub2RlIHdpdGggUGxhdGZvcm0gVXNlcm5hbWUgYW5kIFBsYXRmb3JtIFBhc3N3b3JkIG5vZGVzCiAqIAogKiBUaGlzIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKKi8KCi8vIERvIGV2ZXJ5dGhpbmcgaW4gYSBzZWxmLWludm9raW5nIGZ1bmN0aW9uIGFuZCBkbyBub3Qgd3JpdGUgY29kZSBvdXRzaWRlIG9mIGEgZnVuY3Rpb24gb3IgeW91IHdpbGwgcGF5IGRlYXJseS4gCi8vIFRoaXMgaXMgYmVjYXVzZSBvZiB0b3AtbGV2ZWwgc2NvcGluZy93aGl0ZWxpc3RpbmcvZXRjIGlzc3VlcyB0aGF0IGdpdmUgeW91ICd1bmRlZmluZWQnIGVycm9ycy4KKGZ1bmN0aW9uICgpIHsKICBsb2dnZXIubWVzc2FnZSgiU2NyaXB0OiBzdGFydCIpOyAvLyBiZWdpbmcgb2Ygc2NyaXB0IG1haW4KICBvdXRjb21lID0gInRydWUiOyAvLyA8LSBmaWxsIGluIGRlZmF1bHQgb3V0Y29tZSBoZXJlIGFuZCBpdCBzaG91bGQgbWF0Y2ggYSAiU2NyaXB0IE91dGNvbWVzIiBzZXR0aW5nIG9uIHRoaXMgbm9kZSBpdHNlbGYKCiAgLy8gYnVpbGQgb3V0cHV0IGh0bWwgdGFibGUgdGhhdCB3aWxsIGJlIHNlbnQgYmFjayB0byBicm93c2VyCiAgdmFyIG91dHB1dCA9IGNyZWF0ZUh0bWwoKTsKCiAgLy8gaXNzdWUgY2FsbGJhY2sgdG8gYnJvd3NlciBhZnRlciBvdXRwdXQgaHRtbCBpcyBidWlsdCBmcm9tIGNyZWF0ZUh0bWwoKSBmdW5jdGlvbgogIGRpc3BsYXlNZXNzYWdlKG91dHB1dCk7CiAgCiAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmlwdDogZW5kIik7IC8vIGVuZCBvZiBzY3JpcHQgbWFpbgoKICAvKgogICogUHV0IGZ1bmN0aW9ucyBiZWxvdyBoZXJlCiAgKi8KICBmdW5jdGlvbiBjcmVhdGVIdG1sKCkgewogICAgICB2YXIgaHRtbCA9ICI8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkXCI+IjsKICAgICAgaHRtbCArPSAiPHRoZWFkIGNsYXNzPVwidGhlYWQtZGFya1wiPjx0cj48dGggY2xhc3M9XCJweC0xIHB5LTFcIiBjb2xzcGFuPVwiMlwiPlNoYXJlZCBTdGF0ZSBWYXJpYWJsZXMgKHNoYXJlZFN0YXRlLmdldCk8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAvLyBnZXQgYWxsIHRoZSBrZXlzIGluIG5vZGVTdGF0ZQogICAgICB2YXIgaXRlcmF0b3IgPSBub2RlU3RhdGUua2V5cygpLml0ZXJhdG9yKCk7CiAgICAgIHZhciBzdGF0ZUtleXMgPSBbXTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgc3RhdGVLZXlzLnB1c2goaXRlcmF0b3IubmV4dCgpLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICAgIHN0YXRlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZUtleSkgewogICAgICAgIGlmIChzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpIAogICAgICAgICAgICAmJiBzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpLnRvU3RyaW5nKCkgIT09ICJudWxsIgogICAgICAgICAgICAmJiBzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpLnRvU3RyaW5nKCkgIT09ICIiCiAgICAgICAgICAgICYmICIiK3N0YXRlS2V5ICE9PSAib2JqZWN0QXR0cmlidXRlcyIgIC8vIGdvaW5nIHRvIHB1bGwgb3V0IG9iamVjdEF0dHJpYnV0ZXMgbGF0ZXIKICAgICAgICAgICAgJiYgIiIrc3RhdGVLZXkgIT09ICJwYWdlTm9kZUNhbGxiYWNrcyIpIC8vcGFnZU5vZGVDYWxsYmFja3MgYXJlIGludGVybmFsIHRvIHRoZSBQYWdlIE5vZGUgYW5kIG5vdCBuZWVkZWQvdXNlZCAgCiAgICAgICAgewogICAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBzdGF0ZUtleSArICI8L3RkPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpICsgIjwvdGQ+PC90cj4iOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGh0bWwgKz0gIjwvdGFibGU+IjsKCiAgICAgIGh0bWwgKz0gIjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWRcIj4iOwogICAgICAKICAgICAgaHRtbCArPSAiPHRoZWFkIGNsYXNzPVwidGhlYWQtZGFya1wiPjx0cj48dGggY2xhc3M9XCJweC0xIHB5LTFcIiBjb2xzcGFuPVwiMlwiPlRyYW5zaWVudCBTdGF0ZSBWYXJpYWJsZXMgKHRyYW5zaWVudFN0YXRlLmdldCk8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAvLyBnZXQgYWxsIHRoZSBrZXlzIGluIG5vZGVTdGF0ZQogICAgICB2YXIgaXRlcmF0b3IgPSBub2RlU3RhdGUua2V5cygpLml0ZXJhdG9yKCk7CiAgICAgIHZhciBzdGF0ZUtleXMgPSBbXTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgc3RhdGVLZXlzLnB1c2goaXRlcmF0b3IubmV4dCgpLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICAgIHN0YXRlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZUtleSkgewogICAgICAgIGlmICh0cmFuc2llbnRTdGF0ZS5nZXQoc3RhdGVLZXkpIAogICAgICAgICAgICAmJiB0cmFuc2llbnRTdGF0ZS5nZXQoc3RhdGVLZXkpLnRvU3RyaW5nKCkgIT09ICJudWxsIiAKICAgICAgICAgICAgJiYgdHJhbnNpZW50U3RhdGUuZ2V0KHN0YXRlS2V5KS50b1N0cmluZygpICE9PSAiIgogICAgICAgICAgICAmJiAiIitzdGF0ZUtleSAhPT0gIm9iamVjdEF0dHJpYnV0ZXMiKSAKICAgICAgICB7CiAgICAgICAgICBodG1sICs9ICI8dHI+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIHN0YXRlS2V5ICsgIjwvdGQ+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIHRyYW5zaWVudFN0YXRlLmdldChzdGF0ZUtleSkgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwoKICAgICAgaHRtbCArPSAiPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPiI7CiAgICAgIC8vIEJ1aWxkIHRoZSB0YWJsZSBvZiBvYmplY3RBdHRyaWJ1dGVzIGluIHNoYXJlZFN0YXRlCiAgICAgIGlmIChzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKSkKICAgICAgeyAgIAogICAgICAgIGh0bWwgKz0gIjx0aGVhZCBjbGFzcz1cInRoZWFkLWRhcmtcIj48dHI+PHRoIGNsYXNzPVwicHgtMSBweS0xXCIgY29sc3Bhbj1cIjJcIj5TaGFyZWQgT2JqZWN0IEF0dHJpYnV0ZXMgKHNoYXJlZFN0YXRlLmdldCk8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAgIHZhciBlbnRyaWVzID0gc2hhcmVkU3RhdGUuZ2V0KCdvYmplY3RBdHRyaWJ1dGVzJykuZW50cnlTZXQoKS50b0FycmF5KCk7CiAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkgeyAvLyBzaG93aW5nIGhvdyB0byB1c2UgZW50cnlTZXQoKS4gQ2FuIHVzZSBrZXlTZXQoKS4KICAgICAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBlbnRyeS5nZXRLZXkoKSArICI8L3RkPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBlbnRyeS5nZXRWYWx1ZSgpICsgIjwvdGQ+PC90cj4iOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGh0bWwgKz0gIjx0cj48dGQgY29sc3Bhbj1cIjJcIj5FTVBUWTwvdGQ+PC90cj4iOwogICAgICB9CiAgICAgIGh0bWwgKz0gIjwvdGFibGU+IjsKCiAgICAgIGh0bWwgKz0gIjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWRcIj4iOwogICAgICAvLyBCdWlsZCB0aGUgdGFibGUgb2Ygb2JqZWN0QXR0cmlidXRlcyBpbiB0cmFuc2llbnRTdGF0ZQogICAgICBpZiAodHJhbnNpZW50U3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikpCiAgICAgIHsKICAgICAgICBodG1sICs9ICI8dGhlYWQgY2xhc3M9XCJ0aGVhZC1kYXJrXCI+PHRyPjx0aCBjbGFzcz1cInB4LTEgcHktMVwiIGNvbHNwYW49XCIyXCI+VHJhbnNpZW50IE9iamVjdCBBdHRyaWJ1dGVzICh0cmFuc2llbnRTdGF0ZS5nZXQpPC90aD48L3RyPjwvdGhlYWQ+IjsKICAgICAgICB2YXIga2V5cyA9IHRyYW5zaWVudFN0YXRlLmdldCgnb2JqZWN0QXR0cmlidXRlcycpLmtleVNldCgpLnRvQXJyYXkoKTsKICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyAvLyBzaG93aW5nIGhvdyB0byB1c2Uga2V5U2V0KCkuIENhbiB1c2UgZW50cnlTZXQoKS4KICAgICAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBrZXkgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgdHJhbnNpZW50U3RhdGUuZ2V0KCdvYmplY3RBdHRyaWJ1dGVzJykuZ2V0KGtleSkgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPkVNUFRZPC90ZD48L3RyPiI7CiAgICAgIH0KICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwoKICAgICAgaHRtbCArPSAiPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPiI7CiAgICAgIGh0bWwgKz0gIjx0aGVhZCBjbGFzcz1cInRoZWFkLWRhcmtcIj48dHI+PHRoIGNsYXNzPVwicHgtMSBweS0xXCIgY29sc3Bhbj1cIjJcIj5ub2RlU3RhdGUuZ2V0ICh0cmFuc2llbnRTdGF0ZSwgc2VjdXJlU3RhdGUsIHNoYXJlZFN0YXRlKTwvdGg+PC90cj48L3RoZWFkPiI7CiAgICAgIC8vIGdldCBhbGwgdGhlIGtleXMgaW4gbm9kZVN0YXRlCiAgICAgIHZhciBpdGVyYXRvciA9IG5vZGVTdGF0ZS5rZXlzKCkuaXRlcmF0b3IoKTsKICAgICAgdmFyIHN0YXRlS2V5cyA9IFtdOwogICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7CiAgICAgICAgICBzdGF0ZUtleXMucHVzaChpdGVyYXRvci5uZXh0KCkudG9TdHJpbmcoKSk7CiAgICAgIH0KICAgICAgc3RhdGVLZXlzLmZvckVhY2goZnVuY3Rpb24gKHN0YXRlS2V5KSB7CiAgICAgICAgaWYgKG5vZGVTdGF0ZS5nZXQoc3RhdGVLZXkpIAogICAgICAgICAgICAmJiBub2RlU3RhdGUuZ2V0KHN0YXRlS2V5KS50b1N0cmluZygpICE9PSAibnVsbCIKICAgICAgICAgICAgJiYgbm9kZVN0YXRlLmdldChzdGF0ZUtleSkudG9TdHJpbmcoKSAhPT0gIiIKICAgICAgICAgICAgJiYgIiIrc3RhdGVLZXkgIT09ICJwYWdlTm9kZUNhbGxiYWNrcyIpIC8vcGFnZU5vZGVDYWxsYmFja3MgYXJlIGludGVybmFsIHRvIHRoZSBQYWdlIE5vZGUgYW5kIG5vdCBuZWVkZWQvdXNlZCAgCgogICAgICAgIHsKICAgICAgICAgIGh0bWwgKz0gIjx0cj48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgc3RhdGVLZXkgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgbm9kZVN0YXRlLmdldChzdGF0ZUtleSkgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwoKCiAgICAgIGh0bWwgKz0gIjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWRcIj4iOwogICAgICAvLyBsb29raW5nIGZvciBhIHdheSB0byBidWlsZCB0aGlzIEFNIFVzZXIgUHJvZmlsZSBsaXN0IGR5bmFtaWNhbGx5CiAgICAgIHZhciBvYmpBTUF0dHJzID0gWwogICAgICAgICJ1aWQiLAogICAgICAgICJjbiIsCiAgICAgICAgImluZXRVc2VyU3RhdHVzIiwKICAgICAgICAiZ2l2ZW5OYW1lIiwKICAgICAgICAic24iLAogICAgICAgICJtYWlsIiwKICAgICAgICAiZGVzY3JpcHRpb24iLAogICAgICAgICJ0ZWxlcGhvbmVOdW1iZXIiLAogICAgICAgICJzdHJlZXQiLAogICAgICAgICJsIiwKICAgICAgICAicG9zdGFsQ29kZSIsCiAgICAgICAgImNvIiwKICAgICAgICAic3QiLAogICAgICAgICJkaXNwbGF5TmFtZSIsCiAgICAgICAgImZyLWF0dHItaXN0cjEiLAogICAgICAgICJmci1hdHRyLWlzdHIyIiwKICAgICAgICAiZnItYXR0ci1pc3RyMyIsCiAgICAgICAgImZyLWF0dHItaXN0cjQiLAogICAgICAgICJmci1hdHRyLWlzdHI1IiwKICAgICAgICAiZnItYXR0ci1zdHIxIiwKICAgICAgICAiZnItYXR0ci1zdHIyIiwKICAgICAgICAiZnItYXR0ci1zdHIzIiwKICAgICAgICAiZnItYXR0ci1zdHI0IiwKICAgICAgICAiZnItYXR0ci1zdHI1IiwKICAgICAgICAiZnItYXR0ci1pbXVsdGkxIiwKICAgICAgICAiZnItYXR0ci1pbXVsdGkyIiwKICAgICAgICAiZnItYXR0ci1pbXVsdGkzIiwKICAgICAgICAiZnItYXR0ci1pbXVsdGk0IiwKICAgICAgICAiZnItYXR0ci1pbXVsdGk1IiwKICAgICAgICAiZnItYXR0ci1tdWx0aTEiLAogICAgICAgICJmci1hdHRyLW11bHRpMiIsCiAgICAgICAgImZyLWF0dHItbXVsdGkzIiwKICAgICAgICAiZnItYXR0ci1tdWx0aTQiLAogICAgICAgICJmci1hdHRyLW11bHRpNSIsCiAgICAgICAgImZyLWF0dHItaWRhdGUxIiwKICAgICAgICAiZnItYXR0ci1pZGF0ZTIiLAogICAgICAgICJmci1hdHRyLWlkYXRlMyIsCiAgICAgICAgImZyLWF0dHItaWRhdGU0IiwKICAgICAgICAiZnItYXR0ci1pZGF0ZTUiLAogICAgICAgICJmci1hdHRyLWRhdGUxIiwKICAgICAgICAiZnItYXR0ci1kYXRlMiIsCiAgICAgICAgImZyLWF0dHItZGF0ZTMiLAogICAgICAgICJmci1hdHRyLWRhdGU0IiwKICAgICAgICAiZnItYXR0ci1kYXRlNSIsCiAgICAgICAgImZyLWF0dHItaWludDEiLAogICAgICAgICJmci1hdHRyLWlpbnQyIiwKICAgICAgICAiZnItYXR0ci1paW50MyIsCiAgICAgICAgImZyLWF0dHItaWludDQiLAogICAgICAgICJmci1hdHRyLWlpbnQ1IiwKICAgICAgICAiZnItYXR0ci1pbnQxIiwKICAgICAgICAiZnItYXR0ci1pbnQyIiwKICAgICAgICAiZnItYXR0ci1pbnQzIiwKICAgICAgICAiZnItYXR0ci1pbnQ0IiwKICAgICAgICAiZnItYXR0ci1pbnQ1IgogICAgICBdOyAgCgogICAgICAvLyBCdWlsZCB0aGUgdGFibGUgb2YgaWRSZXBvc2l0b3J5IGJpbmRpbmcKICAgICAgdmFyIGF0dHJzMjsKICAgICAgaWYgKHNoYXJlZFN0YXRlLmdldCgiX2lkIikgJiYgaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpLCAidWlkIikpCiAgICAgIHsKICAgICAgICBodG1sICs9ICI8dGhlYWQgY2xhc3M9XCJ0aGVhZC1kYXJrXCI+PHRyPjx0aCBjbGFzcz1cInB4LTEgcHktMVwiIGNvbHNwYW49XCIyXCI+aWRSZXBvc2l0b3J5IEFNIFVzZXIgUHJvZmlsZTwvdGg+PC90cj48L3RoZWFkPiI7ICAgICAgICAKICAgICAgICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwogICAgICAgIG9iakFNQXR0cnMuZm9yRWFjaChmdW5jdGlvbiAoYXR0cikgewogICAgICAgICAgYXR0cnMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCBhdHRyKTsgIAogICAgICAgICAgaWYgKGF0dHJzICYmICIiK2F0dHJzICE9PSAibnVsbCIgJiYgIiIrYXR0cnMgIT09ICIiICYmICIiK2F0dHJzLnNpemUoKT4wKXsKICAgICAgICAgICAgaWYgKGF0dHJzLnNpemUoKT09PTEpewogICAgICAgICAgICAgICAgYXR0cnMgPSBzaW5nbGVWYWx1ZShhdHRycyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBodG1sICs9ICI8dHI+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIGF0dHIgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgYXR0cnMgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgICB9CiAgICAgICAgfSk7ICAgICAgCiAgICAgIH0KICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwogICAgICAKICAgICAgaHRtbCArPSAiPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPiI7CiAgICAgIGh0bWwgKz0gIjx0aGVhZCBjbGFzcz1cInRoZWFkLWRhcmtcIj48dHI+PHRoIGNsYXNzPVwicHgtMSBweS0xXCIgY29sc3Bhbj1cIjJcIj5SZXF1ZXN0IEhlYWRlcnM8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAvL2h0bWwgKz0gIjx0cj48dGQgY29sc3Bhbj1cIjJcIj4iICsgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSArICI8L3RkPjwvdHI+IjsKICAgICAgdmFyIHJIZWFkZXJzID0gU3RyaW5nKHJlcXVlc3RIZWFkZXJzKS5zcGxpdCgnXSwgJykubWFwKGZ1bmN0aW9uIChoZWFkZXIpewogICAgICAgIHJldHVybiBoZWFkZXIuc3BsaXQoJz0nKVswXS5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpOyAKICAgICAgfSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICBySGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChoZWFkZXJOYW1lKSB7CiAgICAgICAgdmFyIGhlYWRlciA9IHJlcXVlc3RIZWFkZXJzLmdldChoZWFkZXJOYW1lKTsKICAgICAgICBodG1sICs9ICI8dHI+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIGhlYWRlck5hbWUgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgaGVhZGVyLmdldCgwKSArICI8L3RkPjwvdHI+IjsKICAgICAgfSk7ICAgIAogICAgCiAgICBodG1sICs9ICI8L3RhYmxlPiI7CiAgICAgIAogICAgcmV0dXJuIGh0bWw7CiAgfQogIAogIC8vYnVpbGRzIHRoZSBodG1sIHRvIGRpc3BsYXkgdGhlIG1lc3NhZ2UgaW4gdGhlIGJyb3dzZXIgb24gdGhlIGNhbGxiYWNrCiAgLy91c2UgdmlldyBzb3VyY2UgaW4gYnJvd3NlciBhbmQgbG9vayBmb3IgY2xhc3M9ImNhbGxiYWNrLWNvbXBvbmVudCIgdG8gc2VlIGh0bWwgcmVzcG9uc2UKICBmdW5jdGlvbiBkaXNwbGF5TWVzc2FnZShtZXNzYWdlKSB7CiAgICAgIHZhciBhbmNob3IgPSAiYW5jaG9yLSIuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CiAgICAgIHZhciBoYWxpZ24gPSAibGVmdCI7CiAgICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4iLmNvbmNhdCgKICAgICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAgICAgICAgICAgICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAgICAgICAgICAgICAgICAgIiAgdmFyIG1lc3NhZ2UgPSBlLmZpcnN0RWxlbWVudENoaWxkO1xuIikuY29uY2F0KAogICAgICAgICAgICAgICAgICAgICAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwiXCI7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgbWVzc2FnZS5zdHlsZSA9IFwiXCI7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIG1lc3NhZ2UuYWxpZ24gPSBcIiIpLmNvbmNhdChoYWxpZ24pLmNvbmNhdCgiXCI7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBtZXNzYWdlLmlubmVySFRNTCA9ICciKS5jb25jYXQobWVzc2FnZSkuY29uY2F0KCInO1xuIikuY29uY2F0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICB9XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSkiKQogICAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suVGV4dE91dHB1dENhbGxiYWNrLAogICAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICAgICkKICAgICAgaWYgKG1lc3NhZ2UubGVuZ3RoICYmIGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKAogICAgICAgICAgICAgIG5ldyBmci5UZXh0T3V0cHV0Q2FsbGJhY2soCiAgICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgICAgYW5jaG9yCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkKICAgICAgICAgICkuYnVpbGQoKQogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgICAgfQogIH0KCiAgLyoKICAgKiBHZW5lcmF0ZSBhIHRva2VuIGluIHRoZSBkZXNpcmVkIGZvcm1hdC4gQWxsICd4JyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHJhbmRvbSBudW1iZXIgMC05LgogICAqIFRoaXMgaXMgbmVlZGVkIHRvIGhhdmUgYSB1bmlxdWUgZGl2KGFuY2hvci14KSBvbiB0aGUgaHRtbCBjYWxsYmFjayB0aGF0IHdlIGNhbiBwb3B1bGF0ZSBkYXRhCiAgICogRXhhbXBsZToKICAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICovCiAgZnVuY3Rpb24gZ2VuZXJhdGVOdW1lcmljVG9rZW4oZm9ybWF0KSB7CiAgICAgIHJldHVybiBmb3JtYXQucmVwbGFjZSgvW3hdL2csIGZ1bmN0aW9uIChjKSB7CiAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxMCB8IDA7CiAgICAgICAgICB2YXIgdiA9IHI7CiAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICAgIH0pOwogIH0KCiAgLy8gZ2V0IGEgc2luZ2xlVmFsdWUgZnJvbSBhIEhhc2hTZXQKICBmdW5jdGlvbiBzaW5nbGVWYWx1ZSh4KQogIHsKICAgIGlmKHguc2l6ZSgpPjApCiAgICAgIHsKICAgICAgICByZXR1cm4geC5pdGVyYXRvcigpLm5leHQoKTsKICAgICAgfQogICAgICAKICAgIHJldHVybiAiIjsKICAgIAogIH0KCn0oKSk7IC8vIHNlbGYtaW52b2tpbmcgZnVuY3Rpb24=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -5148,18 +5432,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "transfer-encoding", + "value": "chunked" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:24 GMT" + "value": "Wed, 19 Jun 2024 21:28:27 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -5167,20 +5459,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 800, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:24.603Z", - "time": 69, + "startedDateTime": "2024-06-19T21:28:28.047Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -5188,11 +5476,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 69 + "wait": 53 } }, { - "_id": "b8afb85169152369b0e1f80254bd7a53", + "_id": "5e9aaa7940499ae88cb8e5c5b2d83090", "_order": 0, "cache": {}, "request": { @@ -5204,16 +5492,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -5223,28 +5511,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1638, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Scripted Policy Condition\"" + "value": "name eq \"FrodoTestScript4\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Scripted%20Policy%20Condition%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript4%22" }, "response": { - "bodySize": 6917, + "bodySize": 1131, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 6917, - "text": "{\"result\":[{\"_id\":\"9de3eb62-f131-4fac-a294-7bd170fd4acb\",\"name\":\"Scripted Policy Condition\",\"description\":\"Default global script for Scripted Policy Conditions\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qKgogKiBUaGlzIGlzIGEgUG9saWN5IENvbmRpdGlvbiBleGFtcGxlIHNjcmlwdC4gSXQgZGVtb25zdHJhdGVzIGhvdyB0byBhY2Nlc3MgYSB1c2VyJ3MgaW5mb3JtYXRpb24sCiAqIHVzZSB0aGF0IGluZm9ybWF0aW9uIGluIGV4dGVybmFsIEhUVFAgY2FsbHMgYW5kIG1ha2UgYSBwb2xpY3kgZGVjaXNpb24gYmFzZWQgb24gdGhlIG91dGNvbWUuCiAqLwoKdmFyIHVzZXJBZGRyZXNzLCB1c2VySVAsIHJlc291cmNlSG9zdDsKCmlmICh2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkpIHsKCiAgICB2YXIgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9IGdldENvdW50cnlGcm9tVXNlckFkZHJlc3MoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJDb3VudHJ5IHJldHJpZXZlZCBmcm9tIHVzZXIncyBhZGRyZXNzOiAiICsgY291bnRyeUZyb21Vc2VyQWRkcmVzcyk7CiAgICB2YXIgY291bnRyeUZyb21Vc2VySVAgPSBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpOwogICAgbG9nZ2VyLm1lc3NhZ2UoIkNvdW50cnkgcmV0cmlldmVkIGZyb20gdXNlcidzIElQOiAiICsgY291bnRyeUZyb21Vc2VySVApOwogICAgdmFyIGNvdW50cnlGcm9tUmVzb3VyY2VVUkkgPSBnZXRDb3VudHJ5RnJvbVJlc291cmNlVVJJKCk7CiAgICBsb2dnZXIubWVzc2FnZSgiQ291bnRyeSByZXRyaWV2ZWQgZnJvbSByZXNvdXJjZSBVUkk6ICIgKyBjb3VudHJ5RnJvbVJlc291cmNlVVJJKTsKCiAgICBpZiAoY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21Vc2VySVAgJiYgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21SZXNvdXJjZVVSSSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIFN1Y2NlZWRlZCIpOwogICAgICAgIHJlc3BvbnNlQXR0cmlidXRlcy5wdXQoImNvdW50cnlPZk9yaWdpbiIsIFtjb3VudHJ5RnJvbVVzZXJBZGRyZXNzXSk7CiAgICAgICAgYXV0aG9yaXplZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIEZhaWxlZCIpOwogICAgICAgIGF1dGhvcml6ZWQgPSBmYWxzZTsKICAgIH0KCn0gZWxzZSB7CiAgICBsb2dnZXIubWVzc2FnZSgiUmVxdWlyZWQgcGFyYW1ldGVycyBub3QgZm91bmQuIEF1dGhvcml6YXRpb24gRmFpbGVkLiIpOwogICAgYXV0aG9yaXplZCA9IGZhbHNlOwp9CgovKioKICogVXNlIHRoZSB1c2VyJ3MgYWRkcmVzcyB0byBsb29rdXAgdGhlaXIgY291bnRyeSBvZiByZXNpZGVuY2UuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgdXNlcidzIGNvdW50cnkgb2YgcmVzaWRlbmNlLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21Vc2VyQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlckFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgZ2VvY29kZSA9IEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvY29kZS5yZXN1bHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGdlb2NvZGUucmVzdWx0c1tpXTsKICAgICAgICB2YXIgajsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgcmVzdWx0LmFkZHJlc3NfY29tcG9uZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAocmVzdWx0LmFkZHJlc3NfY29tcG9uZW50c1tpXS50eXBlc1swXSA9PSAiY291bnRyeSIpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYWRkcmVzc19jb21wb25lbnRzW2ldLmxvbmdfbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKLyoqCiAqIFVzZSB0aGUgdXNlcidzIElQIHRvIGxvb2t1cCB0aGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqLwpmdW5jdGlvbiBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgdXNlcklQKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdC5jb3VudHJ5OwogICAgfQp9CgovKioKICogVXNlIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UncyBob3N0IG5hbWUgdG8gbG9va3VwIHRoZSBjb3VudHJ5IHdoZXJlIHRoZSByZXNvdXJjZSBpcyBob3N0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBpbiB3aGljaCB0aGUgcmVzb3VyY2UgaXMgaG9zdGVkLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21SZXNvdXJjZVVSSSgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgZW5jb2RlVVJJQ29tcG9uZW50KHJlc291cmNlSG9zdCkpOwogICAgICByZXF1ZXN0LnNldE1ldGhvZCgiR0VUIik7CgogICAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3QpLmdldCgpOwogICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwoKICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIGlmIChyZXN1bHQpIHsKICAgICAgICByZXR1cm4gcmVzdWx0LmNvdW50cnk7CiAgICB9Cn0KCi8qKgogKiBSZXRyaWV2ZSBhbmQgdmFsaWRhdGUgdGhlIHZhcmlhYmxlcyByZXF1aXJlZCB0byBtYWtlIHRoZSBleHRlcm5hbCBIVFRQIGNhbGxzLgogKgogKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2lsbCBiZSB0cnVlIGlmIHZhbGlkYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkgewogICAgdmFyIHVzZXJBZGRyZXNzU2V0ID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKCJwb3N0YWxBZGRyZXNzIik7CiAgICBpZiAodXNlckFkZHJlc3NTZXQgPT0gbnVsbCB8fCB1c2VyQWRkcmVzc1NldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gYWRkcmVzcyBzcGVjaWZpZWQgZm9yIHVzZXI6ICIgKyB1c2VybmFtZSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdXNlckFkZHJlc3MgPSB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIGFkZHJlc3M6ICIgKyB1c2VyQWRkcmVzcyk7CgogICAgaWYgKCFlbnZpcm9ubWVudCkgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJObyBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiB0aGUgZXZhbHVhdGlvbiByZXF1ZXN0LiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB2YXIgaXBTZXQgPSBlbnZpcm9ubWVudC5nZXQoIklQIik7CiAgICBpZiAoaXBTZXQgPT0gbnVsbCB8fCBpcFNldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gSVAgc3BlY2lmaWVkIGluIHRoZSBldmFsdWF0aW9uIHJlcXVlc3QgZW52aXJvbm1lbnQgcGFyYW1ldGVycy4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB1c2VySVAgPSBpcFNldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIElQOiAiICsgdXNlcklQKTsKCiAgICBpZiAoIXJlc291cmNlVVJJKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIHJlc291cmNlIFVSSSBzcGVjaWZpZWQuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmVzb3VyY2VIb3N0ID0gcmVzb3VyY2VVUkkubWF0Y2goL14oLio6XC9cLykod3d3XC4pPyhbQS1aYS16MC05XC1cLl0rKSg6WzAtOV0rKT8oLiopJC8pWzNdOwogICAgbG9nZ2VyLm1lc3NhZ2UoIlJlc291cmNlIGhvc3Q6ICIgKyByZXNvdXJjZUhvc3QpOwoKICAgIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"POLICY_CONDITION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1131, + "text": "{\"result\":[{\"_id\":\"10643e95-873a-4ec0-b713-a7f56760d179\",\"name\":\"FrodoTestScript4\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -5294,20 +5586,24 @@ }, { "name": "content-length", - "value": "6917" + "value": "1131" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:24 GMT" + "value": "Wed, 19 Jun 2024 21:28:27 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -5317,14 +5613,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:24.685Z", - "time": 57, + "startedDateTime": "2024-06-19T21:28:28.105Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -5332,11 +5628,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 57 + "wait": 52 } }, { - "_id": "afa15dc27a4267006563eb6adc5fc01a", + "_id": "abae260899074b15f700a18919a6f82f", "_order": 0, "cache": {}, "request": { @@ -5348,16 +5644,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -5367,28 +5663,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1614, + "headersSize": 1666, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"debug\"" + "value": "name eq \"pushBomb.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22debug%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22pushBomb.js%22" }, "response": { - "bodySize": 3308, + "bodySize": 2069, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 3308, - "text": "{\"result\":[{\"_id\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"name\":\"debug\",\"description\":\"Display sharedState, transientState, and headers.\",\"script\":\"LyogZGVidWcKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogRGlzcGxheSBzaGFyZWRTdGF0ZSwgdHJhbnNpZW50U3RhdGUsIGFuZCBoZWFkZXJzLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwp2YXIgYW5jaG9yID0gImFuY2hvci0iLmNvbmNhdChnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4JykpOwp2YXIgaGFsaWduID0gImxlZnQiOwp2YXIgbWVzc2FnZSA9ICI8cD48Yj5TaGFyZWQgU3RhdGU8L2I+Ojxici8+Ii5jb25jYXQoCiAgICAgIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpLmNvbmNhdCgKICAgICI8cD48Yj5UcmFuc2llbnQgU3RhdGU8L2I+Ojxici8+IikuY29uY2F0KAogICAgICB0cmFuc2llbnRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+UmVxdWVzdCBIZWFkZXJzPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgICAgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikKdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwidGV4dC1sZWZ0XCI7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIikuY29uY2F0KG1lc3NhZ2UpLmNvbmNhdCgiJztcbiIpLmNvbmNhdCgKICAiICB9XG4iKS5jb25jYXQoCiAgIn0pIikKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawopCmlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgIGFuY2hvcgogICAgICAgICksCiAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICApLmJ1aWxkKCkKfQplbHNlIHsKICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0KCiAvKgogICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAqIAogICogRXhhbXBsZToKICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICogJ3h4eC14eHgnIHByb2R1Y2VzICc0MzItNTIxJwogICovCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxMHwwOwogICAgICAgIHZhciB2ID0gcjsKICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 2069, + "text": "{\"result\":[{\"_id\":\"0414eed8-abfd-43bb-94b5-c841a8ba2c98\",\"name\":\"pushBomb.js\",\"description\":\"null\",\"script\":\"dmFyIGF0dHJpYnV0ZSA9ICJmci1hdHRyLXN0cjIiOwp2YXIgdGhyZXNob2xkID0gMjsKb3V0Y29tZSA9ICJkZWZhdWx0IjsKdmFyIG5vdyA9IG5ldyBEYXRlKCkgIAp2YXIgZXBvY2ggPSBNYXRoLnJvdW5kKG5vdy5nZXRUaW1lKCkgLyAxMDAwKTsKdmFyIGVwb2NoQ3VycmVudE1pbnV0ZSA9IE1hdGgucm91bmQoZXBvY2gvNjApOwoKdmFyIHVzZXJBdHRyOwp2YXIgX2lkID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKdmFyIGVwb2NoQXR0ck1pbnV0ZT0wOwp2YXIgYXR0ZW1wdENvdW50PTE7Cgp2YXIgdXNlclByZWZlcmVuY2VzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShfaWQsICJmci1pZG0tcHJlZmVyZW5jZXMiKS50b1N0cmluZygpOwoKaWYodXNlclByZWZlcmVuY2VzLmluZGV4T2YoIlwiY3VzdG9tX3B1c2hcIjp0cnVlIikgPiAtMSkKewogICAgb3V0Y29tZSA9ICJzdXNwZW5kZWQiOwp9CmVsc2UKewogIHZhciB1c2VyQXR0clJhdyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoX2lkLCBhdHRyaWJ1dGUpOwogIGlmICh1c2VyQXR0clJhdyAmJiB1c2VyQXR0clJhdy5pdGVyYXRvcigpLmhhc05leHQoKSkgewogICAgICB1c2VyQXR0ciA9IEpTT04ucGFyc2UodXNlckF0dHJSYXcuaXRlcmF0b3IoKS5uZXh0KCkudG9TdHJpbmcoKSk7CiAgICAgIGVwb2NoQXR0ck1pbnV0ZSA9IHVzZXJBdHRyWzBdOwogICAgICBhdHRlbXB0Q291bnQgPSB1c2VyQXR0clsxXTsKICAgICAgYXR0ZW1wdENvdW50ID0gYXR0ZW1wdENvdW50ICsgMTsKICB9CgogIC8vaWYoCgogIHZhciBuZXdBdHRyOwogIGlmKGVwb2NoQ3VycmVudE1pbnV0ZT09ZXBvY2hBdHRyTWludXRlKSB7CiAgICAgIG5ld0F0dHIgPSBTdHJpbmcoIlsiICsgZXBvY2hBdHRyTWludXRlLnRvU3RyaW5nKCkgKyAiLCIgKyBhdHRlbXB0Q291bnQudG9TdHJpbmcoKSAgKyAiXSIpOwogIH0KICBlbHNlIHsKICAgICAgYXR0ZW1wdENvdW50PTE7CiAgICAgIG5ld0F0dHIgPSBTdHJpbmcoIlsiICsgZXBvY2hDdXJyZW50TWludXRlLnRvU3RyaW5nKCkgKyAiLCIgKyBhdHRlbXB0Q291bnQudG9TdHJpbmcoKSArICJdIik7CiAgfQogIGlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoX2lkLCAiZnItYXR0ci1zdHIyIixbbmV3QXR0cl0pOwoKICBpZihhdHRlbXB0Q291bnQ+dGhyZXNob2xkKSB7CiAgICBvdXRjb21lID0gInRydWUiOwogIH0KICBlbHNlIHsKICAgIG91dGNvbWUgPSAiZmFsc2UiOwogIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -5438,20 +5738,24 @@ }, { "name": "content-length", - "value": "3308" + "value": "2069" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:24 GMT" + "value": "Wed, 19 Jun 2024 21:28:27 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -5461,14 +5765,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:24.751Z", - "time": 61, + "startedDateTime": "2024-06-19T21:28:28.161Z", + "time": 65, "timings": { "blocked": -1, "connect": -1, @@ -5476,11 +5780,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 61 + "wait": 65 } }, { - "_id": "1a05176e811af286cab7cd2351a67f5d", + "_id": "c5cda9fdad2bde1459bbb88c54fff9e7", "_order": 0, "cache": {}, "request": { @@ -5492,16 +5796,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -5511,28 +5815,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1652, + "headersSize": 1700, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"GitHub Profile Normalization (VS)\"" + "value": "name eq \"Device Id (Match) - Client Side\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22GitHub%20Profile%20Normalization%20%28VS%29%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Device%20Id%20%28Match%29%20-%20Client%20Side%22" }, "response": { - "bodySize": 1570, + "bodySize": 13210, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1570, - "text": "{\"result\":[{\"_id\":\"23143919-6b78-40c3-b25e-beca19b229e0\",\"name\":\"GitHub Profile Normalization (VS)\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJHaXRIdWIgcmF3UHJvZmlsZTogIityYXdQcm9maWxlKQoKcmV0dXJuIGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZmlyc3RfbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3RfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5waWN0dXJlLmRhdGEudXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLmVtYWlsKSkp\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 13210, + "text": "{\"result\":[{\"_id\":\"157298c0-7d31-4059-a95b-eeb08473b7e5\",\"name\":\"Device Id (Match) - Client Side\",\"description\":\"Default global script for client side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGZvbnREZXRlY3RvciA9IChmdW5jdGlvbiAoKSB7CiAgICAvKioKICAgICAqIEphdmFTY3JpcHQgY29kZSB0byBkZXRlY3QgYXZhaWxhYmxlIGF2YWlsYWJpbGl0eSBvZiBhCiAgICAgKiBwYXJ0aWN1bGFyIGZvbnQgaW4gYSBicm93c2VyIHVzaW5nIEphdmFTY3JpcHQgYW5kIENTUy4KICAgICAqCiAgICAgKiBBdXRob3IgOiBMYWxpdCBQYXRlbAogICAgICogV2Vic2l0ZTogaHR0cDovL3d3dy5sYWxpdC5vcmcvbGFiL2phdmFzY3JpcHQtY3NzLWZvbnQtZGV0ZWN0LwogICAgICogTGljZW5zZTogQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wCiAgICAgKiAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAgICAqIFZlcnNpb246IDAuMTUgKDIxIFNlcCAyMDA5KQogICAgICogICAgICAgICAgQ2hhbmdlZCBjb21wYXJpc2lvbiBmb250IHRvIGRlZmF1bHQgZnJvbSBzYW5zLWRlZmF1bHQtZGVmYXVsdCwKICAgICAqICAgICAgICAgIGFzIGluIEZGMy4wIGZvbnQgb2YgY2hpbGQgZWxlbWVudCBkaWRuJ3QgZmFsbGJhY2sKICAgICAqICAgICAgICAgIHRvIHBhcmVudCBlbGVtZW50IGlmIHRoZSBmb250IGlzIG1pc3NpbmcuCiAgICAgKiBWZXJzaW9uOiAwLjIgKDA0IE1hciAyMDEyKQogICAgICogICAgICAgICAgQ29tcGFyaW5nIGZvbnQgYWdhaW5zdCBhbGwgdGhlIDMgZ2VuZXJpYyBmb250IGZhbWlsaWVzIGllLAogICAgICogICAgICAgICAgJ21vbm9zcGFjZScsICdzYW5zLXNlcmlmJyBhbmQgJ3NhbnMnLiBJZiBpdCBkb2Vzbid0IG1hdGNoIGFsbCAzCiAgICAgKiAgICAgICAgICB0aGVuIHRoYXQgZm9udCBpcyAxMDAlIG5vdCBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbQogICAgICogVmVyc2lvbjogMC4zICgyNCBNYXIgMjAxMikKICAgICAqICAgICAgICAgIFJlcGxhY2VkIHNhbnMgd2l0aCBzZXJpZiBpbiB0aGUgbGlzdCBvZiBiYXNlRm9udHMKICAgICAqLwogICAgLyoKICAgICAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMgRm9yZ2VSb2NrIEFTLgogICAgICovCiAgICB2YXIgZGV0ZWN0b3IgPSB7fSwgYmFzZUZvbnRzLCB0ZXN0U3RyaW5nLCB0ZXN0U2l6ZSwgaCwgcywgZGVmYXVsdFdpZHRoID0ge30sIGRlZmF1bHRIZWlnaHQgPSB7fSwgaW5kZXg7CgogICAgLy8gYSBmb250IHdpbGwgYmUgY29tcGFyZWQgYWdhaW5zdCBhbGwgdGhlIHRocmVlIGRlZmF1bHQgZm9udHMuCiAgICAvLyBhbmQgaWYgaXQgZG9lc24ndCBtYXRjaCBhbGwgMyB0aGVuIHRoYXQgZm9udCBpcyBub3QgYXZhaWxhYmxlLgogICAgYmFzZUZvbnRzID0gWydtb25vc3BhY2UnLCAnc2Fucy1zZXJpZicsICdzZXJpZiddOwoKICAgIC8vd2UgdXNlIG0gb3IgdyBiZWNhdXNlIHRoZXNlIHR3byBjaGFyYWN0ZXJzIHRha2UgdXAgdGhlIG1heGltdW0gd2lkdGguCiAgICAvLyBBbmQgd2UgdXNlIGEgTExpIHNvIHRoYXQgdGhlIHNhbWUgbWF0Y2hpbmcgZm9udHMgY2FuIGdldCBzZXBhcmF0ZWQKICAgIHRlc3RTdHJpbmcgPSAibW1tbW1tbW1tbWxsaSI7CgogICAgLy93ZSB0ZXN0IHVzaW5nIDcycHggZm9udCBzaXplLCB3ZSBtYXkgdXNlIGFueSBzaXplLiBJIGd1ZXNzIGxhcmdlciB0aGUgYmV0dGVyLgogICAgdGVzdFNpemUgPSAnNzJweCc7CgogICAgaCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07CgogICAgLy8gY3JlYXRlIGEgU1BBTiBpbiB0aGUgZG9jdW1lbnQgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgdGV4dCB3ZSB1c2UgdG8gdGVzdAogICAgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIHMuc3R5bGUuZm9udFNpemUgPSB0ZXN0U2l6ZTsKICAgIHMuaW5uZXJIVE1MID0gdGVzdFN0cmluZzsKICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHQgd2lkdGggZm9yIHRoZSB0aHJlZSBiYXNlIGZvbnRzCiAgICAgICAgcy5zdHlsZS5mb250RmFtaWx5ID0gYmFzZUZvbnRzW2luZGV4XTsKICAgICAgICBoLmFwcGVuZENoaWxkKHMpOwogICAgICAgIGRlZmF1bHRXaWR0aFtiYXNlRm9udHNbaW5kZXhdXSA9IHMub2Zmc2V0V2lkdGg7IC8vd2lkdGggZm9yIHRoZSBkZWZhdWx0IGZvbnQKICAgICAgICBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dID0gcy5vZmZzZXRIZWlnaHQ7IC8vaGVpZ2h0IGZvciB0aGUgZGVmdWFsdCBmb250CiAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgIH0KCiAgICBkZXRlY3Rvci5kZXRlY3QgPSBmdW5jdGlvbihmb250KSB7CiAgICAgICAgdmFyIGRldGVjdGVkID0gZmFsc2UsIGluZGV4LCBtYXRjaGVkOwogICAgICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgICAgIHMuc3R5bGUuZm9udEZhbWlseSA9IGZvbnQgKyAnLCcgKyBiYXNlRm9udHNbaW5kZXhdOyAvLyBuYW1lIG9mIHRoZSBmb250IGFsb25nIHdpdGggdGhlIGJhc2UgZm9udCBmb3IgZmFsbGJhY2suCiAgICAgICAgICAgIGguYXBwZW5kQ2hpbGQocyk7CiAgICAgICAgICAgIG1hdGNoZWQgPSAocy5vZmZzZXRXaWR0aCAhPT0gZGVmYXVsdFdpZHRoW2Jhc2VGb250c1tpbmRleF1dIHx8IHMub2Zmc2V0SGVpZ2h0ICE9PSBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dKTsKICAgICAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgICAgICAgICAgZGV0ZWN0ZWQgPSBkZXRlY3RlZCB8fCBtYXRjaGVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGV0ZWN0ZWQ7CiAgICB9OwoKICAgIHJldHVybiBkZXRlY3RvcjsKfSgpKTsKLyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAxNCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGNvbGxlY3RTY3JlZW5JbmZvID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBzY3JlZW5JbmZvID0ge307CiAgICAgICAgaWYgKHNjcmVlbikgewogICAgICAgICAgICBpZiAoc2NyZWVuLndpZHRoKSB7CiAgICAgICAgICAgICAgICBzY3JlZW5JbmZvLnNjcmVlbldpZHRoID0gc2NyZWVuLndpZHRoOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLmhlaWdodCkgewogICAgICAgICAgICAgICAgc2NyZWVuSW5mby5zY3JlZW5IZWlnaHQgPSBzY3JlZW4uaGVpZ2h0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLnBpeGVsRGVwdGgpIHsKICAgICAgICAgICAgICAgIHNjcmVlbkluZm8uc2NyZWVuQ29sb3VyRGVwdGggPSBzY3JlZW4ucGl4ZWxEZXB0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3Qgc2NyZWVuIGluZm9ybWF0aW9uLiBzY3JlZW4gaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzY3JlZW5JbmZvOwogICAgfSwKICAgIGNvbGxlY3RUaW1lem9uZUluZm8gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHRpbWV6b25lSW5mbyA9ICB7fSwgb2Zmc2V0ID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOwoKICAgICAgICBpZiAob2Zmc2V0KSB7CiAgICAgICAgICAgIHRpbWV6b25lSW5mby50aW1lem9uZSA9IG9mZnNldDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbm5vdCBjb2xsZWN0IHRpbWV6b25lIGluZm9ybWF0aW9uLiB0aW1lem9uZSBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aW1lem9uZUluZm87CiAgICB9LAogICAgY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbyA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgaWYgKG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IucGx1Z2lucykgewogICAgICAgICAgICB2YXIgcGx1Z2luc0luZm8gPSB7fSwgaSwgcGx1Z2lucyA9IG5hdmlnYXRvci5wbHVnaW5zOwogICAgICAgICAgICBwbHVnaW5zSW5mby5pbnN0YWxsZWRQbHVnaW5zID0gIiI7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGx1Z2luc0luZm8uaW5zdGFsbGVkUGx1Z2lucyA9IHBsdWdpbnNJbmZvLmluc3RhbGxlZFBsdWdpbnMgKyBwbHVnaW5zW2ldLmZpbGVuYW1lICsgIjsiOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcGx1Z2luc0luZm87CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBicm93c2VyIHBsdWdpbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLnBsdWdpbnMgaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgICAgIHJldHVybiB7fTsKICAgICAgICB9CgogICAgfSwKLy8gR2V0dGluZyBnZW9sb2NhdGlvbiB0YWtlcyBzb21lIHRpbWUgYW5kIGlzIGRvbmUgYXN5bmNocm9ub3VzbHksIGhlbmNlIG5lZWQgYSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgb25jZSBnZW9sb2NhdGlvbiBpcyByZXRyaWV2ZWQuCiAgICBjb2xsZWN0R2VvbG9jYXRpb25JbmZvID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIGdlb2xvY2F0aW9uSW5mbyA9IHt9LAogICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgICAgICAgICAgZ2VvbG9jYXRpb25JbmZvLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGU7CiAgICAgICAgICAgICAgICBnZW9sb2NhdGlvbkluZm8ubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGU7CiAgICAgICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgICAgICB9LCBlcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3QgZ2VvbG9jYXRpb24gaW5mb3JtYXRpb24uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVycm9yLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgY2FsbGJhY2soZ2VvbG9jYXRpb25JbmZvKTsKICAgICAgICAgICAgfTsKICAgICAgICBpZiAobmF2aWdhdG9yICYmIG5hdmlnYXRvci5nZW9sb2NhdGlvbikgewogICAgICAgICAgICAvLyBOQjogSWYgdXNlciBjaG9vc2VzICdOb3Qgbm93JyBvbiBGaXJlZm94IG5laXRoZXIgY2FsbGJhY2sgZ2V0cyBjYWxsZWQKICAgICAgICAgICAgLy8gICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NTUzMwogICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBnZW9sb2NhdGlvbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgIH0KICAgIH0sCiAgICBjb2xsZWN0QnJvd3NlckZvbnRzSW5mbyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZm9udHNJbmZvID0ge30sIGksIGZvbnRzTGlzdCA9IFsiY3Vyc2l2ZSIsIm1vbm9zcGFjZSIsInNlcmlmIiwic2Fucy1zZXJpZiIsImZhbnRhc3kiLCJkZWZhdWx0IiwiQXJpYWwiLCJBcmlhbCBCbGFjayIsCiAgICAgICAgICAgICJBcmlhbCBOYXJyb3ciLCJBcmlhbCBSb3VuZGVkIE1UIEJvbGQiLCJCb29rbWFuIE9sZCBTdHlsZSIsIkJyYWRsZXkgSGFuZCBJVEMiLCJDZW50dXJ5IiwiQ2VudHVyeSBHb3RoaWMiLAogICAgICAgICAgICAiQ29taWMgU2FucyBNUyIsIkNvdXJpZXIiLCJDb3VyaWVyIE5ldyIsIkdlb3JnaWEiLCJHZW50aXVtIiwiSW1wYWN0IiwiS2luZyIsIkx1Y2lkYSBDb25zb2xlIiwiTGFsaXQiLAogICAgICAgICAgICAiTW9kZW5hIiwiTW9ub3R5cGUgQ29yc2l2YSIsIlBhcHlydXMiLCJUYWhvbWEiLCJUZVgiLCJUaW1lcyIsIlRpbWVzIE5ldyBSb21hbiIsIlRyZWJ1Y2hldCBNUyIsIlZlcmRhbmEiLAogICAgICAgICAgICAiVmVyb25hIl07CiAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gIiI7CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBmb250c0xpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGZvbnREZXRlY3Rvci5kZXRlY3QoZm9udHNMaXN0W2ldKSkgewogICAgICAgICAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzICsgZm9udHNMaXN0W2ldICsgIjsiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb250c0luZm87CiAgICB9LAogICAgZGV2aWNlUHJpbnQgPSB7fTsKCmRldmljZVByaW50LnNjcmVlbiA9IGNvbGxlY3RTY3JlZW5JbmZvKCk7CmRldmljZVByaW50LnRpbWV6b25lID0gY29sbGVjdFRpbWV6b25lSW5mbygpOwpkZXZpY2VQcmludC5wbHVnaW5zID0gY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbygpOwpkZXZpY2VQcmludC5mb250cyA9IGNvbGxlY3RCcm93c2VyRm9udHNJbmZvKCk7CgppZiAobmF2aWdhdG9yLnVzZXJBZ2VudCkgewogICAgZGV2aWNlUHJpbnQudXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKfQppZiAobmF2aWdhdG9yLmFwcE5hbWUpIHsKICAgIGRldmljZVByaW50LmFwcE5hbWUgPSBuYXZpZ2F0b3IuYXBwTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcENvZGVOYW1lKSB7CiAgICBkZXZpY2VQcmludC5hcHBDb2RlTmFtZSA9IG5hdmlnYXRvci5hcHBDb2RlTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcFZlcnNpb24pIHsKICAgIGRldmljZVByaW50LmFwcFZlcnNpb24gPSBuYXZpZ2F0b3IuYXBwVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbikgewogICAgZGV2aWNlUHJpbnQuYXBwTWlub3JWZXJzaW9uID0gbmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmJ1aWxkSUQpIHsKICAgIGRldmljZVByaW50LmJ1aWxkSUQgPSBuYXZpZ2F0b3IuYnVpbGRJRDsKfQppZiAobmF2aWdhdG9yLnBsYXRmb3JtKSB7CiAgICBkZXZpY2VQcmludC5wbGF0Zm9ybSA9IG5hdmlnYXRvci5wbGF0Zm9ybTsKfQppZiAobmF2aWdhdG9yLmNwdUNsYXNzKSB7CiAgICBkZXZpY2VQcmludC5jcHVDbGFzcyA9IG5hdmlnYXRvci5jcHVDbGFzczsKfQppZiAobmF2aWdhdG9yLm9zY3B1KSB7CiAgICBkZXZpY2VQcmludC5vc2NwdSA9IG5hdmlnYXRvci5vc2NwdTsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3QpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3QgPSBuYXZpZ2F0b3IucHJvZHVjdDsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3RTdWIpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3RTdWIgPSBuYXZpZ2F0b3IucHJvZHVjdFN1YjsKfQppZiAobmF2aWdhdG9yLnZlbmRvcikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yID0gbmF2aWdhdG9yLnZlbmRvcjsKfQppZiAobmF2aWdhdG9yLnZlbmRvclN1YikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yU3ViID0gbmF2aWdhdG9yLnZlbmRvclN1YjsKfQppZiAobmF2aWdhdG9yLmxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5sYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnVzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQudXNlckxhbmd1YWdlID0gbmF2aWdhdG9yLnVzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQuYnJvd3Nlckxhbmd1YWdlID0gbmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnN5c3RlbUxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5zeXN0ZW1MYW5ndWFnZSA9IG5hdmlnYXRvci5zeXN0ZW1MYW5ndWFnZTsKfQoKLy8gQXR0ZW1wdCB0byBjb2xsZWN0IGdlby1sb2NhdGlvbiBpbmZvcm1hdGlvbiBhbmQgcmV0dXJuIHRoaXMgd2l0aCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgovLyBPdGhlcndpc2UsIGlmIGdlby1sb2NhdGlvbiBmYWlscyBvciB0YWtlcyBsb25nZXIgdGhhbiAzMCBzZWNvbmRzLCBhdXRvLXN1Ym1pdCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgphdXRvU3VibWl0RGVsYXkgPSAzMDAwMDsKb3V0cHV0LnZhbHVlID0gSlNPTi5zdHJpbmdpZnkoZGV2aWNlUHJpbnQpOwpjb2xsZWN0R2VvbG9jYXRpb25JbmZvKGZ1bmN0aW9uKGdlb2xvY2F0aW9uSW5mbykgewogICAgZGV2aWNlUHJpbnQuZ2VvbG9jYXRpb24gPSBnZW9sb2NhdGlvbkluZm87CiAgICBvdXRwdXQudmFsdWUgPSBKU09OLnN0cmluZ2lmeShkZXZpY2VQcmludCk7CiAgICBzdWJtaXQoKTsKfSk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -5581,21 +5889,25 @@ "value": "application/json;charset=UTF-8" }, { - "name": "content-length", - "value": "1570" + "name": "transfer-encoding", + "value": "chunked" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:24 GMT" + "value": "Wed, 19 Jun 2024 21:28:27 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -5605,14 +5917,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 800, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:24.822Z", - "time": 65, + "startedDateTime": "2024-06-19T21:28:28.230Z", + "time": 54, "timings": { "blocked": -1, "connect": -1, @@ -5620,11 +5932,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 65 + "wait": 54 } }, { - "_id": "4cd74350a95512b9cd53238ae32b78be", + "_id": "e81a7568b2f332dd73d17af7613483cf", "_order": 0, "cache": {}, "request": { @@ -5636,16 +5948,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -5655,28 +5967,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1641, + "headersSize": 1691, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Google Profile Normalization\"" + "value": "name eq \"Salesforce Profile Normalization\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Google%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Salesforce%20Profile%20Normalization%22" }, "response": { - "bodySize": 1548, + "bodySize": 1564, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1548, - "text": "{\"result\":[{\"_id\":\"58d29080-4563-480b-89bb-1e7719776a21\",\"name\":\"Google Profile Normalization\",\"description\":\"Normalizes raw profile data from Google\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1564, + "text": "{\"result\":[{\"_id\":\"312e951f-70c5-49d2-a9ae-93aef909d5df\",\"name\":\"Salesforce Profile Normalization\",\"description\":\"Normalizes raw profile data from Salesforce\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZ2l2ZW5fbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmZhbWlseV9uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnBpY3R1cmUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJsb2NhbGUiLCByYXdQcm9maWxlLnpvbmVJbmZvKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -5726,20 +6042,24 @@ }, { "name": "content-length", - "value": "1548" + "value": "1564" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:24 GMT" + "value": "Wed, 19 Jun 2024 21:28:27 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -5749,14 +6069,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:24.899Z", - "time": 59, + "startedDateTime": "2024-06-19T21:28:28.288Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -5764,11 +6084,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 59 + "wait": 53 } }, { - "_id": "6305235cfeadffc508b8076bf5229d24", + "_id": "d15d4354eec1219a37a90beaed3de432", "_order": 0, "cache": {}, "request": { @@ -5780,16 +6100,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -5799,28 +6119,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1646, + "headersSize": 1684, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Scripted Module - Client Side\"" + "value": "name eq \"SAML2 SP Adapter Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Scripted%20Module%20-%20Client%20Side%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22SAML2%20SP%20Adapter%20Script%22" }, "response": { - "bodySize": 983, + "bodySize": 10793, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 983, - "text": "{\"result\":[{\"_id\":\"c827d2b4-3608-4693-868e-bbcf86bd87c7\",\"name\":\"Scripted Module - Client Side\",\"description\":\"Default global script for client side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTYtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qIERlZmF1bHQgQXV0aGVudGljYXRpb24gY2xpZW50IHNpZGUgc2NyaXB0IHRvIHVzZSBhcyBhIHRlbXBsYXRlIGZvciBuZXcgc2NyaXB0cyAqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 10793, + "text": "{\"result\":[{\"_id\":\"69f06e63-128c-4e2f-af52-079a8a6f448b\",\"name\":\"SAML2 SP Adapter Script\",\"description\":\"Default global script for SAML2 SP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_SP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -5869,21 +6193,5497 @@ "value": "application/json;charset=UTF-8" }, { - "name": "content-length", - "value": "983" + "name": "transfer-encoding", + "value": "chunked" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:24 GMT" + "value": "Wed, 19 Jun 2024 21:28:27 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 800, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:28.346Z", + "time": 50, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 50 + } + }, + { + "_id": "afa15dc27a4267006563eb6adc5fc01a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1660, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"debug\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22debug%22" + }, + "response": { + "bodySize": 3308, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 3308, + "text": "{\"result\":[{\"_id\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"name\":\"debug\",\"description\":\"Display sharedState, transientState, and headers.\",\"script\":\"LyogZGVidWcKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogRGlzcGxheSBzaGFyZWRTdGF0ZSwgdHJhbnNpZW50U3RhdGUsIGFuZCBoZWFkZXJzLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwp2YXIgYW5jaG9yID0gImFuY2hvci0iLmNvbmNhdChnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4JykpOwp2YXIgaGFsaWduID0gImxlZnQiOwp2YXIgbWVzc2FnZSA9ICI8cD48Yj5TaGFyZWQgU3RhdGU8L2I+Ojxici8+Ii5jb25jYXQoCiAgICAgIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpLmNvbmNhdCgKICAgICI8cD48Yj5UcmFuc2llbnQgU3RhdGU8L2I+Ojxici8+IikuY29uY2F0KAogICAgICB0cmFuc2llbnRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+UmVxdWVzdCBIZWFkZXJzPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgICAgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikKdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwidGV4dC1sZWZ0XCI7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIikuY29uY2F0KG1lc3NhZ2UpLmNvbmNhdCgiJztcbiIpLmNvbmNhdCgKICAiICB9XG4iKS5jb25jYXQoCiAgIn0pIikKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawopCmlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgIGFuY2hvcgogICAgICAgICksCiAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICApLmJ1aWxkKCkKfQplbHNlIHsKICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0KCiAvKgogICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAqIAogICogRXhhbXBsZToKICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICogJ3h4eC14eHgnIHByb2R1Y2VzICc0MzItNTIxJwogICovCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxMHwwOwogICAgICAgIHZhciB2ID0gcjsKICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "3308" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:27 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:28.400Z", + "time": 53, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 53 + } + }, + { + "_id": "da171ffe43fa0414dde04a78281c0870", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1687, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"GitHub Profile Normalization\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22GitHub%20Profile%20Normalization%22" + }, + "response": { + "bodySize": 1232, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1232, + "text": "{\"result\":[{\"_id\":\"a7a78773-445b-4eca-bb93-409e86bced81\",\"name\":\"GitHub Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUubG9naW4pKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1232" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:27 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:28.459Z", + "time": 59, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 59 + } + }, + { + "_id": "99d259eb57c25d01ede5cf21815c8741", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1703, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Authentication Tree Decision Node Script\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Authentication%20Tree%20Decision%20Node%20Script%22" + }, + "response": { + "bodySize": 759, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 759, + "text": "{\"result\":[{\"_id\":\"01e1a3c0-038b-4c16-956a-6c9d89328cff\",\"name\":\"Authentication Tree Decision Node Script\",\"description\":\"Default global script for a scripted decision node\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKb3V0Y29tZSA9ICJ0cnVlIjsK\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "759" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:27 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 793, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:28.524Z", + "time": 55, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 55 + } + }, + { + "_id": "2309a7f49a1fe4728cc77e95bde7fe41", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1696, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"My Example Script Using Libraries\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22My%20Example%20Script%20Using%20Libraries%22" + }, + "response": { + "bodySize": 796, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 796, + "text": "{\"result\":[{\"_id\":\"bb393d07-a121-47e2-9d24-1a1066f39ec0\",\"name\":\"My Example Script Using Libraries\",\"description\":\"My Example Script Using Libraries\",\"script\":\"LyoqCiAqIFRlc3RpbmcgbGlicmFyeSBzY3JpcHRzCiAqLwp2YXIgbXlsaWIgPSByZXF1aXJlKCdNeSBFeGFtcGxlIExpYnJhcnknKTsKdmFyIGxvZ2dlcnMgPSByZXF1aXJlKCdMaWJyYXJ5IFNjcmlwdCcpOwoKbXlsaWIuYWRkKDEpOwpteWxpYi5sb2dUb3RhbChsb2dnZXIpOwpteWxpYi5hZGQoMyk7Cm15bGliLmxvZ1RvdGFsV2l0aE1lc3NhZ2UobG9nZ2VyLCBteWxpYi5NU0cpOwoKb3V0Y29tZSA9ICd0cnVlJzs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "796" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:27 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 793, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:28.582Z", + "time": 53, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 53 + } + }, + { + "_id": "1f8cce56ecc6a4b46438c8bef34eec8c", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1677, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"takeFavouriteFactor.js\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22takeFavouriteFactor.js%22" + }, + "response": { + "bodySize": 1032, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1032, + "text": "{\"result\":[{\"_id\":\"77e87451-bde9-40c0-84b1-02d4c97687f2\",\"name\":\"takeFavouriteFactor.js\",\"description\":\"null\",\"script\":\"ZnVuY3Rpb24gZ2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSkKewogIHZhciBpZCA9IHNoYXJlZFN0YXRlLmdldCgnX2lkJyk7CiAgdmFyIGZySWRtQ3VzdG9tQXR0cmlidXRlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoaWQsICdmci1pZG0tY3VzdG9tLWF0dHJzJyk7CiAgaWYgKGZySWRtQ3VzdG9tQXR0cmlidXRlcykKICB7CiAgICAgIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QgPSBKU09OLnBhcnNlKFN0cmluZyhmcklkbUN1c3RvbUF0dHJpYnV0ZXMudG9BcnJheSgpWzBdKSk7CiAgICAgICAgcmV0dXJuIGZySWRtQ3VzdG9tQXR0cmlidXRlc09iamVjdFtjdXN0b21BdHRyTmFtZV07CiAgfQp9Cgp2YXIgZmF2RmFjdG9yID0gZ2V0Q3VzdG9tQXR0clZhbHVlKCJjdXN0b21fZmF2b3VyaXRlRmFjdG9yIik7Cm91dGNvbWUgPSBmYXZGYWN0b3I7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1032" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:27 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:28.640Z", + "time": 48, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 48 + } + }, + { + "_id": "75d67cb54b1596db4dd7aef88161182c", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1710, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Alpha OAuth2 Access Token Modification Script\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Alpha%20OAuth2%20Access%20Token%20Modification%20Script%22" + }, + "response": { + "bodySize": 10105, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 10105, + "text": "{\"result\":[{\"_id\":\"39c08084-1238-43e8-857f-2e11005eac49\",\"name\":\"Alpha OAuth2 Access Token Modification Script\",\"description\":\"Default alpha realm script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "transfer-encoding", + "value": "chunked" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:27 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 800, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:28.693Z", + "time": 56, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 56 + } + }, + { + "_id": "44e730c22a54944186cc3c6ed74bbce4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1687, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Amazon Profile Normalization\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Amazon%20Profile%20Normalization%22" + }, + "response": { + "bodySize": 1296, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1296, + "text": "{\"result\":[{\"_id\":\"6b3cfd48-62d3-48ff-a96f-fe8f3a22ab30\",\"name\":\"Amazon Profile Normalization\",\"description\":\"Normalizes raw profile data from Amazon\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1296" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:28.755Z", + "time": 52, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 52 + } + }, + { + "_id": "8fed64e04407bbd842030f4d52b6a67e", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1686, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Yahoo Profile Normalization\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Yahoo%20Profile%20Normalization%22" + }, + "response": { + "bodySize": 1546, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1546, + "text": "{\"result\":[{\"_id\":\"424da748-82cc-4b54-be6f-82bd64d82a74\",\"name\":\"Yahoo Profile Normalization\",\"description\":\"Normalizes raw profile data from Yahoo\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1546" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:28.812Z", + "time": 51, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 51 + } + }, + { + "_id": "fe90a50ae7c7e0edfbed453351ad162b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1689, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"OAuth2 Evaluate Scope Script\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20Evaluate%20Scope%20Script%22" + }, + "response": { + "bodySize": 3734, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 3734, + "text": "{\"result\":[{\"_id\":\"da56fe60-8b38-4c46-a405-d6b306d4b336\",\"name\":\"OAuth2 Evaluate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Evaluation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcG9wdWxhdGUgdGhlIHNjb3BlcyB3aXRoIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlcyB3aGVuIHRoZSB0b2tlbmluZm8gZW5kcG9pbnQgaXMgY2FsbGVkLgogKiBGb3IgZXhhbXBsZSwgaWYgb25lIG9mIHRoZSBzY29wZXMgaXMgbWFpbCwgQU0gc2V0cyBtYWlsIHRvIHRoZSByZXNvdXJjZSBvd25lcidzIGVtYWlsIGFkZHJlc3MgaW4gdGhlIHRva2VuIGluZm9ybWF0aW9uIHJldHVybmVkLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDIpLgogKiAgICAgICAgICAgIFRoZSBjbGllbnQncyBpZGVudGl0eSBpZiBwcmVzZW50IG9yIHRoZSByZXNvdXJjZSBvd25lcidzIGlkZW50aXR5LiBDYW4gYmUgbnVsbC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0VWQUxVQVRFX1NDT1BFCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoMykuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIGEgTWFwPFN0cmluZywgT2JqZWN0PiBvZiB0aGUgYWNjZXNzIHRva2VuJ3MgaW5mb3JtYXRpb24gKDQpLgogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBBY2Nlc3NUb2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vYXV0aDIvY29yZS9BY2Nlc3NUb2tlbi5odG1sLgogKiAoMikgQU1JZGVudGl0eSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9pZG0vQU1JZGVudGl0eS5odG1sLgogKiAoMykgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBldmFsdWF0ZSBzY29wZSBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgbWFwID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7CiAgICBpZiAoaWRlbnRpdHkgIT09IG51bGwpIHsKICAgICAgICB2YXIgc2NvcGVzID0gYWNjZXNzVG9rZW4uZ2V0U2NvcGUoKS50b0FycmF5KCk7CiAgICAgICAgc2NvcGVzLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKHNjb3BlKS50b0FycmF5KCk7CiAgICAgICAgICAgIG1hcC5wdXQoc2NvcGUsIGF0dHJpYnV0ZXMuam9pbigiLCIpKTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKCdpZGVudGl0eSBpcyBudWxsJyk7CiAgICB9CiAgICByZXR1cm4gbWFwOwp9KCkpOw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_EVALUATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "3734" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:28.868Z", + "time": 51, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 51 + } + }, + { + "_id": "383132fe28b74d67e177962008c53d13", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1660, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"level\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22level%22" + }, + "response": { + "bodySize": 834, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 834, + "text": "{\"result\":[{\"_id\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"name\":\"level\",\"description\":\"set per level shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdsZXZlbCcgKyBsZXZlbCArICdWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzZXQgYXQgZWFjaCBsZXZlbCBvZiB0aGUgbmVzdGVkIGpvdXJuZXlzLiBJdCBjb250YWlucyBhbiBpbmRpY2F0b3IgaW4gd2hpY2ggbGV2ZWwgaXQgd2FzIHNldC4nKTsKfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "834" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 793, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:28.923Z", + "time": 59, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 59 + } + }, + { + "_id": "e4bae345254e0df9bfa0f0633bad19e0", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1690, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"VKontakte Profile Normalization\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22VKontakte%20Profile%20Normalization%22" + }, + "response": { + "bodySize": 1502, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1502, + "text": "{\"result\":[{\"_id\":\"403cf226-6051-4368-8b72-9ba14f9a5140\",\"name\":\"VKontakte Profile Normalization\",\"description\":\"Normalizes raw profile data from VKontakte\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGhvdG9fNTApLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1502" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:28.986Z", + "time": 55, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 55 + } + }, + { + "_id": "cd03ce6bab1791470b0a5e2b82b846e7", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1696, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"SAML2 IDP Attribute Mapper Script\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22SAML2%20IDP%20Attribute%20Mapper%20Script%22" + }, + "response": { + "bodySize": 10711, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 10711, + "text": "{\"result\":[{\"_id\":\"c4f22465-2368-4e27-8013-e6399974fd48\",\"name\":\"SAML2 IDP Attribute Mapper Script\",\"description\":\"Default global script for SAML2 IDP Attribute Mapper\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSBvYmplY3RzIGZvciB0aGUgSURQIGZyYW1ld29yayB0byBpbnNlcnQgaW50byB0aGUgZ2VuZXJhdGVkIEFzc2VydGlvbi4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgICAgICBUaGUgaG9zdGVkIGVudGl0eSBJRC4KICogcmVtb3RlRW50aXR5SWQgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgICAgVGhlIHJlbW90ZSBlbnRpdHkgSUQuCiAqIHJlYWxtIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGluZyB0by4KICogbG9nZ2VyIC0gQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5TQU1MMl9JRFBfQVRUUklCVVRFX01BUFBFUgogKiBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgLSBJZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgKDIpCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFuIElkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlciBpbnN0YW5jZSBjb250YWluaW5nIG1ldGhvZHMgdXNlZCBmb3IgSURQIGF0dHJpYnV0ZSBtYXBwaW5nLgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb246CiAqICAgICAgLSBvbiBmYWlsaW5nIHRvIG1hcCB0aGUgSURQIGF0dHJpYnV0ZXMuCiAqCiAqIFJldHVybiAtIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSAoMykgb2JqZWN0cy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgSWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaHRtbC4KICogKDMpIEF0dHJpYnV0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9hc3NlcnRpb24vQXR0cmlidXRlLmh0bWwuCiAqLwoKLyoqCiAqIERlZmF1bHQgU0FNTDIgSURQIEF0dHJpYnV0ZSBNYXBwZXIuCiAqLwpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKCkgewogICAgdmFyIGZySmF2YSA9IEphdmFJbXBvcnRlcigKICAgICAgICBjb20uc3VuLmlkZW50aXR5LnNhbWwyLmNvbW1vbi5TQU1MMkV4Y2VwdGlvbgogICAgKTsKCiAgICBjb25zdCBkZWJ1Z01ldGhvZCA9ICJTY3JpcHRlZElEUEF0dHJpYnV0ZU1hcHBlci5nZXRBdHRyaWJ1dGVzOjogIjsKCiAgICB0cnkgewoKICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1Nlc3Npb25WYWxpZChzZXNzaW9uKSkgewogICAgICAgICAgICBsb2dnZXIuZXJyb3IoZGVidWdNZXRob2QgKyAiSW52YWxpZCBzZXNzaW9uLiIpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHZhciBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0UmVtb3RlU1BDb25maWdBdHRyaWJ1dGVNYXAocmVhbG0sIHJlbW90ZUVudGl0eUlkKTsKICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJSZW1vdGUgU1AgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICBpZiAoY29uZmlnTWFwID09IG51bGwgfHwgY29uZmlnTWFwLmlzRW1wdHkoKSkgewogICAgICAgICAgICBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0SG9zdGVkSURQQ29uZmlnQXR0cmlidXRlTWFwKHJlYWxtLCBob3N0ZWRFbnRpdHlJZCk7CiAgICAgICAgICAgIGlmIChjb25maWdNYXAgPT0gbnVsbCB8fCBjb25maWdNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJDb25maWd1cmF0aW9uIG1hcCBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKGRlYnVnTWV0aG9kICsgIkhvc3RlZCBJRFAgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICB9CgogICAgICAgIHZhciBhdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoKTsKICAgICAgICB2YXIgc3RyaW5nVmFsdWVNYXAgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKICAgICAgICB2YXIgYmluYXJ5VmFsdWVNYXA7CiAgICAgICAgdmFyIGxvY2FsQXR0cmlidXRlOwoKICAgICAgICAvLyBEb24ndCB0cnkgdG8gcmVhZCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBkYXRhc3RvcmUgaWYgdGhlIGlnbm9yZWQgcHJvZmlsZSBpcyBlbmFibGVkIGluIHRoaXMgcmVhbG0uCiAgICAgICAgaWYgKCFpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaXNJZ25vcmVkUHJvZmlsZShzZXNzaW9uLCByZWFsbSkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIFJlc29sdmUgYXR0cmlidXRlcyB0byBiZSByZWFkIGZyb20gdGhlIGRhdGFzdG9yZS4KICAgICAgICAgICAgICAgIHZhciBzdHJpbmdBdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KCk7CiAgICAgICAgICAgICAgICB2YXIgYmluYXJ5QXR0cmlidXRlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgIHdoaWxlIChrZXlJdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlJdGVyLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBsb2NhbEF0dHJpYnV0ZSA9IGNvbmZpZ01hcC5nZXQoa2V5KTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1N0YXRpY0F0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc0JpbmFyeUF0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHRyZWF0IGFzIGJlaW5nIGJpbmFyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5QXR0cmlidXRlcy5hZGQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLnJlbW92ZUJpbmFyeUF0dHJpYnV0ZUZsYWcobG9jYWxBdHRyaWJ1dGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMuYWRkKGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXN0cmluZ0F0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWVNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0QXR0cmlidXRlcyhzZXNzaW9uLCBzdHJpbmdBdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghYmluYXJ5QXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBiaW5hcnlWYWx1ZU1hcCA9IGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5nZXRCaW5hcnlBdHRyaWJ1dGVzKHNlc3Npb24sIGJpbmFyeUF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGRlYnVnTWV0aG9kICsgIkVycm9yIGFjY2Vzc2luZyB0aGUgZGF0YXN0b3JlLiAiICsgZXJyb3IpOwogICAgICAgICAgICAgICAgLy9jb250aW51ZSB0byBjaGVjayBpbiBzc290b2tlbi4KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICB3aGlsZSAoa2V5SXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgdmFyIGtleSA9IGtleUl0ZXIubmV4dCgpCiAgICAgICAgICAgIHZhciBuYW1lRm9ybWF0ID0gbnVsbDsKICAgICAgICAgICAgdmFyIHNhbWxBdHRyaWJ1dGUgPSBrZXk7CiAgICAgICAgICAgIGxvY2FsQXR0cmlidXRlID0gY29uZmlnTWFwLmdldChrZXkpOwogICAgICAgICAgICAvLyBjaGVjayBpZiBzYW1sQXR0cmlidXRlIGhhcyBmb3JtYXQgbmFtZUZvcm1hdHxzYW1sQXR0cmlidXRlCiAgICAgICAgICAgIHZhciBzYW1sQXR0cmlidXRlcyA9IFN0cmluZyhuZXcgamF2YS5sYW5nLlN0cmluZyhzYW1sQXR0cmlidXRlKSk7CiAgICAgICAgICAgIHZhciB0b2tlbnMgPSBzYW1sQXR0cmlidXRlcy5zcGxpdCgnfCcpOwoKICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICBuYW1lRm9ybWF0ID0gdG9rZW5zWzBdOwogICAgICAgICAgICAgICAgc2FtbEF0dHJpYnV0ZSA9IHRva2Vuc1sxXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVZhbHVlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzU3RhdGljQXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdGF0aWMgZmxhZyBiZWZvcmUgdXNpbmcgaXQgYXMgdGhlIHN0YXRpYyB2YWx1ZQogICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlU3RhdGljQXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoW2xvY2FsQXR0cmlidXRlXSk7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJBZGRpbmcgc3RhdGljIHZhbHVlIHt9IGZvciBhdHRyaWJ1dGUgbmFtZWQge30iLCBsb2NhbEF0dHJpYnV0ZSwgc2FtbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzQmluYXJ5QXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZmxhZyBhcyBub3QgdXNlZCBmb3IgbG9va3VwCiAgICAgICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlQmluYXJ5QXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzID0gaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldEJpbmFyeUF0dHJpYnV0ZVZhbHVlcyhzYW1sQXR0cmlidXRlLCBsb2NhbEF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5VmFsdWVNYXApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWVNYXAgIT0gbnVsbCAmJiAhc3RyaW5nVmFsdWVNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlcyA9IHN0cmluZ1ZhbHVlTWFwLmdldChsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoZGVidWdNZXRob2QgKyAie30gc3RyaW5nIHZhbHVlIG1hcCB3YXMgZW1wdHkgb3IgbnVsbC4iLCBsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSB1c2VycyBzc29Ub2tlbgogICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlcyA9PSBudWxsIHx8IGF0dHJpYnV0ZVZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJVc2VyIHByb2ZpbGUgZG9lcyBub3QgaGF2ZSB2YWx1ZSBmb3Ige30sIGNoZWNraW5nIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldFByb3BlcnR5U2V0KHNlc3Npb24sIGxvY2FsQXR0cmlidXRlKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZXMgPT0gbnVsbCB8fCBhdHRyaWJ1dGVWYWx1ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJ7fSBub3QgZm91bmQgaW4gdXNlciBwcm9maWxlIG9yIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuYWRkKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5jcmVhdGVTQU1MQXR0cmlidXRlKHNhbWxBdHRyaWJ1dGUsIG5hbWVGb3JtYXQsIGF0dHJpYnV0ZVZhbHVlcykpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXR0cmlidXRlczsKCiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGxvZ2dlci5lcnJvcihkZWJ1Z01ldGhvZCArICJFcnJvciBtYXBwaW5nIElEUCBhdHRyaWJ1dGVzLiAiICsgZXJyb3IpOwogICAgICAgIHRocm93IG5ldyBmckphdmEuU0FNTDJFeGNlcHRpb24oZXJyb3IpOwogICAgfQp9CgpnZXRBdHRyaWJ1dGVzKCk7\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ATTRIBUTE_MAPPER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "transfer-encoding", + "value": "chunked" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 800, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.045Z", + "time": 57, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 57 + } + }, + { + "_id": "314adfb3c1b8ba601a880bcd4515d2b6", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1664, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"SaveLogin\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22SaveLogin%22" + }, + "response": { + "bodySize": 2987, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 2987, + "text": "{\"result\":[{\"_id\":\"46074930-6a38-4e36-8985-1ed90b4bdb3b\",\"name\":\"SaveLogin\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCik7CndpdGggKGZyKSB7CiAgLy8gQ3JlYXRlIG5ldyBlbnRyeSB3aXRoIGRldmljZSBwcm9maWxlIGFuZCBkYXRlCiAgdmFyIHByb2ZpbGUgPSBzaGFyZWRTdGF0ZS5nZXQoImZvcmdlUm9jay5kZXZpY2UucHJvZmlsZSIpOwogIHZhciBkYXRlID0gRGF0ZS5ub3coKQogIHZhciBpZGVudGlmaWVyID0gcHJvZmlsZS5nZXQoImlkZW50aWZpZXIiKQogIHZhciBwbGF0Zm9ybSA9IHByb2ZpbGUuZ2V0KCJtZXRhZGF0YSIpLmdldCgicGxhdGZvcm0iKS5nZXQoInBsYXRmb3JtIikKICB2YXIgZGV2aWNlTmFtZSA9IHByb2ZpbGUuZ2V0KCJtZXRhZGF0YSIpLmdldCgicGxhdGZvcm0iKS5nZXQoImRldmljZU5hbWUiKQogIHZhciBsYXRpdHVkZSA9IHByb2ZpbGUuZ2V0KCJsb2NhdGlvbiIpLmdldCgibGF0aXR1ZGUiKQogIHZhciBsb25naXR1ZGUgPSBwcm9maWxlLmdldCgibG9jYXRpb24iKS5nZXQoImxvbmdpdHVkZSIpCiAgdmFyIHVzZXJBZ2VudCA9IHByb2ZpbGUuZ2V0KCJtZXRhZGF0YSIpLmdldCgiYnJvd3NlciIpLmdldCgidXNlckFnZW50Iik7CiAgdmFyIGJyb3dzZXIgPSAiIgogIAogIC8vIFdvcmsgb3V0IHdoaWNoIGJyb3dzZXIgdGhpcyBpcwogIGlmICh1c2VyQWdlbnQudG9VcHBlckNhc2UoKS5pbmRleE9mKCJGSVJFRk9YIikgPiAtMSkgewogICAgYnJvd3NlciA9ICJGaXJlZm94IjsKICB9IGVsc2UgaWYgKHVzZXJBZ2VudC50b1VwcGVyQ2FzZSgpLmluZGV4T2YoIkNIUk9NRSIpID4gLTEgJiYgdXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiU0FGQVJJIikgPiAtMSkgewogICAgLy8gQ2hyb21lIGNhbiBzb21ldGltZXMgbGlzdCBDaHJvbWUgZm9sbG93ZWQgYnkgU2FmYXJpIGluIHVzZXJBZ2VudAogICAgaWYgKHVzZXJBZ2VudC50b1VwcGVyQ2FzZSgpLmluZGV4T2YoIkNIUk9NRSIpIDwgdXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiU0FGQVJJIikpIHsKICAgICAgYnJvd3NlciA9ICJDaHJvbWUiOwogICAgfQogIH0gZWxzZSBpZiAodXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiQ0hST01FIikgPiAtMSkgewogICAgYnJvd3NlciA9ICJDaHJvbWUiOwogIH0gZWxzZSBpZiAodXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiU0FGQVJJIikgPiAtMSkgewogICAgYnJvd3NlciA9ICJTYWZhcmkiOwogIH0KICAKICB2YXIgZW50cnkgPSB7CiAgICAiZGF0ZSI6IERhdGUoKS50b1N0cmluZygpLAogICAgImxhc3RTZWxlY3RlZERhdGUiOiBkYXRlLAogICAgImRldmljZSI6IHsKICAgICAgImlkZW50aWZpZXIiOiBTdHJpbmcoaWRlbnRpZmllciksCiAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAicGxhdGZvcm0iOiB7CiAgICAgICAgICAicGxhdGZvcm0iOiBTdHJpbmcocGxhdGZvcm0pLAogICAgICAgICAgImRldmljZU5hbWUiOiBTdHJpbmcoZGV2aWNlTmFtZSkKICAgICAgICB9LAogICAgICAgICJicm93c2VyIjogYnJvd3NlcgogICAgICB9CiAgICB9LAogICAgImxvY2F0aW9uIjogewogICAgICAibGF0aXR1ZGUiOiBTdHJpbmcobGF0aXR1ZGUpLAogICAgICAibG9uZ2l0dWRlIjogU3RyaW5nKGxvbmdpdHVkZSkKICAgIH0KICB9CiAgCiAgLy8gQWRkIGVudHJ5IHRvIG11bHRpIHZhbHVlCiAgdmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKQogIHZhciBhdHRyaWJ1dGUgPSAiZnItYXR0ci1pbXVsdGkxIgogIGlkUmVwb3NpdG9yeS5hZGRBdHRyaWJ1dGUodXNlcm5hbWUsIGF0dHJpYnV0ZSwgSlNPTi5zdHJpbmdpZnkoZW50cnkpKTsKICAKICBvdXRjb21lID0gInRydWUiCn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "2987" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.106Z", + "time": 54, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 54 + } + }, + { + "_id": "36cf1b4232865b8ec590209687e762ee", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1703, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Alpha endUserUIClient OIDC Claims Script\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Alpha%20endUserUIClient%20OIDC%20Claims%20Script%22" + }, + "response": { + "bodySize": 41559, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 41559, + "text": "{\"result\":[{\"_id\":\"e1db8a0a-0329-4962-a5bf-ecffaca376ae\",\"name\":\"Alpha endUserUIClient OIDC Claims Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "transfer-encoding", + "value": "chunked" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 800, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.164Z", + "time": 56, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 56 + } + }, + { + "_id": "1e5d993ae7967c35c67920283d9c1839", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1659, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"mode\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22mode%22" + }, + "response": { + "bodySize": 2093, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 2093, + "text": "{\"result\":[{\"_id\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"name\":\"mode\",\"description\":\"Check if mode has already been set.\",\"script\":\"LyogbW9kZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDb2xsZWN0IG1vZGUgaWYgbm90IGFscmVhZHkgc2V0IGFuZCBzZXQgb3V0Y29tZSB0byBtb2RlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSAnc2hhcmVkIGFuZCBsZXZlbCcKICogLSAnc2hhcmVkIG9ubHknCiAqIC0gJ2xldmVsIG9ubHknCiAqIC0gJ25vbmUnCiAqLwooZnVuY3Rpb24gKCkgewogIHZhciBtb2RlID0gbm9kZVN0YXRlLmdldCgnbW9kZScpOwogIGlmIChtb2RlKSB7CiAgICBvdXRjb21lID0gbW9kZS5hc1N0cmluZygpOwogICAgdmFyIGxldmVsID0gbm9kZVN0YXRlLmdldCgnbGV2ZWwnKS5hc0ludGVnZXIoKSArIDE7CiAgICBsb2dnZXIuZXJyb3IoJ21vZGU6IG1vZGU9JyArIG1vZGUuYXNTdHJpbmcoKSArICcsIGxldmVsPScgKyBsZXZlbCk7CiAgICBzaGFyZWRTdGF0ZS5wdXQoJ2xldmVsJywgbGV2ZWwpOwogIH0KICBlbHNlIHsKICAgIHZhciBjaG9pY2VzID0gWydzaGFyZWQgYW5kIGxldmVsJywgJ3NoYXJlZCBvbmx5JywgJ2xldmVsIG9ubHknLCAnbm9uZSddOwogIAogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DaG9pY2VDYWxsYmFjawogICAgKQoKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKFsKICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soJ0Nob29zZSB0ZXN0IG1vZGUnLCBjaG9pY2VzLCAwLCBmYWxzZSkKICAgICAgXSkuYnVpbGQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBjaG9pY2UgPSBwYXJzZUludChjYWxsYmFja3MuZ2V0KDApLmdldFNlbGVjdGVkSW5kZXhlcygpWzBdKTsKICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgnbW9kZScsIGNob2ljZXNbY2hvaWNlXSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2xldmVsJywgMCk7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKGNob2ljZXNbY2hvaWNlXSkuYnVpbGQoKTsKICAgIH0KICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "2093" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.224Z", + "time": 53, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 53 + } + }, + { + "_id": "0ef369f427baa872ca4ee159a6fe7dc7", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1677, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"UOP Enrich Session\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22UOP%20Enrich%20Session%22" + }, + "response": { + "bodySize": 1914, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1914, + "text": "{\"result\":[{\"_id\":\"743351b3-001a-4ec8-b3ac-a674ddb8de22\",\"name\":\"UOP Enrich Session\",\"description\":\"Enrich user session with UOP class ID.\",\"script\":\"LyogVU9QIEVucmljaCBTZXNzaW9uCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIEFkZCBjdXJyZW50IGNsYXNzIElEIHRvIHVzZXIgc2Vzc2lvbi4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuIAogKiBJdCByZXF1aXJlcyB0aGUgSWRlbnRpZnkgRXhpc3RpbmcgVXNlciBub2RlIGJlZm9yZSBpdCBpcyBiZWluZyBjYWxsZWQuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAtIGZhbHNlCiAqLwpsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBzdGFydCIpOwpvdXRjb21lID0gImZhbHNlIjsKCmlmIChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBnb2luZyB0byBlbnJpY2ggc2Vzc2lvbiB3aXRoIGNsYXNzIGlkOiAiLmNvbmNhdChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpKTsKICAKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaQogICAgKTsKCiAgICB3aXRoIChmcikgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJVT1AgRW5yaWNoIFNlc3Npb246IEVuZCAob3V0Y29tZT0iLmNvbmNhdChvdXRjb21lKS5jb25jYXQoIikiKSk7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8ob3V0Y29tZSkucHV0U2Vzc2lvblByb3BlcnR5KCJVT1BDbGFzc0lEIiwgc2hhcmVkU3RhdGUuZ2V0KCJ1b3BDdXJyZW50Q2xhc3NJRCIpKS5idWlsZCgpOwogICAgfQogIAp9IGVsc2UgewogICAgbG9nZ2VyLmVycm9yKCJVT1AgRW5yaWNoIFNlc3Npb246IG5vIGNsYXNzZXMhIik7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBFbmQgKG91dGNvbWU9Ii5jb25jYXQob3V0Y29tZSkuY29uY2F0KCIpIikpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1914" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.281Z", + "time": 55, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 55 + } + }, + { + "_id": "3137a01335cedaf6a0d12265a00efda2", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1692, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Saml2 IDP Adapter Always Auth\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Saml2%20IDP%20Adapter%20Always%20Auth%22" + }, + "response": { + "bodySize": 7583, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 7583, + "text": "{\"result\":[{\"_id\":\"85523e71-2d77-4577-b078-6f9674cc54e2\",\"name\":\"Saml2 IDP Adapter Always Auth\",\"description\":\"Always redirect browser pre-auth\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4yL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL1NBTUwySWRlbnRpdHlQcm92aWRlckFkYXB0ZXIuaHRtbAogKiBOb3RlIHRoYXQgdGhlIGluaXRpYWxpemUgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIHNjcmlwdHMuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzLiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMgZm9yIHRoZSB2YXJpYWJsZXMgYXZhaWxhYmxlIHRvIGl0LgogKgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZwogKiAgICAgRW50aXR5IElEIGZvciB0aGUgaG9zdGVkIElEUAogKiByZWFsbSAtIFN0cmluZwogKiAgICAgUmVhbG0gb2YgdGhlIGhvc3RlZCBJRFAKICogaWRwQWRhcHRlclNjcmlwdEhlbHBlciAtIElkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEpCiAqICAgICBBbiBpbnN0YW5jZSBvZiBJZHBBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIHJlcXVlc3QgLSBIdHRwU2VydmxldFJlcXVlc3QgKDIpCiAqICAgICBTZXJ2bGV0IHJlcXVlc3Qgb2JqZWN0CiAqIHJlc3BvbnNlIC0gSHR0cFNlcnZsZXRSZXNwb25zZSAoMykKICogICAgIFNlcnZsZXQgcmVzcG9uc2Ugb2JqZWN0CiAqIGF1dGhuUmVxdWVzdCAtIEF1dGhuUmVxdWVzdCAoNCkKICogICAgIFRoZSBvcmlnaW5hbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHNlbnQgZnJvbSBTUAogKiByZXFJZCAtIFN0cmluZwogKiAgICAgVGhlIGlkIHRvIHVzZSBmb3IgY29udGludWF0aW9uIG9mIHByb2Nlc3NpbmcgaWYgdGhlIGFkYXB0ZXIgcmVkaXJlY3RzCiAqIHJlcyAtIFJlc3BvbnNlICg1KQogKiAgICAgVGhlIFNBTUwgUmVzcG9uc2UKICogc2Vzc2lvbiAtIFNTT1Rva2VuICg2KQogKiAgICAgVGhlIHNpbmdsZSBzaWduLW9uIHNlc3Npb24uIFRoZSByZWZlcmVuY2UgdHlwZSBvZiB0aGlzIGlzIE9iamVjdCBhbmQgd291bGQgbmVlZCB0byBiZSBjYXN0ZWQgdG8gU1NPVG9rZW4uCiAqIHJlbGF5U3RhdGUgLSBTdHJpbmcKICogICAgIFRoZSByZWxheVN0YXRlIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSByZWRpcmVjdAogKiBmYXVsdENvZGUgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBjb2RlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgU0FNTCByZXNwb25zZQogKiBmYXVsdERldGFpbCAtIFN0cmluZwogKiAgICAgdGhlIGZhdWx0IGRldGFpbCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogbG9nZ2VyIC0gTG9nZ2VyIGluc3RhbmNlCiAqICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLjxzY3JpcHQgbmFtZT4KICoKICogVGhyb3dzIFNBTUwyRXhjZXB0aW9uICg3KToKICogICAgIGZvciBhbnkgZXhjZXB0aW9ucyBvY2N1cnJpbmcgaW4gdGhlIGFkYXB0ZXIuIFRoZSBmZWRlcmF0aW9uIHByb2Nlc3Mgd2lsbCBjb250aW51ZQogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBpZHBBZGFwdGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL1Jlc3BvbnNlLmh0bWwuCiAqICg2KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvY29tbW9uL1NBTUwyRXhjZXB0aW9uLmh0bWwuCiAqLwoKLyoKICogVGVtcGxhdGUvZGVmYXVsdCBzY3JpcHQgZm9yIFNBTUwyIElEUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTaW5nbGVTaWduT24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNpbmdsZVNpZ25PbiIpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZUF1dGhlbnRpY2F0aW9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlQXV0aGVudGljYXRpb24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZUF1dGhlbnRpY2F0aW9uIik7CiAgICByZXR1cm4gdHJ1ZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZFJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBoYXBwZW5lZCBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTZW5kUmVzcG9uc2UgKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNlbmRSZXNwb25zZSIpOwogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IGF1dGhuUmVxdWVzdDogIithdXRoblJlcXVlc3QpOwogICAgICByZXNwb25zZS5zZW5kUmVkaXJlY3QoImh0dHBzOi8vaWRjLnNjaGV1YmVyLmlvL2FtL1hVSS8/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPURpc3BhdGNoZXImRm9yY2VBdXRoPXRydWUmZ290bz0iK3JlbGF5U3RhdGUpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpZ25SZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICByZXMKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2lnblJlc3BvbnNlICgpIHsKICAgICAgbG9nZ2VyLmVycm9yKCJDaGljYWdvOiBwcmVTaWduUmVzcG9uc2UiKTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZEZhaWx1cmVSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGZhdWx0Q29kZQogKiAgICAgZmF1bHREZXRhaWwKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2VuZEZhaWx1cmVSZXNwb25zZSAoKSB7CiAgICAgIGxvZ2dlci5lcnJvcigiQ2hpY2FnbzogcHJlU2VuZEZhaWx1cmVSZXNwb25zZSIpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "7583" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.340Z", + "time": 52, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 52 + } + }, + { + "_id": "94adfa06e33c4effe46def70f02b0ac3", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1670, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"EmailAsUsername\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22EmailAsUsername%22" + }, + "response": { + "bodySize": 925, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 925, + "text": "{\"result\":[{\"_id\":\"e5c302c8-f838-4698-87cc-d7225fc82454\",\"name\":\"EmailAsUsername\",\"description\":\"null\",\"script\":\"b2JqZWN0QXR0cmlidXRlcyA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpCnVzZXJOYW1lID0gb2JqZWN0QXR0cmlidXRlcy5nZXQoInVzZXJOYW1lIikKCmlmKHVzZXJOYW1lKXsKICAvL0Zvcm0gRmlsbAogIG9iamVjdEF0dHJpYnV0ZXMucHV0KCJtYWlsIiwgdXNlck5hbWUpCn0gZWxzZSB7CiAgLy9Tb2NpYWwKICBvYmplY3RBdHRyaWJ1dGVzLnB1dCgidXNlck5hbWUiLCBvYmplY3RBdHRyaWJ1dGVzLmdldCgibWFpbCIpKQp9CgoKc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgb2JqZWN0QXR0cmlidXRlcyk7Ci8vc2hhcmVkU3RhdGUucHV0KCJ1c2VybmFtZSIsIG1haWwpCgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "925" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 793, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.397Z", + "time": 54, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 54 + } + }, + { + "_id": "94b6f5831f71f65277b35a24d9930465", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1672, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Format Username\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Format%20Username%22" + }, + "response": { + "bodySize": 577, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 577, + "text": "{\"result\":[{\"_id\":\"223739f3-9c54-43b7-9572-3c5338786145\",\"name\":\"Format Username\",\"description\":\"null\",\"script\":\"dmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpOwoKc2hhcmVkU3RhdGUucHV0KCJkaXNwbGF5TmFtZSIsIHVzZXJuYW1lKTsKb3V0Y29tZSA9ICJjb250aW51ZSI7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "577" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 793, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.454Z", + "time": 53, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 53 + } + }, + { + "_id": "5815d86994223e9f331ece096e7b80d0", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1677, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"My Example Library\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22My%20Example%20Library%22" + }, + "response": { + "bodySize": 864, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 864, + "text": "{\"result\":[{\"_id\":\"2c38c998-aec0-4e56-8d46-bff6e24a704e\",\"name\":\"My Example Library\",\"description\":\"My Example Library\",\"script\":\"dmFyIGkgPSAwOwoKZnVuY3Rpb24gYWRkKGopIHtpICs9IGp9OwpmdW5jdGlvbiBsb2dUb3RhbChsb2cpIHsgbG9nLmluZm8oIlRvdGFsOiAiICsgaSkgfTsKCi8vIGV4cG9ydCBjb25zdGFudApleHBvcnRzLk1TRyA9ICdGaW5hbCBzdW0nOwoKLy8gZXhwb3J0IGZ1bmN0aW9ucwpleHBvcnRzLmFkZCA9IGFkZDsKZXhwb3J0cy5sb2dUb3RhbCA9IGxvZ1RvdGFsOwoKLy9kaXJlY3QgZXhwb3J0IHVzaW5nIGFuIGlubGluZSBkZWNsYXJhdGlvbgpleHBvcnRzLmxvZ1RvdGFsV2l0aE1lc3NhZ2UgPSAobG9nLCBtZXNzYWdlKSA9PiBsb2cuaW5mbyhtZXNzYWdlICsgIjogIiArIGkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "864" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 793, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.511Z", + "time": 51, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 51 + } + }, + { + "_id": "485f6b9ace3f0b78fc8fab7ff58f08f6", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1677, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Impossible Traveller\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Impossible%20Traveller%22" + }, + "response": { + "bodySize": 3466, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 3466, + "text": "{\"result\":[{\"_id\":\"d030f9fb-6d2d-4f5a-834d-b4f6304b8eb9\",\"name\":\"Impossible Traveller\",\"description\":\"null\",\"script\":\"Ly8gR2VvVmVsb2NpdHkgLyBJbXBvc3NpYmxlIEpvdXJuZXkgYXV0aGVudGljYXRpb24gc2NyaXB0Ci8vCi8vIE91dGNvbWVzIGZvciB0aGlzIHNjcmlwdCBhcmU6Ci8vICAgICAibm9Mb2NhdGlvbiIgLSB0aGUgZGV2aWNlJ3MgY3VycmVudCBsb2NhdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIHNoYXJlZFN0YXRlCi8vICAgICAibm9IaXN0b3J5IiAgLSB0aGUgdXNlcidzIHByb2ZpbGUgZG9lc24ndCB5ZXQgY29udGFpbiBwcmV2aW91cyBkZXZpY2UgaGlzdG9yeQovLyAgICAgIm9rIiAgICAgICAgIC0gdGhlIHVzZXIncyBnZW92ZWxvY2l0eSBpcyBsb3dlciB0aGFuIHRoZSBtYXggYWNjZXB0YWJsZSBzcGVlZAovLyAgICAgICAiaW1wb3NzaWJsZSIgLSB0aGUgdXNlcidzIGdlb3ZlbG9jaXR5IGV4Y2VlZHMgbWF4IGFjY2VwdGFibGUgc3BlZWQKTUFYX1ZFTE9DSVRZPTMwMApmdW5jdGlvbiBjYWxjdWxhdGVEaXN0YW5jZShmaXJzdCwgc2Vjb25kKSB7CiAgICB2YXIgZmFjdG9yID0gKE1hdGguUEkgLyAxODApLAogICAgICAgIHRoZXRhLAogICAgICAgIGRpc3Q7CiAgICBmdW5jdGlvbiBkZWdyZWVzVG9SYWRpYW5zKGRlZ3JlZXMpIHsKICAgICAgICByZXR1cm4gZGVncmVlcyAqIGZhY3RvcjsKICAgIH0KICAgIGZ1bmN0aW9uIHJhZGlhbnNUb0RlZ3JlZXMocmFkaWFucykgewogICAgICAgIHJldHVybiByYWRpYW5zIC8gZmFjdG9yOwogICAgfQogICAgdGhldGEgPSBmaXJzdC5sb25naXR1ZGUgLSBzZWNvbmQubG9uZ2l0dWRlOwogICAgZGlzdCA9IE1hdGguc2luKGRlZ3JlZXNUb1JhZGlhbnMoZmlyc3QubGF0aXR1ZGUpKSAqIE1hdGguc2luKGRlZ3JlZXNUb1JhZGlhbnMoc2Vjb25kLmxhdGl0dWRlKSkgKwogICAgICAgIE1hdGguY29zKGRlZ3JlZXNUb1JhZGlhbnMoZmlyc3QubGF0aXR1ZGUpKSAqIE1hdGguY29zKGRlZ3JlZXNUb1JhZGlhbnMoc2Vjb25kLmxhdGl0dWRlKSkgKgogICAgICAgIE1hdGguY29zKGRlZ3JlZXNUb1JhZGlhbnModGhldGEpKTsKICAgIGRpc3QgPSBNYXRoLmFjb3MoZGlzdCk7CiAgICBkaXN0ID0gcmFkaWFuc1RvRGVncmVlcyhkaXN0KTsKICAgIGRpc3QgPSBkaXN0ICogNjAgKiAxLjE1MTU7CiAgICByZXR1cm4gZGlzdDsKfTsKdmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKLy9kZXZpY2VzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZSh1c2VybmFtZSwgImRldmljZVByb2ZpbGVzIikudG9BcnJheSgpOwpsb2dpbkhpc3RvcnkgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCAiZnItYXR0ci1pbXVsdGkxIikudG9BcnJheSgpOwppZiAobG9naW5IaXN0b3J5Lmxlbmd0aCA9PSAwKSBvdXRjb21lID0gIm5vSGlzdG9yeSI7CmVsc2UgewogICAgICBvdXRjb21lID0gIm5vTG9jYXRpb24iOwogICAgICBpZiAoc2hhcmVkU3RhdGUuY29udGFpbnNLZXkoImZvcmdlUm9jay5kZXZpY2UucHJvZmlsZSIpICYmIHNoYXJlZFN0YXRlLmdldCgiZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlIikuY29udGFpbnNLZXkoImxvY2F0aW9uIikpIHsKICAgICAgICB2YXIgdGhpc0RldmljZSA9IHNoYXJlZFN0YXRlLmdldCgiZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlIik7CiAgICAgICAgICBvdXRjb21lID0gIm9rIjsKICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpCiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxvZ2luSGlzdG9yeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIHZhciBlbnRyeSA9IEpTT04ucGFyc2UobG9naW5IaXN0b3J5W2ldKTsKICAgICAgICAgICAgICB2YXIgbGFzdFNlbGVjdGVkRGF0ZSA9IGVudHJ5WyJsYXN0U2VsZWN0ZWREYXRlIl07CiAgICAgICAgICAgICAgdmFyIGxhc3RMb2NhdGlvbiA9IGVudHJ5WyJsb2NhdGlvbiJdOwogICAgICAgICAgICAgIHZhciB0aW1lRGlmZiA9IG5vdyAtIHBhcnNlSW50KGxhc3RTZWxlY3RlZERhdGUpOwogICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBjYWxjdWxhdGVEaXN0YW5jZSh7ICJsYXRpdHVkZSI6IHRoaXNEZXZpY2UuZ2V0KCJsb2NhdGlvbiIpLmdldCgibGF0aXR1ZGUiKSwgImxvbmdpdHVkZSI6IHRoaXNEZXZpY2UuZ2V0KCJsb2NhdGlvbiIpLmdldCgibG9uZ2l0dWRlIikgfSwgbGFzdExvY2F0aW9uKTsKICAgICAgICAgICAgICB2ZWxvY2l0eSA9IGRpc3RhbmNlIC8gKHRpbWVEaWZmIC8gMzYwMDAwMCk7CiAgICAgICAgICAgICAgaWYgKHZlbG9jaXR5ID4gTUFYX1ZFTE9DSVRZKSBvdXRjb21lID0gImltcG9zc2libGUiOwogICAgICAgIH0KICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "3466" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.565Z", + "time": 53, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 53 + } + }, + { + "_id": "65ed6dc43f368c735b1a0551b4cc17da", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1685, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Alpha OIDC Claims Script\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Alpha%20OIDC%20Claims%20Script%22" + }, + "response": { + "bodySize": 41562, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 41562, + "text": "{\"result\":[{\"_id\":\"cf3515f0-8278-4ee3-a530-1bad7424c416\",\"name\":\"Alpha OIDC Claims Script\",\"description\":\"Default alpha realm script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "transfer-encoding", + "value": "chunked" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 800, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.622Z", + "time": 54, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 54 + } + }, + { + "_id": "a66d8fba03800d3791c7f6cfc04cbcc5", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1688, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Save Mobile OATH Preference\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Save%20Mobile%20OATH%20Preference%22" + }, + "response": { + "bodySize": 813, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 813, + "text": "{\"result\":[{\"_id\":\"0ca79cb0-ea11-4e87-adac-7f8aeebc8c03\",\"name\":\"Save Mobile OATH Preference\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkKKTsKd2l0aCAoZnIpIHsKICAKICB2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCiAgdmFyIG1mYVByZWZBdHRyaWJ1dGUgPSAiZnItYXR0ci1pbXVsdGkyIgogIHZhciBtZmFUeXBlID0gIiI7CiAgCiAgaWRSZXBvc2l0b3J5LmFkZEF0dHJpYnV0ZSh1c2VybmFtZSwgbWZhUHJlZkF0dHJpYnV0ZSwgWyJvYXRoIl0pOwogIAogIG91dGNvbWUgPSAidHJ1ZSIKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "813" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 793, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.681Z", + "time": 50, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 50 + } + }, + { + "_id": "bb0185bbe618edf37b3b81573659c176", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1676, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Set New Favourite\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Set%20New%20Favourite%22" + }, + "response": { + "bodySize": 1811, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1811, + "text": "{\"result\":[{\"_id\":\"e3b1018f-1b2e-4e96-9950-087bdfa13d6d\",\"name\":\"Set New Favourite\",\"description\":\"null\",\"script\":\"ZnVuY3Rpb24gZ2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSkgewogIHZhciBpZCA9IHNoYXJlZFN0YXRlLmdldCgnX2lkJyk7CiAgdmFyIGZySWRtQ3VzdG9tQXR0cmlidXRlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoaWQsICdmci1pZG0tY3VzdG9tLWF0dHJzJyk7CiAgaWYgKGZySWRtQ3VzdG9tQXR0cmlidXRlcykgewogICAgICB2YXIgZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0ID0gSlNPTi5wYXJzZShTdHJpbmcoZnJJZG1DdXN0b21BdHRyaWJ1dGVzLnRvQXJyYXkoKVswXSkpOwogICAgICAgIHJldHVybiBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdOwogIH0KfQoKZnVuY3Rpb24gc2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSxjdXN0b21BdHRyVmFsdWUpIHsKICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCAnZnItaWRtLWN1c3RvbS1hdHRycycpOwogIGlmIChmcklkbUN1c3RvbUF0dHJpYnV0ZXMpIHsKICAgIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QgPSBKU09OLnBhcnNlKFN0cmluZyhmcklkbUN1c3RvbUF0dHJpYnV0ZXMudG9BcnJheSgpWzBdKSk7CiAgICBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdID0gY3VzdG9tQXR0clZhbHVlOwogICAgdmFyIGpzb25fc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0KTsKICAgIGlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoaWQsICJmci1pZG0tY3VzdG9tLWF0dHJzIixbanNvbl9zdHJpbmddKTsKICB9Cn0KCnZhciBhdHRyID0gZ2V0Q3VzdG9tQXR0clZhbHVlKCJjdXN0b21fZmF2b3VyaXRlRmFjdG9yIik7CmlmICghYXR0cil7CnNldEN1c3RvbUF0dHJWYWx1ZSAoImN1c3RvbV9mYXZvdXJpdGVGYWN0b3IiLCJXZWJBdXRoTiIpOwp9CgoKCm91dGNvbWUgPSAidHJ1ZSI7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1811" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.735Z", + "time": 54, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 54 + } + }, + { + "_id": "343bec8da4c8829e19f0445d0c0c21af", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1689, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"OAuth2 Validate Scope Script\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20Validate%20Scope%20Script%22" + }, + "response": { + "bodySize": 4642, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 4642, + "text": "{\"result\":[{\"_id\":\"25e6c06d-cf70-473b-bd28-26931edc476b\",\"name\":\"OAuth2 Validate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Validation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgdmFsaWRhdGVzIHRoZSByZXF1ZXN0ZWQgc2NvcGVzIGFnYWluc3QgdGhlIGFsbG93ZWQgc2NvcGVzLgogKiBJZiBubyBzY29wZXMgYXJlIHJlcXVlc3RlZCwgZGVmYXVsdCBzY29wZXMgYXJlIGFzc3VtZWQuCiAqIFRoZSBzY3JpcHQgaGFzIGZvdXIgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgZGlmZmVyZW50IE9BdXRoMiBmbG93czoKICogICAgICAtIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlCiAqICAgICAgLSB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUKICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHJlcXVlc3RlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgVGhlIHNldCBvZiByZXF1ZXN0ZWQgc2NvcGVzLgogKiBkZWZhdWx0U2NvcGVzIC0gU2V0PFN0cmluZz4gKDEpLgogKiAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBkZWZhdWx0IHNjb3Blcy4KICogYWxsb3dlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgYWxsb3dlZCBzY29wZXMuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIGRlYnVnIGxvZ2dlciBpbnN0YW5jZToKICogICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgICAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9BVVRIMl9WQUxJREFURV9TQ09QRQogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKgogKiBUaHJvd3MgSW52YWxpZFNjb3BlRXhjZXB0aW9uOgogKiAgICAgIC0gaWYgdGhlcmUgYXJlIG5vIHNjb3BlcyByZXF1ZXN0ZWQgYW5kIGRlZmF1bHQgc2NvcGVzIGFyZSBlbXB0eQogKiAgICAgIC0gaWYgYSByZXF1ZXN0ZWQgc2NvcGUgaXMgbm90IGFsbG93ZWQKICoKICogUmV0dXJuIC0gYSBTZXQ8U3RyaW5nPiBvZiB2YWxpZGF0ZWQgc2NvcGVzICgxKS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICgyKSBDbGllbnQgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svaHR0cC9DbGllbnQuaHRtbC4KICovCgovKioKICogRGVmYXVsdCB2YWxpZGF0ZSBzY29wZSBzY3JpcHQuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZVNjb3BlcyAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkU2NvcGVFeGNlcHRpb24KICAgICk7CgogICAgdmFyIHNjb3BlczsKICAgIGlmIChyZXF1ZXN0ZWRTY29wZXMgPT0gbnVsbCB8fCByZXF1ZXN0ZWRTY29wZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgc2NvcGVzID0gZGVmYXVsdFNjb3BlczsKICAgIH0gZWxzZSB7CiAgICAgICAgc2NvcGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KGFsbG93ZWRTY29wZXMpOwogICAgICAgIHNjb3Blcy5yZXRhaW5BbGwocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICBpZiAocmVxdWVzdGVkU2NvcGVzLnNpemUoKSA+IHNjb3Blcy5zaXplKCkpIHsKICAgICAgICAgICAgdmFyIGludmFsaWRTY29wZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICAgICAgaW52YWxpZFNjb3Blcy5yZW1vdmVBbGwoYWxsb3dlZFNjb3Blcyk7CiAgICAgICAgICAgIHRocm93IG5ldyBmckphdmEuSW52YWxpZFNjb3BlRXhjZXB0aW9uKCdVbmtub3duL2ludmFsaWQgc2NvcGUocyknKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKHNjb3BlcyA9PSBudWxsIHx8IHNjb3Blcy5pc0VtcHR5KCkpIHsKICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRTY29wZUV4Y2VwdGlvbignTm8gc2NvcGUgcmVxdWVzdGVkIGFuZCBubyBkZWZhdWx0IHNjb3BlIGNvbmZpZ3VyZWQnKTsKICAgIH0KICAgIHJldHVybiBzY29wZXM7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlICgpIHsKICAgIHJldHVybiB2YWxpZGF0ZVNjb3BlcygpOwp9CgpmdW5jdGlvbiB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_VALIDATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "4642" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.793Z", + "time": 58, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 58 + } + }, + { + "_id": "c122e0c34632754298c1cf3d78d7a86f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1690, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"WordPress Profile Normalization\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22WordPress%20Profile%20Normalization%22" + }, + "response": { + "bodySize": 1382, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1382, + "text": "{\"result\":[{\"_id\":\"91d197de-5916-4dca-83b5-9a4df26e7159\",\"name\":\"WordPress Profile Normalization\",\"description\":\"Normalizes raw profile data from WordPress\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJuYW1lKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5hdmF0YXJfVVJMKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1382" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.855Z", + "time": 53, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 53 + } + }, + { + "_id": "d8b36e9647bacb5fb5169afeae53598f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1661, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"shared\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22shared%22" + }, + "response": { + "bodySize": 814, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 814, + "text": "{\"result\":[{\"_id\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"name\":\"shared\",\"description\":\"set the same shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdzaGFyZWRWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzaGFyZWQgYWNyb3NzIGFsbCBuZXN0ZWQgam91cm5leXMuIEl0IGNvbnRhaW5zIGFuIGluZGljYXRvciBpbiB3aGljaCBsZXZlbCBpdCB3YXMgbGFzdCBzZXQuJyk7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "814" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 793, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.912Z", + "time": 51, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 51 + } + }, + { + "_id": "edb15723eb51503d9ba902a83ea36e7c", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1688, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Config Provider Node Script\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Config%20Provider%20Node%20Script%22" + }, + "response": { + "bodySize": 4602, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 4602, + "text": "{\"result\":[{\"_id\":\"5e854779-6ec1-4c39-aeba-0477e0986646\",\"name\":\"Config Provider Node Script\",\"description\":\"Script to provide values for a config provider node\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKioKICogVGhlIGZvbGxvd2luZyBzY3JpcHQgaXMgYSBzaW1wbGlmaWVkIHRlbXBsYXRlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0byBidWlsZAogKiB1cCBhIGNvbmZpZyBNYXAgb2JqZWN0IHdpdGggY3VzdG9tIHZhbHVlcy4gVGhlIENvbmZpZyBQcm92aWRlciBOb2RlIHdpbGwgdGhlbgogKiBwcm92aWRlIHRoaXMgY29uZmlnIE1hcCB0byB0aGUgZGVzaXJlZCBub2RlIHR5cGUuIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBNYXAKICogeW91IGJ1aWxkIGhlcmUgaXMgbmFtZWQgJ2NvbmZpZycuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKgogKiBub2RlU3RhdGUgLSBOb2RlIFN0YXRlICgxKQogKiAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoaXMgcmVwcmVzZW50cyB0aGUgY3VycmVudCB2YWx1ZXMgc3RvcmVkIGluIHRoZSBub2RlIHN0YXRlLgogKgogKiBpZFJlcG9zaXRvcnkgLSBQcm9maWxlIERhdGEgKDIpCiAqICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgYSByZXBvc2l0b3J5IHRvIHJldHJpZXZlIHVzZXIgaW5mb3JtYXRpb24uCiAqCiAqIHNlY3JldHMgLSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAoMykKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBTZWNyZXRzIEFQSSBmcm9tIGEgc2NyaXB0aW5nIGNvbnRleHQuCiAqCiAqIHJlcXVlc3RIZWFkZXJzICg0KSAtIE1hcCAoNSkKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIGZvciBhY2Nlc3NpbmcgaGVhZGVycyBpbiB0aGUgbG9naW4gcmVxdWVzdC4KICoKICogbG9nZ2VyIC0gRGVidWcgTG9nZ2luZyAoNikKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2UuCiAqCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoNykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cy4KICoKICogcmVhbG0gLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqCiAqIGV4aXN0aW5nU2Vzc2lvbiAtIE1hcDxTdHJpbmcsIFN0cmluZz4gKDUpCiAqICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LiBUaGUgcmV0dXJuZWQgbWFwIGZyb20KICogICAgICAgICAgU1NPVG9rZW4uZ2V0UHJvcGVydGllcygpICg4KQogKgogKiByZXF1ZXN0UGFyYW1ldGVycyAtIE1hcCAoNSkKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBwYXJhbWV0ZXJzLgogKgogKgogKiBPdXRwdXRzOgogKgogKiBjb25maWcgLSBNYXAgKDUpCiAqICAgICAgICAgICBEZWZpbmUgYW5kIGZpbGwgYSBNYXAgb2JqZWN0IG5hbWVkICdjb25maWcnIHdpdGggY3VzdG9tIHZhbHVlcywgdGhpcyB3aWxsIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlCiAqICAgICAgICAgICBhc3NvY2lhdGVkIG5vZGUgc2VsZWN0ZWQgaW4gdGhlIENvbmZpZ1Byb3ZpZGVyTm9kZS4KICoKICogUmVmZXJlbmNlOgogKiAoMSkgTm9kZSBTdGF0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9pZGNsb3VkLWFtL2xhdGVzdC9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtbm9kZVN0YXRlCiAqICgyKSBQcm9maWxlIERhdGEgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4xL2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1pZC1yZXBvCiAqICgzKSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjEvYXV0aGVudGljYXRpb24tZ3VpZGUvc2NyaXB0aW5nLWFwaS1ub2RlLmh0bWwjc2NyaXB0aW5nLWFwaS1hdXRobi1zZWNyZXRzCiAqICg0KSBSZXF1ZXN0IEhlYWRlcnMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtcmVxdWVzdEhlYWRlcnMuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL01hcC5odG1sCiAqICg2KSBEZWJ1ZyBMb2dnaW5nIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogKDcpIEhUVFAgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg4KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqLwoKY29uZmlnID0gewogICAgImtleTAiOiB7InN1YktleSI6ICJ2YWx1ZTAifSwKICAgICJrZXkxIjogInZhbHVlMSIKfTs=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"CONFIG_PROVIDER_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "4602" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:29.968Z", + "time": 53, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 53 + } + }, + { + "_id": "c896d9e1d12bcb7e3a5d3d01a7c0dbbc", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1719, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Social Identity Provider Profile Transformation Script\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Social%20Identity%20Provider%20Profile%20Transformation%20Script%22" + }, + "response": { + "bodySize": 1036, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1036, + "text": "{\"result\":[{\"_id\":\"1d475815-72cb-42eb-aafd-4026989d28a7\",\"name\":\"Social Identity Provider Profile Transformation Script\",\"description\":\"Default global script for Social Identity Provider Profile Transformation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyogRGVmYXVsdCBTb2NpYWwgSWRlbnRpdHkgUHJvdmlkZXIgUHJvZmlsZSBUcmFuc2Zvcm1hdGlvbiBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzICov\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1036" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:30.025Z", + "time": 52, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 52 + } + }, + { + "_id": "bdb484c0a5d4bad077537e0f972d3632", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1689, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Facebook Profile Normalization\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Facebook%20Profile%20Normalization%22" + }, + "response": { + "bodySize": 1504, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1504, + "text": "{\"result\":[{\"_id\":\"bae1d54a-e97d-4997-aa5d-c027f21af82c\",\"name\":\"Facebook Profile Normalization\",\"description\":\"Normalizes raw profile data from Facebook\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1504" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:30.082Z", + "time": 51, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 51 + } + }, + { + "_id": "97e365ada37a9af61562e96f36b8cb1a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1677, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"OIDC Claims Script\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OIDC%20Claims%20Script%22" + }, + "response": { + "bodySize": 41550, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 41550, + "text": "{\"result\":[{\"_id\":\"36863ffb-40ec-48b9-94b1-9a99f71cc3b5\",\"name\":\"OIDC Claims Script\",\"description\":\"Default global script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "transfer-encoding", + "value": "chunked" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 800, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:30.138Z", + "time": 60, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 60 + } + }, + { + "_id": "6305235cfeadffc508b8076bf5229d24", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1692, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Scripted Module - Client Side\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Scripted%20Module%20-%20Client%20Side%22" + }, + "response": { + "bodySize": 983, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 983, + "text": "{\"result\":[{\"_id\":\"c827d2b4-3608-4693-868e-bbcf86bd87c7\",\"name\":\"Scripted Module - Client Side\",\"description\":\"Default global script for client side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTYtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qIERlZmF1bHQgQXV0aGVudGljYXRpb24gY2xpZW50IHNpZGUgc2NyaXB0IHRvIHVzZSBhcyBhIHRlbXBsYXRlIGZvciBuZXcgc2NyaXB0cyAqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "983" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 793, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:30.203Z", + "time": 56, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 56 + } + }, + { + "_id": "d7355a4b7f7900930cfa14fc0e22eef6", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1660, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Dummy\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Dummy%22" + }, + "response": { + "bodySize": 452, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 452, + "text": "{\"result\":[{\"_id\":\"4c963bb3-7084-43d0-bcdc-a47482cf1825\",\"name\":\"Dummy\",\"description\":\"Dummy\",\"script\":\"Cm91dGNvbWUgPSAidHJ1ZSI7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "452" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 793, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:30.263Z", + "time": 53, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 53 + } + }, + { + "_id": "cdb6bf47cf4e63bb698595aa7700365d", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1688, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Twitter Profile Normalization\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Twitter%20Profile%20Normalization%22" + }, + "response": { + "bodySize": 1378, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1378, + "text": "{\"result\":[{\"_id\":\"8e298710-b55e-4085-a464-88a375a4004b\",\"name\":\"Twitter Profile Normalization\",\"description\":\"Normalizes raw profile data from Twitter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkX3N0ciksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnByb2ZpbGVfaW1hZ2VfdXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnNjcmVlbl9uYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1378" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:30.320Z", + "time": 51, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 51 + } + }, + { + "_id": "fec901470ad24ffd46e16c9425bc5b3b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1677, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Debug Shared State\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Debug%20Shared%20State%22" + }, + "response": { + "bodySize": 1300, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1300, + "text": "{\"result\":[{\"_id\":\"634fb0b2-8873-4e78-8913-9a669e4f3816\",\"name\":\"Debug Shared State\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCik7CndpdGggKGZyKSB7CiAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgZGVidWcgPSBTdHJpbmcoIlNoYXJlZCBzdGF0ZTogIiArIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkgKyAiXFxuIik7CiAgICAgIGRlYnVnID0gU3RyaW5nKGRlYnVnICsgIlJlcXVlc3QgaGVhZGVyczogIiArIHJlcXVlc3RIZWFkZXJzLnRvU3RyaW5nKCkgKyAiXFxuIik7CiAgICAgIGlmICh0eXBlb2YgZXhpc3RpbmdTZXNzaW9uICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgZGVidWcgPSBTdHJpbmcoZGVidWcgKyAiRXhpc3Rpbmcgc2Vzc2lvbjogIiArICJcXG4iKTsKICAgICAgfSAgCiAgICAgICAgIGxvZ2dlci5lcnJvcigiSk9OSzogIiArIGRlYnVnKTsKICAgICAgc2NyaXB0ID0gU3RyaW5nKCdhbGVydCgiJytkZWJ1ZysnIik7Jyk7CiAgICAgIGFjdGlvbiA9IEFjdGlvbi5zZW5kKG5ldyBTY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2soc2NyaXB0KSkuYnVpbGQoKTsKICB9CiAgb3V0Y29tZSA9ICJ0cnVlIjsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1300" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 794, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2024-06-19T21:28:30.375Z", + "time": 60, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 60 + } + }, + { + "_id": "dcc34405f9b2c07186729f2a8039368f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1690, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "name eq \"Instagram Profile Normalization\"" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Instagram%20Profile%20Normalization%22" + }, + "response": { + "bodySize": 1178, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1178, + "text": "{\"result\":[{\"_id\":\"1244e639-4a31-401d-ab61-d75133d8dc9e\",\"name\":\"Instagram Profile Normalization\",\"description\":\"Normalizes raw profile data from Instagram\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-report-only", + "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.0,resource=1.1, resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1178" + }, + { + "name": "date", + "value": "Wed, 19 Jun 2024 21:28:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -5893,14 +11693,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 773, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:24.963Z", - "time": 59, + "startedDateTime": "2024-06-19T21:28:30.442Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -5908,11 +11708,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 59 + "wait": 53 } }, { - "_id": "44e730c22a54944186cc3c6ed74bbce4", + "_id": "000ff0f2b46c206e53f43f99849549df", "_order": 0, "cache": {}, "request": { @@ -5924,16 +11724,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -5943,28 +11743,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1641, + "headersSize": 1691, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Amazon Profile Normalization\"" + "value": "name eq \"Normalized Profile to Identity\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Amazon%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Normalized%20Profile%20to%20Identity%22" }, "response": { - "bodySize": 1296, + "bodySize": 1648, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1296, - "text": "{\"result\":[{\"_id\":\"6b3cfd48-62d3-48ff-a96f-fe8f3a22ab30\",\"name\":\"Amazon Profile Normalization\",\"description\":\"Normalizes raw profile data from Amazon\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1648, + "text": "{\"result\":[{\"_id\":\"ed685f9f-5909-4726-86e8-22bd38b47663\",\"name\":\"Normalized Profile to Identity\",\"description\":\"Converts a normalized social profile into an Identity\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgaWRlbnRpdHkgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgiY24iLCBub3JtYWxpemVkUHJvZmlsZS5kaXNwbGF5TmFtZSksCiAgICAgICAgZmllbGQoInVzZXJOYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUudXNlcm5hbWUpLAogICAgICAgIGZpZWxkKCJpcGxhbmV0LWFtLXVzZXItYWxpYXMtbGlzdCIsIHNlbGVjdGVkSWRwICsgJy0nICsgbm9ybWFsaXplZFByb2ZpbGUuaWQuYXNTdHJpbmcoKSkpKQoKcmV0dXJuIGlkZW50aXR5\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -6014,20 +11818,24 @@ }, { "name": "content-length", - "value": "1296" + "value": "1648" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:24 GMT" + "value": "Wed, 19 Jun 2024 21:28:29 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -6037,14 +11845,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:25.034Z", - "time": 62, + "startedDateTime": "2024-06-19T21:28:30.500Z", + "time": 54, "timings": { "blocked": -1, "connect": -1, @@ -6052,11 +11860,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 62 + "wait": 54 } }, { - "_id": "d3af4f4c72e384f18ea7e6e408bf5d8c", + "_id": "edb389c22d25c98fc8a100c57f0da42f", "_order": 0, "cache": {}, "request": { @@ -6068,16 +11876,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -6087,28 +11895,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1646, + "headersSize": 1670, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Scripted Module - Server Side\"" + "value": "name eq \"pwdlessCheck.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Scripted%20Module%20-%20Server%20Side%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22pwdlessCheck.js%22" }, "response": { - "bodySize": 4699, + "bodySize": 1093, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 4699, - "text": "{\"result\":[{\"_id\":\"7e3d7067-d50f-4674-8c76-a3e13a810c33\",\"name\":\"Scripted Module - Server Side\",\"description\":\"Default global script for server side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgp2YXIgU1RBUlRfVElNRSA9IDk7ICAvLyA5YW0KdmFyIEVORF9USU1FICAgPSAxNzsgLy8gNXBtCnZhciBsb25naXR1ZGUsIGxhdGl0dWRlOwp2YXIgbG9jYWxUaW1lOwoKbG9nZ2VyLm1lc3NhZ2UoIlN0YXJ0aW5nIHNjcmlwdGVkIGF1dGhlbnRpY2F0aW9uIik7CmxvZ2dlci5tZXNzYWdlKCJVc2VyOiAiICsgdXNlcm5hbWUpOwoKdmFyIHVzZXJQb3N0YWxBZGRyZXNzID0gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKTsKbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgYWRkcmVzczogIiArIHVzZXJQb3N0YWxBZGRyZXNzKTsKCmdldExvbmdpdHVkZUxhdGl0dWRlRnJvbVVzZXJQb3N0YWxBZGRyZXNzKCk7CmdldExvY2FsVGltZSgpOwoKbG9nZ2VyLm1lc3NhZ2UoIkN1cnJlbnQgdGltZSBhdCB0aGUgdXNlcnMgbG9jYXRpb246ICIgKyBsb2NhbFRpbWUuZ2V0SG91cnMoKSk7CmlmIChsb2NhbFRpbWUuZ2V0SG91cnMoKSA8IFNUQVJUX1RJTUUgfHwgbG9jYWxUaW1lLmdldEhvdXJzKCkgPiBFTkRfVElNRSkgewogICAgbG9nZ2VyLmVycm9yKCJMb2dpbiBmb3JiaWRkZW4gb3V0c2lkZSB3b3JrIGhvdXJzISIpOwogICAgYXV0aFN0YXRlID0gRkFJTEVEOwp9IGVsc2UgewogICAgbG9nZ2VyLm1lc3NhZ2UoIkF1dGhlbnRpY2F0aW9uIGFsbG93ZWQhIik7CiAgICBhdXRoU3RhdGUgPSBTVUNDRVNTOwp9CgpmdW5jdGlvbiBnZXRMb25naXR1ZGVMYXRpdHVkZUZyb21Vc2VyUG9zdGFsQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlclBvc3RhbEFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwogICAgICAvL3RoZSBhYm92ZSBVUkkgaGFzIHRvIGJlIGV4dGVuZGVkIHdpdGggYW4gQVBJX0tFWSBpZiB1c2VkIGluIGEgZnJlcXVlbnQgbWFubmVyCiAgICAgIC8vc2VlIGRvY3VtZW50YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9nZW9jb2RpbmcvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIGdlb2NvZGUgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIHZhciBpOwogICAgZm9yIChpID0gMDsgaSA8IGdlb2NvZGUucmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciByZXN1bHQgPSBnZW9jb2RlLnJlc3VsdHNbaV07CiAgICAgICAgbGF0aXR1ZGUgPSByZXN1bHQuZ2VvbWV0cnkubG9jYXRpb24ubGF0OwogICAgICAgIGxvbmdpdHVkZSA9IHJlc3VsdC5nZW9tZXRyeS5sb2NhdGlvbi5sbmc7CgogICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJsYXRpdHVkZToiICsgbGF0aXR1ZGUgKyAiIGxvbmdpdHVkZToiICsgbG9uZ2l0dWRlKTsKICAgIH0KfQoKZnVuY3Rpb24gZ2V0TG9jYWxUaW1lKCkgewoKICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7CiAgICB2YXIgbG9jYXRpb24gPSAibG9jYXRpb249IiArIGxhdGl0dWRlICsgIiwiICsgbG9uZ2l0dWRlOwogICAgdmFyIHRpbWVzdGFtcCA9ICJ0aW1lc3RhbXA9IiArIG5vdzsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS90aW1lem9uZS9qc29uPyIgKyBsb2NhdGlvbiArICImIiArIHRpbWVzdGFtcCk7CiAgICAgIHJlcXVlc3Quc2V0TWV0aG9kKCJHRVQiKTsKICAgICAgLy90aGUgYWJvdmUgVVJJIGhhcyB0byBiZSBleHRlbmRlZCB3aXRoIGFuIEFQSV9LRVkgaWYgdXNlZCBpbiBhIGZyZXF1ZW50IG1hbm5lcgogICAgICAvL3NlZSBkb2N1bWVudGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vdGltZXpvbmUvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIHRpbWV6b25lID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICB2YXIgbG9jYWxUaW1lc3RhbXAgPSBwYXJzZUludChub3cpICsgcGFyc2VJbnQodGltZXpvbmUuZHN0T2Zmc2V0KSArIHBhcnNlSW50KHRpbWV6b25lLnJhd09mZnNldCk7CiAgICBsb2NhbFRpbWUgPSBuZXcgRGF0ZShsb2NhbFRpbWVzdGFtcCoxMDAwKTsKfQoKZnVuY3Rpb24gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKSB7CiAgICB2YXIgdXNlckFkZHJlc3NTZXQgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCAicG9zdGFsQWRkcmVzcyIpOwogICAgaWYgKHVzZXJBZGRyZXNzU2V0ID09IG51bGwgfHwgdXNlckFkZHJlc3NTZXQuaXNFbXB0eSgpKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIGFkZHJlc3Mgc3BlY2lmaWVkIGZvciB1c2VyOiAiICsgdXNlcm5hbWUpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKQp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1093, + "text": "{\"result\":[{\"_id\":\"40a38167-2371-4d49-bbf1-e0e97ace3132\",\"name\":\"pwdlessCheck.js\",\"description\":\"null\",\"script\":\"b3V0Y29tZSA9ICJsZWdhY3kiOwp2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwppZihnZXRDdXN0b21BdHRyVmFsdWUoImN1c3RvbV9wYXNzd29yZGxlc3MiKT09dHJ1ZSkgewogIG91dGNvbWUgPSAicHdkbGVzcyI7Cn0KCmZ1bmN0aW9uIGdldEN1c3RvbUF0dHJWYWx1ZSAoY3VzdG9tQXR0ck5hbWUpCnsKICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCAnZnItaWRtLWN1c3RvbS1hdHRycycpOwogIGlmIChmcklkbUN1c3RvbUF0dHJpYnV0ZXMpCiAgewogICAgICB2YXIgZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0ID0gSlNPTi5wYXJzZShTdHJpbmcoZnJJZG1DdXN0b21BdHRyaWJ1dGVzLnRvQXJyYXkoKVswXSkpOwogICAgICAgIHJldHVybiBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdOwogIH0KfQo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -6158,20 +11970,24 @@ }, { "name": "content-length", - "value": "4699" + "value": "1093" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:24 GMT" + "value": "Wed, 19 Jun 2024 21:28:29 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -6181,14 +11997,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:25.103Z", - "time": 61, + "startedDateTime": "2024-06-19T21:28:30.559Z", + "time": 55, "timings": { "blocked": -1, "connect": -1, @@ -6196,11 +12012,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 61 + "wait": 55 } }, { - "_id": "11fc76fd2f9a228b971725c8a994284b", + "_id": "b8afb85169152369b0e1f80254bd7a53", "_order": 0, "cache": {}, "request": { @@ -6212,16 +12028,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -6231,28 +12047,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1641, + "headersSize": 1684, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Custom Device Match Script\"" + "value": "name eq \"Scripted Policy Condition\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Custom%20Device%20Match%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Scripted%20Policy%20Condition%22" }, "response": { - "bodySize": 542, + "bodySize": 6917, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 542, - "text": "{\"result\":[{\"_id\":\"d58977ed-0542-4147-8197-973ef7300191\",\"name\":\"Custom Device Match Script\",\"description\":\"Custom Device Match Script\",\"script\":\"LyoKICogQ3VzdG9tIERldmljZSBNYXRjaCBTY3JpcHQKICovCgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 6917, + "text": "{\"result\":[{\"_id\":\"9de3eb62-f131-4fac-a294-7bd170fd4acb\",\"name\":\"Scripted Policy Condition\",\"description\":\"Default global script for Scripted Policy Conditions\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qKgogKiBUaGlzIGlzIGEgUG9saWN5IENvbmRpdGlvbiBleGFtcGxlIHNjcmlwdC4gSXQgZGVtb25zdHJhdGVzIGhvdyB0byBhY2Nlc3MgYSB1c2VyJ3MgaW5mb3JtYXRpb24sCiAqIHVzZSB0aGF0IGluZm9ybWF0aW9uIGluIGV4dGVybmFsIEhUVFAgY2FsbHMgYW5kIG1ha2UgYSBwb2xpY3kgZGVjaXNpb24gYmFzZWQgb24gdGhlIG91dGNvbWUuCiAqLwoKdmFyIHVzZXJBZGRyZXNzLCB1c2VySVAsIHJlc291cmNlSG9zdDsKCmlmICh2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkpIHsKCiAgICB2YXIgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9IGdldENvdW50cnlGcm9tVXNlckFkZHJlc3MoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJDb3VudHJ5IHJldHJpZXZlZCBmcm9tIHVzZXIncyBhZGRyZXNzOiAiICsgY291bnRyeUZyb21Vc2VyQWRkcmVzcyk7CiAgICB2YXIgY291bnRyeUZyb21Vc2VySVAgPSBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpOwogICAgbG9nZ2VyLm1lc3NhZ2UoIkNvdW50cnkgcmV0cmlldmVkIGZyb20gdXNlcidzIElQOiAiICsgY291bnRyeUZyb21Vc2VySVApOwogICAgdmFyIGNvdW50cnlGcm9tUmVzb3VyY2VVUkkgPSBnZXRDb3VudHJ5RnJvbVJlc291cmNlVVJJKCk7CiAgICBsb2dnZXIubWVzc2FnZSgiQ291bnRyeSByZXRyaWV2ZWQgZnJvbSByZXNvdXJjZSBVUkk6ICIgKyBjb3VudHJ5RnJvbVJlc291cmNlVVJJKTsKCiAgICBpZiAoY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21Vc2VySVAgJiYgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21SZXNvdXJjZVVSSSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIFN1Y2NlZWRlZCIpOwogICAgICAgIHJlc3BvbnNlQXR0cmlidXRlcy5wdXQoImNvdW50cnlPZk9yaWdpbiIsIFtjb3VudHJ5RnJvbVVzZXJBZGRyZXNzXSk7CiAgICAgICAgYXV0aG9yaXplZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIEZhaWxlZCIpOwogICAgICAgIGF1dGhvcml6ZWQgPSBmYWxzZTsKICAgIH0KCn0gZWxzZSB7CiAgICBsb2dnZXIubWVzc2FnZSgiUmVxdWlyZWQgcGFyYW1ldGVycyBub3QgZm91bmQuIEF1dGhvcml6YXRpb24gRmFpbGVkLiIpOwogICAgYXV0aG9yaXplZCA9IGZhbHNlOwp9CgovKioKICogVXNlIHRoZSB1c2VyJ3MgYWRkcmVzcyB0byBsb29rdXAgdGhlaXIgY291bnRyeSBvZiByZXNpZGVuY2UuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgdXNlcidzIGNvdW50cnkgb2YgcmVzaWRlbmNlLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21Vc2VyQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlckFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgZ2VvY29kZSA9IEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvY29kZS5yZXN1bHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGdlb2NvZGUucmVzdWx0c1tpXTsKICAgICAgICB2YXIgajsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgcmVzdWx0LmFkZHJlc3NfY29tcG9uZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAocmVzdWx0LmFkZHJlc3NfY29tcG9uZW50c1tpXS50eXBlc1swXSA9PSAiY291bnRyeSIpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYWRkcmVzc19jb21wb25lbnRzW2ldLmxvbmdfbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKLyoqCiAqIFVzZSB0aGUgdXNlcidzIElQIHRvIGxvb2t1cCB0aGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqLwpmdW5jdGlvbiBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgdXNlcklQKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdC5jb3VudHJ5OwogICAgfQp9CgovKioKICogVXNlIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UncyBob3N0IG5hbWUgdG8gbG9va3VwIHRoZSBjb3VudHJ5IHdoZXJlIHRoZSByZXNvdXJjZSBpcyBob3N0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBpbiB3aGljaCB0aGUgcmVzb3VyY2UgaXMgaG9zdGVkLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21SZXNvdXJjZVVSSSgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgZW5jb2RlVVJJQ29tcG9uZW50KHJlc291cmNlSG9zdCkpOwogICAgICByZXF1ZXN0LnNldE1ldGhvZCgiR0VUIik7CgogICAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3QpLmdldCgpOwogICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwoKICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIGlmIChyZXN1bHQpIHsKICAgICAgICByZXR1cm4gcmVzdWx0LmNvdW50cnk7CiAgICB9Cn0KCi8qKgogKiBSZXRyaWV2ZSBhbmQgdmFsaWRhdGUgdGhlIHZhcmlhYmxlcyByZXF1aXJlZCB0byBtYWtlIHRoZSBleHRlcm5hbCBIVFRQIGNhbGxzLgogKgogKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2lsbCBiZSB0cnVlIGlmIHZhbGlkYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkgewogICAgdmFyIHVzZXJBZGRyZXNzU2V0ID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKCJwb3N0YWxBZGRyZXNzIik7CiAgICBpZiAodXNlckFkZHJlc3NTZXQgPT0gbnVsbCB8fCB1c2VyQWRkcmVzc1NldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gYWRkcmVzcyBzcGVjaWZpZWQgZm9yIHVzZXI6ICIgKyB1c2VybmFtZSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdXNlckFkZHJlc3MgPSB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIGFkZHJlc3M6ICIgKyB1c2VyQWRkcmVzcyk7CgogICAgaWYgKCFlbnZpcm9ubWVudCkgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJObyBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiB0aGUgZXZhbHVhdGlvbiByZXF1ZXN0LiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB2YXIgaXBTZXQgPSBlbnZpcm9ubWVudC5nZXQoIklQIik7CiAgICBpZiAoaXBTZXQgPT0gbnVsbCB8fCBpcFNldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gSVAgc3BlY2lmaWVkIGluIHRoZSBldmFsdWF0aW9uIHJlcXVlc3QgZW52aXJvbm1lbnQgcGFyYW1ldGVycy4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB1c2VySVAgPSBpcFNldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIElQOiAiICsgdXNlcklQKTsKCiAgICBpZiAoIXJlc291cmNlVVJJKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIHJlc291cmNlIFVSSSBzcGVjaWZpZWQuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmVzb3VyY2VIb3N0ID0gcmVzb3VyY2VVUkkubWF0Y2goL14oLio6XC9cLykod3d3XC4pPyhbQS1aYS16MC05XC1cLl0rKSg6WzAtOV0rKT8oLiopJC8pWzNdOwogICAgbG9nZ2VyLm1lc3NhZ2UoIlJlc291cmNlIGhvc3Q6ICIgKyByZXNvdXJjZUhvc3QpOwoKICAgIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"POLICY_CONDITION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -6302,20 +12122,24 @@ }, { "name": "content-length", - "value": "542" + "value": "6917" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:24 GMT" + "value": "Wed, 19 Jun 2024 21:28:29 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -6325,14 +12149,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 773, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:25.173Z", - "time": 77, + "startedDateTime": "2024-06-19T21:28:30.619Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -6340,11 +12164,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 77 + "wait": 52 } }, { - "_id": "cd03ce6bab1791470b0a5e2b82b846e7", + "_id": "5466b43a77ca475a4e01825da5f1af63", "_order": 0, "cache": {}, "request": { @@ -6356,16 +12180,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -6375,28 +12199,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1650, + "headersSize": 1687, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"SAML2 IDP Attribute Mapper Script\"" + "value": "name eq \"updateWebAuthNProfileNickname.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22SAML2%20IDP%20Attribute%20Mapper%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22updateWebAuthNProfileNickname.js%22" }, "response": { - "bodySize": 10711, + "bodySize": 1238, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 10711, - "text": "{\"result\":[{\"_id\":\"c4f22465-2368-4e27-8013-e6399974fd48\",\"name\":\"SAML2 IDP Attribute Mapper Script\",\"description\":\"Default global script for SAML2 IDP Attribute Mapper\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSBvYmplY3RzIGZvciB0aGUgSURQIGZyYW1ld29yayB0byBpbnNlcnQgaW50byB0aGUgZ2VuZXJhdGVkIEFzc2VydGlvbi4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgICAgICBUaGUgaG9zdGVkIGVudGl0eSBJRC4KICogcmVtb3RlRW50aXR5SWQgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgICAgVGhlIHJlbW90ZSBlbnRpdHkgSUQuCiAqIHJlYWxtIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGluZyB0by4KICogbG9nZ2VyIC0gQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5TQU1MMl9JRFBfQVRUUklCVVRFX01BUFBFUgogKiBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgLSBJZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgKDIpCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFuIElkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlciBpbnN0YW5jZSBjb250YWluaW5nIG1ldGhvZHMgdXNlZCBmb3IgSURQIGF0dHJpYnV0ZSBtYXBwaW5nLgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb246CiAqICAgICAgLSBvbiBmYWlsaW5nIHRvIG1hcCB0aGUgSURQIGF0dHJpYnV0ZXMuCiAqCiAqIFJldHVybiAtIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSAoMykgb2JqZWN0cy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgSWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaHRtbC4KICogKDMpIEF0dHJpYnV0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9hc3NlcnRpb24vQXR0cmlidXRlLmh0bWwuCiAqLwoKLyoqCiAqIERlZmF1bHQgU0FNTDIgSURQIEF0dHJpYnV0ZSBNYXBwZXIuCiAqLwpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKCkgewogICAgdmFyIGZySmF2YSA9IEphdmFJbXBvcnRlcigKICAgICAgICBjb20uc3VuLmlkZW50aXR5LnNhbWwyLmNvbW1vbi5TQU1MMkV4Y2VwdGlvbgogICAgKTsKCiAgICBjb25zdCBkZWJ1Z01ldGhvZCA9ICJTY3JpcHRlZElEUEF0dHJpYnV0ZU1hcHBlci5nZXRBdHRyaWJ1dGVzOjogIjsKCiAgICB0cnkgewoKICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1Nlc3Npb25WYWxpZChzZXNzaW9uKSkgewogICAgICAgICAgICBsb2dnZXIuZXJyb3IoZGVidWdNZXRob2QgKyAiSW52YWxpZCBzZXNzaW9uLiIpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHZhciBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0UmVtb3RlU1BDb25maWdBdHRyaWJ1dGVNYXAocmVhbG0sIHJlbW90ZUVudGl0eUlkKTsKICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJSZW1vdGUgU1AgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICBpZiAoY29uZmlnTWFwID09IG51bGwgfHwgY29uZmlnTWFwLmlzRW1wdHkoKSkgewogICAgICAgICAgICBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0SG9zdGVkSURQQ29uZmlnQXR0cmlidXRlTWFwKHJlYWxtLCBob3N0ZWRFbnRpdHlJZCk7CiAgICAgICAgICAgIGlmIChjb25maWdNYXAgPT0gbnVsbCB8fCBjb25maWdNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJDb25maWd1cmF0aW9uIG1hcCBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKGRlYnVnTWV0aG9kICsgIkhvc3RlZCBJRFAgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICB9CgogICAgICAgIHZhciBhdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoKTsKICAgICAgICB2YXIgc3RyaW5nVmFsdWVNYXAgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKICAgICAgICB2YXIgYmluYXJ5VmFsdWVNYXA7CiAgICAgICAgdmFyIGxvY2FsQXR0cmlidXRlOwoKICAgICAgICAvLyBEb24ndCB0cnkgdG8gcmVhZCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBkYXRhc3RvcmUgaWYgdGhlIGlnbm9yZWQgcHJvZmlsZSBpcyBlbmFibGVkIGluIHRoaXMgcmVhbG0uCiAgICAgICAgaWYgKCFpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaXNJZ25vcmVkUHJvZmlsZShzZXNzaW9uLCByZWFsbSkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIFJlc29sdmUgYXR0cmlidXRlcyB0byBiZSByZWFkIGZyb20gdGhlIGRhdGFzdG9yZS4KICAgICAgICAgICAgICAgIHZhciBzdHJpbmdBdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KCk7CiAgICAgICAgICAgICAgICB2YXIgYmluYXJ5QXR0cmlidXRlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgIHdoaWxlIChrZXlJdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlJdGVyLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBsb2NhbEF0dHJpYnV0ZSA9IGNvbmZpZ01hcC5nZXQoa2V5KTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1N0YXRpY0F0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc0JpbmFyeUF0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHRyZWF0IGFzIGJlaW5nIGJpbmFyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5QXR0cmlidXRlcy5hZGQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLnJlbW92ZUJpbmFyeUF0dHJpYnV0ZUZsYWcobG9jYWxBdHRyaWJ1dGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMuYWRkKGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXN0cmluZ0F0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWVNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0QXR0cmlidXRlcyhzZXNzaW9uLCBzdHJpbmdBdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghYmluYXJ5QXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBiaW5hcnlWYWx1ZU1hcCA9IGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5nZXRCaW5hcnlBdHRyaWJ1dGVzKHNlc3Npb24sIGJpbmFyeUF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGRlYnVnTWV0aG9kICsgIkVycm9yIGFjY2Vzc2luZyB0aGUgZGF0YXN0b3JlLiAiICsgZXJyb3IpOwogICAgICAgICAgICAgICAgLy9jb250aW51ZSB0byBjaGVjayBpbiBzc290b2tlbi4KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICB3aGlsZSAoa2V5SXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgdmFyIGtleSA9IGtleUl0ZXIubmV4dCgpCiAgICAgICAgICAgIHZhciBuYW1lRm9ybWF0ID0gbnVsbDsKICAgICAgICAgICAgdmFyIHNhbWxBdHRyaWJ1dGUgPSBrZXk7CiAgICAgICAgICAgIGxvY2FsQXR0cmlidXRlID0gY29uZmlnTWFwLmdldChrZXkpOwogICAgICAgICAgICAvLyBjaGVjayBpZiBzYW1sQXR0cmlidXRlIGhhcyBmb3JtYXQgbmFtZUZvcm1hdHxzYW1sQXR0cmlidXRlCiAgICAgICAgICAgIHZhciBzYW1sQXR0cmlidXRlcyA9IFN0cmluZyhuZXcgamF2YS5sYW5nLlN0cmluZyhzYW1sQXR0cmlidXRlKSk7CiAgICAgICAgICAgIHZhciB0b2tlbnMgPSBzYW1sQXR0cmlidXRlcy5zcGxpdCgnfCcpOwoKICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICBuYW1lRm9ybWF0ID0gdG9rZW5zWzBdOwogICAgICAgICAgICAgICAgc2FtbEF0dHJpYnV0ZSA9IHRva2Vuc1sxXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVZhbHVlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzU3RhdGljQXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdGF0aWMgZmxhZyBiZWZvcmUgdXNpbmcgaXQgYXMgdGhlIHN0YXRpYyB2YWx1ZQogICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlU3RhdGljQXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoW2xvY2FsQXR0cmlidXRlXSk7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJBZGRpbmcgc3RhdGljIHZhbHVlIHt9IGZvciBhdHRyaWJ1dGUgbmFtZWQge30iLCBsb2NhbEF0dHJpYnV0ZSwgc2FtbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzQmluYXJ5QXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZmxhZyBhcyBub3QgdXNlZCBmb3IgbG9va3VwCiAgICAgICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlQmluYXJ5QXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzID0gaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldEJpbmFyeUF0dHJpYnV0ZVZhbHVlcyhzYW1sQXR0cmlidXRlLCBsb2NhbEF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5VmFsdWVNYXApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWVNYXAgIT0gbnVsbCAmJiAhc3RyaW5nVmFsdWVNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlcyA9IHN0cmluZ1ZhbHVlTWFwLmdldChsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoZGVidWdNZXRob2QgKyAie30gc3RyaW5nIHZhbHVlIG1hcCB3YXMgZW1wdHkgb3IgbnVsbC4iLCBsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSB1c2VycyBzc29Ub2tlbgogICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlcyA9PSBudWxsIHx8IGF0dHJpYnV0ZVZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJVc2VyIHByb2ZpbGUgZG9lcyBub3QgaGF2ZSB2YWx1ZSBmb3Ige30sIGNoZWNraW5nIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldFByb3BlcnR5U2V0KHNlc3Npb24sIGxvY2FsQXR0cmlidXRlKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZXMgPT0gbnVsbCB8fCBhdHRyaWJ1dGVWYWx1ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJ7fSBub3QgZm91bmQgaW4gdXNlciBwcm9maWxlIG9yIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuYWRkKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5jcmVhdGVTQU1MQXR0cmlidXRlKHNhbWxBdHRyaWJ1dGUsIG5hbWVGb3JtYXQsIGF0dHJpYnV0ZVZhbHVlcykpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXR0cmlidXRlczsKCiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGxvZ2dlci5lcnJvcihkZWJ1Z01ldGhvZCArICJFcnJvciBtYXBwaW5nIElEUCBhdHRyaWJ1dGVzLiAiICsgZXJyb3IpOwogICAgICAgIHRocm93IG5ldyBmckphdmEuU0FNTDJFeGNlcHRpb24oZXJyb3IpOwogICAgfQp9CgpnZXRBdHRyaWJ1dGVzKCk7\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ATTRIBUTE_MAPPER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1238, + "text": "{\"result\":[{\"_id\":\"01bec3a8-105d-45dc-9f80-d003e1b33fa2\",\"name\":\"updateWebAuthNProfileNickname.js\",\"description\":\"null\",\"script\":\"dmFyIGlkID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKdmFyIHByb2ZpbGVzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShpZCwid2ViYXV0aG5EZXZpY2VQcm9maWxlcyIpOwp2YXIgb2JqZWN0QXR0cmlidXRlcyA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwp2YXIgbmV3Tmlja05hbWUgPSBvYmplY3RBdHRyaWJ1dGVzLmdldCgiY3VzdG9tX25pY2tuYW1lIik7Cgp2YXIgcHJvZmlsZXNBcnJheSA9IHByb2ZpbGVzLnRvQXJyYXkoKTsKCmZvciAodmFyIGk9MDsgaTxwcm9maWxlc0FycmF5Lmxlbmd0aDsgaSsrKQp7CiAgcHJvZmlsZXNBcnJheVtpXT1wcm9maWxlc0FycmF5W2ldLnJlcGxhY2UoIk5ldyBTZWN1cml0eSBLZXkiLG5ld05pY2tOYW1lKTsKfQppZFJlcG9zaXRvcnkuc2V0QXR0cmlidXRlKGlkLCJ3ZWJhdXRobkRldmljZVByb2ZpbGVzIixbXSk7CmZvciAodmFyIGk9MDsgaTxwcm9maWxlc0FycmF5Lmxlbmd0aDsgaSsrKQp7CiAgaWRSZXBvc2l0b3J5LmFkZEF0dHJpYnV0ZShpZCwid2ViYXV0aG5EZXZpY2VQcm9maWxlcyIscHJvZmlsZXNBcnJheVtpXSk7Cn0Kb3V0Y29tZSA9ICJzdWNjZXNzIjs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -6444,18 +12272,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "content-length", + "value": "1238" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:24 GMT" + "value": "Wed, 19 Jun 2024 21:28:29 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -6463,20 +12299,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:25.261Z", - "time": 60, + "startedDateTime": "2024-06-19T21:28:30.676Z", + "time": 57, "timings": { "blocked": -1, "connect": -1, @@ -6484,11 +12316,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 60 + "wait": 57 } }, { - "_id": "8fed64e04407bbd842030f4d52b6a67e", + "_id": "11fc76fd2f9a228b971725c8a994284b", "_order": 0, "cache": {}, "request": { @@ -6500,16 +12332,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -6519,28 +12351,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1640, + "headersSize": 1687, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Yahoo Profile Normalization\"" + "value": "name eq \"Custom Device Match Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Yahoo%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Custom%20Device%20Match%20Script%22" }, "response": { - "bodySize": 1546, + "bodySize": 542, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1546, - "text": "{\"result\":[{\"_id\":\"424da748-82cc-4b54-be6f-82bd64d82a74\",\"name\":\"Yahoo Profile Normalization\",\"description\":\"Normalizes raw profile data from Yahoo\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 542, + "text": "{\"result\":[{\"_id\":\"d58977ed-0542-4147-8197-973ef7300191\",\"name\":\"Custom Device Match Script\",\"description\":\"Custom Device Match Script\",\"script\":\"LyoKICogQ3VzdG9tIERldmljZSBNYXRjaCBTY3JpcHQKICovCgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -6590,20 +12426,24 @@ }, { "name": "content-length", - "value": "1546" + "value": "542" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:25 GMT" + "value": "Wed, 19 Jun 2024 21:28:29 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -6613,14 +12453,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:25.330Z", - "time": 65, + "startedDateTime": "2024-06-19T21:28:30.737Z", + "time": 55, "timings": { "blocked": -1, "connect": -1, @@ -6628,11 +12468,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 65 + "wait": 55 } }, { - "_id": "e4bae345254e0df9bfa0f0633bad19e0", + "_id": "edf9e88ab9f0d37cfef8cabce82b3b72", "_order": 0, "cache": {}, "request": { @@ -6644,16 +12484,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -6663,28 +12503,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1644, + "headersSize": 1686, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"VKontakte Profile Normalization\"" + "value": "name eq \"Itsme Profile Normalization\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22VKontakte%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Itsme%20Profile%20Normalization%22" }, "response": { - "bodySize": 1502, + "bodySize": 1530, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1502, - "text": "{\"result\":[{\"_id\":\"403cf226-6051-4368-8b72-9ba14f9a5140\",\"name\":\"VKontakte Profile Normalization\",\"description\":\"Normalizes raw profile data from VKontakte\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGhvdG9fNTApLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1530, + "text": "{\"result\":[{\"_id\":\"3d97c436-42c0-4dd0-a571-ea6f34f752b3\",\"name\":\"Itsme Profile Normalization\",\"description\":\"Normalizes raw profile data from Itsme\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKaW1wb3J0IG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUKCkpzb25WYWx1ZSBtYW5hZ2VkVXNlciA9IGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuc3ViKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmdpdmVuX25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5mYW1pbHlfbmFtZSksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQpyZXR1cm4gbWFuYWdlZFVzZXI=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -6734,20 +12578,24 @@ }, { "name": "content-length", - "value": "1502" + "value": "1530" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:25 GMT" + "value": "Wed, 19 Jun 2024 21:28:30 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -6757,14 +12605,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:25.407Z", - "time": 67, + "startedDateTime": "2024-06-19T21:28:30.796Z", + "time": 75, "timings": { "blocked": -1, "connect": -1, @@ -6772,11 +12620,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 67 + "wait": 75 } }, { - "_id": "edb15723eb51503d9ba902a83ea36e7c", + "_id": "329d94aa7b0eb4bf87dfbf6db589c1d9", "_order": 0, "cache": {}, "request": { @@ -6788,16 +12636,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -6807,28 +12655,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1642, + "headersSize": 1667, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Config Provider Node Script\"" + "value": "name eq \"resetPush.js\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Config%20Provider%20Node%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22resetPush.js%22" }, "response": { - "bodySize": 4602, + "bodySize": 578, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 4602, - "text": "{\"result\":[{\"_id\":\"5e854779-6ec1-4c39-aeba-0477e0986646\",\"name\":\"Config Provider Node Script\",\"description\":\"Script to provide values for a config provider node\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKioKICogVGhlIGZvbGxvd2luZyBzY3JpcHQgaXMgYSBzaW1wbGlmaWVkIHRlbXBsYXRlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0byBidWlsZAogKiB1cCBhIGNvbmZpZyBNYXAgb2JqZWN0IHdpdGggY3VzdG9tIHZhbHVlcy4gVGhlIENvbmZpZyBQcm92aWRlciBOb2RlIHdpbGwgdGhlbgogKiBwcm92aWRlIHRoaXMgY29uZmlnIE1hcCB0byB0aGUgZGVzaXJlZCBub2RlIHR5cGUuIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBNYXAKICogeW91IGJ1aWxkIGhlcmUgaXMgbmFtZWQgJ2NvbmZpZycuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKgogKiBub2RlU3RhdGUgLSBOb2RlIFN0YXRlICgxKQogKiAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoaXMgcmVwcmVzZW50cyB0aGUgY3VycmVudCB2YWx1ZXMgc3RvcmVkIGluIHRoZSBub2RlIHN0YXRlLgogKgogKiBpZFJlcG9zaXRvcnkgLSBQcm9maWxlIERhdGEgKDIpCiAqICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgYSByZXBvc2l0b3J5IHRvIHJldHJpZXZlIHVzZXIgaW5mb3JtYXRpb24uCiAqCiAqIHNlY3JldHMgLSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAoMykKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBTZWNyZXRzIEFQSSBmcm9tIGEgc2NyaXB0aW5nIGNvbnRleHQuCiAqCiAqIHJlcXVlc3RIZWFkZXJzICg0KSAtIE1hcCAoNSkKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIGZvciBhY2Nlc3NpbmcgaGVhZGVycyBpbiB0aGUgbG9naW4gcmVxdWVzdC4KICoKICogbG9nZ2VyIC0gRGVidWcgTG9nZ2luZyAoNikKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2UuCiAqCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoNykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cy4KICoKICogcmVhbG0gLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqCiAqIGV4aXN0aW5nU2Vzc2lvbiAtIE1hcDxTdHJpbmcsIFN0cmluZz4gKDUpCiAqICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LiBUaGUgcmV0dXJuZWQgbWFwIGZyb20KICogICAgICAgICAgU1NPVG9rZW4uZ2V0UHJvcGVydGllcygpICg4KQogKgogKiByZXF1ZXN0UGFyYW1ldGVycyAtIE1hcCAoNSkKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBwYXJhbWV0ZXJzLgogKgogKgogKiBPdXRwdXRzOgogKgogKiBjb25maWcgLSBNYXAgKDUpCiAqICAgICAgICAgICBEZWZpbmUgYW5kIGZpbGwgYSBNYXAgb2JqZWN0IG5hbWVkICdjb25maWcnIHdpdGggY3VzdG9tIHZhbHVlcywgdGhpcyB3aWxsIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlCiAqICAgICAgICAgICBhc3NvY2lhdGVkIG5vZGUgc2VsZWN0ZWQgaW4gdGhlIENvbmZpZ1Byb3ZpZGVyTm9kZS4KICoKICogUmVmZXJlbmNlOgogKiAoMSkgTm9kZSBTdGF0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9pZGNsb3VkLWFtL2xhdGVzdC9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtbm9kZVN0YXRlCiAqICgyKSBQcm9maWxlIERhdGEgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4xL2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1pZC1yZXBvCiAqICgzKSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjEvYXV0aGVudGljYXRpb24tZ3VpZGUvc2NyaXB0aW5nLWFwaS1ub2RlLmh0bWwjc2NyaXB0aW5nLWFwaS1hdXRobi1zZWNyZXRzCiAqICg0KSBSZXF1ZXN0IEhlYWRlcnMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtcmVxdWVzdEhlYWRlcnMuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL01hcC5odG1sCiAqICg2KSBEZWJ1ZyBMb2dnaW5nIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogKDcpIEhUVFAgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg4KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqLwoKY29uZmlnID0gewogICAgImtleTAiOiB7InN1YktleSI6ICJ2YWx1ZTAifSwKICAgICJrZXkxIjogInZhbHVlMSIKfTs=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"CONFIG_PROVIDER_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 578, + "text": "{\"result\":[{\"_id\":\"18940a0d-2997-49af-8cb9-9d8da38b4145\",\"name\":\"resetPush.js\",\"description\":\"null\",\"script\":\"aWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwppZFJlcG9zaXRvcnkuc2V0QXR0cmlidXRlKGlkLCAicHVzaERldmljZVByb2ZpbGVzIixbXSk7CgoKICAgIApvdXRjb21lID0gInRydWUiOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -6878,20 +12730,24 @@ }, { "name": "content-length", - "value": "4602" + "value": "578" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:25 GMT" + "value": "Wed, 19 Jun 2024 21:28:30 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -6901,14 +12757,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:25.481Z", - "time": 60, + "startedDateTime": "2024-06-19T21:28:30.875Z", + "time": 54, "timings": { "blocked": -1, "connect": -1, @@ -6916,11 +12772,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 60 + "wait": 54 } }, { - "_id": "65ed6dc43f368c735b1a0551b4cc17da", + "_id": "93c3ab20c379d63b813aeb250e58e7d5", "_order": 0, "cache": {}, "request": { @@ -6932,16 +12788,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -6951,28 +12807,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1639, + "headersSize": 1682, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Alpha OIDC Claims Script\"" + "value": "name eq \"OAuth2 May Act Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Alpha%20OIDC%20Claims%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20May%20Act%20Script%22" }, "response": { - "bodySize": 41562, + "bodySize": 3523, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 41562, - "text": "{\"result\":[{\"_id\":\"cf3515f0-8278-4ee3-a530-1bad7424c416\",\"name\":\"Alpha OIDC Claims Script\",\"description\":\"Default alpha realm script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 3523, + "text": "{\"result\":[{\"_id\":\"c735de08-f8f2-4e69-aa4a-2d8d3d438323\",\"name\":\"OAuth2 May Act Script\",\"description\":\"Default global script for OAuth2 May Act\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKiB0b2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gdG8gYmUgdXBkYXRlZC4gTXV0YWJsZSBvYmplY3QsIGFsbCBjaGFuZ2VzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gd2lsbCBiZSByZWZsZWN0ZWQuCiAqIGxvZ2dlciAtIGFsd2F5cyBwcmVzZW50LCBjb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIHNjcmlwdE5hbWUgLSBhbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0CiAqIHNlc3Npb24gLSBwcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdAogKiByZXF1ZXN0UHJvcGVydGllcyAtIGFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIHRoZSByZXF1ZXN0IFVSSQogKiAgICAgICAgICAgICAgICAgICAgIHJlYWxtIC0gdGhlIHJlYWxtIHRoYXQgdGhlIHJlcXVlc3QgcmVsYXRlcyB0bwogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBhIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLiBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IKICogICAgICAgICAgICAgICAgICAgICBtb3JlIHByb3BlcnRpZXMuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QKICogICAgICAgICAgICAgICAgICAgICBwcmFjdGljZXMuCiAqIGNsaWVudFByb3BlcnRpZXMgLSBwcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICBjbGllbnRJZCAtIHRoZSBjbGllbnQncyBVcmkgZm9yIHRoZSByZXF1ZXN0IGxvY2FsZQogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBsaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gbGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudAogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFNjb3BlcyAtIGxpc3Qgb2YgdGhlIGFsbG93ZWQgc2NvcGVzIGZvciB0aGUgY2xpZW50CiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzLCBlLmc6CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdE1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyB0ZXN0bWFwIC0+IEtleTEgLT4gVmFsdWUxCiAqCiAqIGlkZW50aXR5IC0gYWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIKICogc2NvcGVzIC0gYWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzCiAqLwovKgppbXBvcnQgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQoKdG9rZW4uc2V0TWF5QWN0KAogICAgSnNvblZhbHVlLmpzb24oSnNvblZhbHVlLm9iamVjdCgKICAgICAgICBKc29uVmFsdWUuZmllbGQoImNsaWVudF9pZCIsICJteUNsaWVudCIpLCAKICAgICAgICBKc29uVmFsdWUuZmllbGQoInN1YiIsICIodXNyIW15QWN0b3IpIikpKSkKKi8=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"OAUTH2_MAY_ACT\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -7020,18 +12880,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "content-length", + "value": "3523" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:25 GMT" + "value": "Wed, 19 Jun 2024 21:28:30 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -7039,20 +12907,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:25.551Z", - "time": 102, + "startedDateTime": "2024-06-19T21:28:30.933Z", + "time": 58, "timings": { "blocked": -1, "connect": -1, @@ -7060,11 +12924,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 102 + "wait": 58 } }, { - "_id": "92a7bd7f1355ae753e4e937db47d63cd", + "_id": "4bc9120f25a9243849c85a20a60e3c33", "_order": 0, "cache": {}, "request": { @@ -7076,16 +12940,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -7095,28 +12959,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1656, + "headersSize": 1728, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"OAuth2 Access Token Modification Script\"" + "value": "name eq \"ForgeRock Internal: OAuth2 Access Token Modification Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20Access%20Token%20Modification%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22ForgeRock%20Internal%3A%20OAuth2%20Access%20Token%20Modification%20Script%22" }, "response": { - "bodySize": 10093, + "bodySize": 921, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 10093, - "text": "{\"result\":[{\"_id\":\"d22f9a0c-426a-4466-b95e-d0f125b0d5fa\",\"name\":\"OAuth2 Access Token Modification Script\",\"description\":\"Default global script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 921, + "text": "{\"result\":[{\"_id\":\"c234ba0b-58a1-4cfd-9567-09edde980745\",\"name\":\"ForgeRock Internal: OAuth2 Access Token Modification Script\",\"description\":\"Internal token modification script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwovLyBTY3JpcHQgaXMgaW50ZW50aW9uYWxseSBlbXB0eQo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":1433147666269,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -7164,18 +13032,26 @@ "name": "content-type", "value": "application/json;charset=UTF-8" }, + { + "name": "content-length", + "value": "921" + }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:25 GMT" + "value": "Wed, 19 Jun 2024 21:28:30 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -7183,20 +13059,16 @@ { "name": "alt-svc", "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" } ], - "headersSize": 780, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:25.664Z", - "time": 62, + "startedDateTime": "2024-06-19T21:28:30.995Z", + "time": 55, "timings": { "blocked": -1, "connect": -1, @@ -7204,11 +13076,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 62 + "wait": 55 } }, { - "_id": "a9c49b439be01d2b64c7940e0475028a", + "_id": "4cd74350a95512b9cd53238ae32b78be", "_order": 0, "cache": {}, "request": { @@ -7220,16 +13092,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -7239,28 +13111,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1644, + "headersSize": 1687, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Microsoft Profile Normalization\"" + "value": "name eq \"Google Profile Normalization\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Microsoft%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Google%20Profile%20Normalization%22" }, "response": { - "bodySize": 1466, + "bodySize": 1548, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1466, - "text": "{\"result\":[{\"_id\":\"73cecbfc-dad0-4395-be6a-6858ee3a80e5\",\"name\":\"Microsoft Profile Normalization\",\"description\":\"Normalizes raw profile data from Microsoft\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlOYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbk5hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5zdXJuYW1lKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1548, + "text": "{\"result\":[{\"_id\":\"58d29080-4563-480b-89bb-1e7719776a21\",\"name\":\"Google Profile Normalization\",\"description\":\"Normalizes raw profile data from Google\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -7310,20 +13186,24 @@ }, { "name": "content-length", - "value": "1466" + "value": "1548" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:25 GMT" + "value": "Wed, 19 Jun 2024 21:28:30 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -7333,14 +13213,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:25.735Z", - "time": 66, + "startedDateTime": "2024-06-19T21:28:31.054Z", + "time": 58, "timings": { "blocked": -1, "connect": -1, @@ -7348,11 +13228,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 66 + "wait": 58 } }, { - "_id": "da171ffe43fa0414dde04a78281c0870", + "_id": "c1c393209e95869bcd07a4e023ad042d", "_order": 0, "cache": {}, "request": { @@ -7364,16 +13244,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -7383,28 +13263,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1641, + "headersSize": 1689, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"GitHub Profile Normalization\"" + "value": "name eq \"Inactive Device Match Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22GitHub%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Inactive%20Device%20Match%20Script%22" }, "response": { - "bodySize": 1232, + "bodySize": 546, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1232, - "text": "{\"result\":[{\"_id\":\"a7a78773-445b-4eca-bb93-409e86bced81\",\"name\":\"GitHub Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUubG9naW4pKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 546, + "text": "{\"result\":[{\"_id\":\"3bd13a46-61c4-4974-8efb-1700c80c64e3\",\"name\":\"Inactive Device Match Script\",\"description\":\"Inactive Device Match Script\",\"script\":\"LyoKICogSW5hY3RpdmUgRGV2aWNlIE1hdGNoIFNjcmlwdAogKi8KCm91dGNvbWUgPSAidHJ1ZSI7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -7454,20 +13338,24 @@ }, { "name": "content-length", - "value": "1232" + "value": "546" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:25 GMT" + "value": "Wed, 19 Jun 2024 21:28:30 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -7477,14 +13365,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:25.811Z", - "time": 65, + "startedDateTime": "2024-06-19T21:28:31.116Z", + "time": 52, "timings": { "blocked": -1, "connect": -1, @@ -7492,11 +13380,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 65 + "wait": 52 } }, { - "_id": "99d259eb57c25d01ede5cf21815c8741", + "_id": "91b80ebe4ad9d6d3babb4519ccfd3574", "_order": 0, "cache": {}, "request": { @@ -7508,16 +13396,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -7527,28 +13415,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1657, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Authentication Tree Decision Node Script\"" + "value": "name eq \"wks-RemoveButton\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Authentication%20Tree%20Decision%20Node%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22wks-RemoveButton%22" }, "response": { - "bodySize": 759, + "bodySize": 1686, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 759, - "text": "{\"result\":[{\"_id\":\"01e1a3c0-038b-4c16-956a-6c9d89328cff\",\"name\":\"Authentication Tree Decision Node Script\",\"description\":\"Default global script for a scripted decision node\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKb3V0Y29tZSA9ICJ0cnVlIjsK\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1686, + "text": "{\"result\":[{\"_id\":\"343b3cc5-38f4-4e37-9d92-8ba0830936da\",\"name\":\"wks-RemoveButton\",\"description\":\"RemoveButton\",\"script\":\"LyogUmVtb3ZlIEJ1dHRvbgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBIaWRlIGJ1dHRvbnMgb24gdGhlIGpvdXJuZXkgcGFnZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfSkiCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICB2YXIgbWVzc2FnZSA9ICIgIgogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIG1lc3NhZ2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -7598,20 +13490,24 @@ }, { "name": "content-length", - "value": "759" + "value": "1686" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:25 GMT" + "value": "Wed, 19 Jun 2024 21:28:30 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -7621,14 +13517,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 773, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:25.881Z", - "time": 58, + "startedDateTime": "2024-06-19T21:28:31.172Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -7636,11 +13532,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 58 + "wait": 53 } }, { - "_id": "6d3985b76be90a623421cf1f1dab241b", + "_id": "e6f3f3e413e0a2b0675cbfd8f8cb066e", "_order": 0, "cache": {}, "request": { @@ -7652,16 +13548,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -7671,28 +13567,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1650, + "headersSize": 1721, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"ADFS Profile Normalization (JS)\"" + "value": "name eq \"Device Profile Match Template - Decision Node Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22ADFS%20Profile%20Normalization%20%28JS%29%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Device%20Profile%20Match%20Template%20-%20Decision%20Node%20Script%22" }, "response": { - "bodySize": 7358, + "bodySize": 4597, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 7358, - "text": "{\"result\":[{\"_id\":\"dbe0bf9a-72aa-49d5-8483-9db147985a47\",\"name\":\"ADFS Profile Normalization (JS)\",\"description\":\"Normalizes raw profile data from ADFS\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIHRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIKICogaW4gYSBzdGFuZGFyZCBmb3JtIGV4cGVjdGVkIGJ5IHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogcmF3UHJvZmlsZSAtIFRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvdmlkZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIuCiAqICAgICAgICAgICAgICBKc29uVmFsdWUgKDEpLgogKiBsb2dnZXIgLSBUaGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiByZWFsbSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqIHJlcXVlc3RIZWFkZXJzIC0gVHJlZU1hcCAoMikuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFjY2Vzc2luZyBoZWFkZXJzIGluIHRoZSBsb2dpbiByZXF1ZXN0OgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1yZXF1ZXN0SGVhZGVycy4KICogcmVxdWVzdFBhcmFtZXRlcnMgLSBUcmVlTWFwICgyKS4KICogICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFyYW1ldGVycy4KICogc2VsZWN0ZWRJZHAgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgVGhlIHNvY2lhbCBpZGVudGl0eSBwcm92aWRlciBuYW1lLiBGb3IgZXhhbXBsZTogZ29vZ2xlLgogKiBzaGFyZWRTdGF0ZSAtIExpbmtlZEhhc2hNYXAgKDMpLgogKiAgICAgICAgICAgICAgIFRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgc3RhdGUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRyZWUgYW5kIGFsbG93cyBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gdGhlIHN0YXRlbGVzcyBub2RlczoKICogICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoLW5vZGVzL2NvcmUtYWN0aW9uLmh0bWwjYWNjZXNzaW5nLXRyZWUtc3RhdGUuCiAqIHRyYW5zaWVudFN0YXRlIC0gTGlua2VkSGFzaE1hcCAoMykuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCBmb3Igc3RvcmluZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdGhhdCBtdXN0IG5vdCBsZWF2ZSB0aGUgc2VydmVyIHVuZW5jcnlwdGVkLAogKiAgICAgICAgICAgICAgICAgIGFuZCB0aGF0IG1heSBub3QgbmVlZCB0byBwZXJzaXN0IGJldHdlZW4gYXV0aGVudGljYXRpb24gcmVxdWVzdHMgZHVyaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBzZXNzaW9uOgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGgtbm9kZXMvY29yZS1hY3Rpb24uaHRtbCNhY2Nlc3NpbmctdHJlZS1zdGF0ZS4KICoKICogUmV0dXJuIC0gYSBKc29uVmFsdWUgKDEpLgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqCiAqICAgICAgICAgIFRoaXMgc2NyaXB0J3MgbGFzdCBzdGF0ZW1lbnQgc2hvdWxkIHJlc3VsdCBpbiBhIEpzb25WYWx1ZSAoMSkgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAqICAgICAgICAgIHsKICogICAgICAgICAgICAgIHsiZGlzcGxheU5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZW1haWwiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZmFtaWx5TmFtZSI6ICJjb3JyZXNwb25kaW5nLXNvY2lhbC1pZGVudGl0eS1wcm92aWRlci12YWx1ZSJ9LAogKiAgICAgICAgICAgICAgeyJnaXZlbk5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiaWQiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsibG9jYWxlIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InBob3RvVXJsIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InVzZXJuYW1lIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0KICogICAgICAgICAgfQogKgogKiAgICAgICAgICBUaGUgY29uc3VtZXIgb2YgdGhpcyBkYXRhIGRlZmluZXMgd2hpY2gga2V5cyBhcmUgcmVxdWlyZWQgYW5kIHdoaWNoIGFyZSBvcHRpb25hbC4KICogICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlIGFuZCwKICogICAgICAgICAgdWx0aW1hdGVseSwgdGhlIG1hbmFnZWQgb2JqZWN0IGNyZWF0ZWQvdXBkYXRlZCB3aXRoIHRoaXMgZGF0YQogKiAgICAgICAgICB3aWxsIGV4cGVjdCBjZXJ0YWluIGtleXMgdG8gYmUgcG9wdWxhdGVkLgogKiAgICAgICAgICBJbiBzb21lIGNvbW1vbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB0aGUgZm9sbG93aW5nIGtleXMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vdCBlbXB0eToKICogICAgICAgICAgdXNlcm5hbWUsIGdpdmVuTmFtZSwgZmFtaWx5TmFtZSwgZW1haWwuCiAqCiAqICAgICAgICAgIEZyb20gUkZDNDUxNzogQSB2YWx1ZSBvZiB0aGUgRGlyZWN0b3J5IFN0cmluZyBzeW50YXggaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKICogICAgICAgICAgYXJiaXRyYXJ5IGNoYXJhY3RlcnMgZnJvbSB0aGUgVW5pdmVyc2FsIENoYXJhY3RlciBTZXQgKFVDUykuCiAqICAgICAgICAgIEEgemVyby1sZW5ndGggY2hhcmFjdGVyIHN0cmluZyBpcyBub3QgcGVybWl0dGVkLgogKgogKiAoMSkgSnNvblZhbHVlIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2pzb24vSnNvblZhbHVlLmh0bWwuCiAqICgyKSBUcmVlTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9UcmVlTWFwLmh0bWwuCiAqICgzKSBMaW5rZWRIYXNoTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqLwoKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQogICAgKTsKCiAgICB2YXIgbm9ybWFsaXplZFByb2ZpbGVEYXRhID0gZnJKYXZhLkpzb25WYWx1ZS5qc29uKGZySmF2YS5Kc29uVmFsdWUub2JqZWN0KCkpOwogIAogICAgICAvL2xvZ2dlci5tZXNzYWdlKCdTZWd1aW4gcmF3UHJvZmlsZTogJytyYXdQcm9maWxlKTsKCiAgICBub3JtYWxpemVkUHJvZmlsZURhdGEucHV0KCdpZCcsIHJhd1Byb2ZpbGUuZ2V0KCdzdWInKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2Rpc3BsYXlOYW1lJywgcmF3UHJvZmlsZS5nZXQoJ2dpdmVuTmFtZScpLmFzU3RyaW5nKCkgKyAnICcgKyByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2VtYWlsJywgcmF3UHJvZmlsZS5nZXQoJ21haWwnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2dpdmVuTmFtZScsIHJhd1Byb2ZpbGUuZ2V0KCdnaXZlbk5hbWUnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2ZhbWlseU5hbWUnLCByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ3VzZXJuYW1lJywgcmF3UHJvZmlsZS5nZXQoJ3VwbicpLmFzU3RyaW5nKCkpOwogICAgbm9ybWFsaXplZFByb2ZpbGVEYXRhLnB1dCgncm9sZXMnLCByYXdQcm9maWxlLmdldCgncm9sZXMnKS5hc1N0cmluZygpKTsKICAKICAgICAgLy9sb2dnZXIubWVzc2FnZSgnU2VndWluIG5vcm1hbGl6ZWRQcm9maWxlRGF0YTogJytub3JtYWxpemVkUHJvZmlsZURhdGEpOwoKICAgIHJldHVybiBub3JtYWxpemVkUHJvZmlsZURhdGE7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 4597, + "text": "{\"result\":[{\"_id\":\"13e3f263-9cd3-4844-8d1c-040fd0dd02eb\",\"name\":\"Device Profile Match Template - Decision Node Script\",\"description\":\"Default global script template for Device Profile Match decision node script for Authentication Tree\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGEgc2ltcGxpZmllZCB0ZW1wbGF0ZSBmb3IgdW5kZXJzdGFuZGluZwogKiB0aGUgYmFzaWNzIG9mIGRldmljZSBtYXRjaGluZy4gX1RoaXMgaXMgbm90IGZ1bmN0aW9uYWxseSBjb21wbGV0ZS5fCiAqIEZvciBhIGZ1bmN0aW9uYWxseSBjb21wbGV0ZSBzY3JpcHQgYXMgd2VsbCBhcyBhIGRldmVsb3BtZW50IHRvb2xraXQsCiAqIHZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9Gb3JnZVJvY2svZm9yZ2Vyb2NrLWRldmljZS1tYXRjaC1zY3JpcHQuCiAqCiAqIEdsb2JhbCBub2RlIHZhcmlhYmxlcyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGlzIHNjb3BlOgogKiAxLiBgc2hhcmVkU3RhdGVgIHByb3ZpZGVzIGFjY2VzcyB0byBpbmNvbWluZyByZXF1ZXN0CiAqIDIuIGBkZXZpY2VQcm9maWxlc0Rhb2AgcHJvdmlkZXMgYWNjZXNzIHRvIHN0b3JlZCBwcm9maWxlcwogKiAzLiBgb3V0Y29tZWAgdmFyaWFibGUgbWFwcyB0byBhdXRoIHRyZWUgbm9kZSBvdXRjb21lczsgdmFsdWVzIGFyZQogKiAgICAndHJ1ZScsICdmYWxzZScsIG9yICd1bmtub3duRGV2aWNlJyAobm90aWNlIF9hbGxfIGFyZSBzdHJpbmdzKS4KICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgcmVxdWVzdCdzIGRldmljZSBwcm9maWxlLgogKiBSZXR1cm5zIHNlcmlhbGl6ZWQgSlNPTiAodHlwZSBzdHJpbmcpOyBwYXJzaW5nIHRoaXMgd2lsbCByZXN1bHQgYQogKiBuYXRpdmUgSlMgb2JqZWN0LgogKi8KdmFyIGluY29taW5nSnNvbiA9IHNoYXJlZFN0YXRlLmdldCgnZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlJykudG9TdHJpbmcoKTsKdmFyIGluY29taW5nID0gSlNPTi5wYXJzZShpbmNvbWluZ0pzb24pOwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgdXNlcidzIHVzZXJuYW1lIGFuZCByZWFsbS4KICogTm90aWNlIHRoZSB1c2Ugb2YgYC5hc1N0cmluZygpYC4KICovCnZhciB1c2VybmFtZSA9IHNoYXJlZFN0YXRlLmdldCgidXNlcm5hbWUiKS5hc1N0cmluZygpOwp2YXIgcmVhbG0gPSBzaGFyZWRTdGF0ZS5nZXQoInJlYWxtIikuYXNTdHJpbmcoKTsKCi8qKgogKiBHZXQgdGhlIHVzZXIncyBzdG9yZWQgcHJvZmlsZXMgZm9yIGFwcHJvcHJpYXRlIHJlYWxtLgogKiBSZXR1cm5zIGEgX3NwZWNpYWxfIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIHByb2ZpbGUgZGF0YQogKi8KdmFyIHN0b3JlZFByb2ZpbGVzID0gZGV2aWNlUHJvZmlsZXNEYW8uZ2V0RGV2aWNlUHJvZmlsZXModXNlcm5hbWUsIHJlYWxtKTsKCi8vIERlZmF1bHQgdG8gYG91dGNvbWVgIG9mICd1bmtub3duRGV2aWNlJwpvdXRjb21lID0gJ3Vua25vd25EZXZpY2UnOwoKaWYgKHN0b3JlZFByb2ZpbGVzKSB7CiAgICB2YXIgaSA9IDA7CiAgICAvLyBOT1RFOiBgLnNpemUoKWAgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBzdG9yZWQgcHJvZmlsZXMKICAgIHZhciBsZW4gPSBzdG9yZWRQcm9maWxlcy5zaXplKCk7CgogICAgZm9yIChpOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIHN0b3JlZCBwcm9maWxlLgogICAgICAgICAqIFJldHVybnMgc2VyaWFsaXplZCBKU09OICh0eXBlIHN0cmluZyk7IHBhcnNpbmcgdGhpcyB3aWxsIHJlc3VsdAogICAgICAgICAqIGEgbmF0aXZlIEpTIG9iamVjdC4KICAgICAgICAgKi8KICAgICAgICB2YXIgc3RvcmVkSnNvbiA9IHN0b3JlZFByb2ZpbGVzLmdldChpKTsKICAgICAgICB2YXIgc3RvcmVkID0gSlNPTi5wYXJzZShzdG9yZWRKc29uKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogRmluZCBhIHN0b3JlZCBwcm9maWxlIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllci4KICAgICAgICAgKi8KICAgICAgICBpZiAoaW5jb21pbmcuaWRlbnRpZmllciA9PT0gc3RvcmVkLmlkZW50aWZpZXIpIHsKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBOb3cgdGhhdCB5b3UndmUgZm91bmQgdGhlIGFwcHJvcHJpYXRlIHByb2ZpbGUsIHlvdSB3aWxsIHBlcmZvcm0KICAgICAgICAgICAgICogdGhlIGxvZ2ljIGhlcmUgdG8gbWF0Y2ggdGhlIHZhbHVlcyBvZiB0aGUgYGluY29taW5nYCBwcm9maWxlCiAgICAgICAgICAgICAqIHdpdGggdGhhdCBvZiB0aGUgYHN0b3JlZGAgcHJvZmlsZS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogVGhlIHJlc3VsdCBvZiB0aGUgbWF0Y2hpbmcgbG9naWMgaXMgYXNzaWduZWQgdG8gYG91dGNvbWVgLiBTaW5jZQogICAgICAgICAgICAgKiB3ZSBoYXZlIHByb2ZpbGVzIG9mIHRoZSBzYW1lIGlkZW50aWZpZXIsIHRoZSB2YWx1ZSAodHlwZSBzdHJpbmcpCiAgICAgICAgICAgICAqIHNob3VsZCBub3cgYmUgZWl0aGVyICd0cnVlJyBvciAnZmFsc2UnIChwcm9wZXJ0aWVzIG1hdGNoZWQgb3Igbm90KS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0b3BpYywgdmlzaXQgdGhpcyBHaXRodWIgcmVwbzoKICAgICAgICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL0ZvcmdlUm9jay9mb3JnZXJvY2stZGV2aWNlLW1hdGNoLXNjcmlwdAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgb3V0Y29tZSA9ICdmYWxzZSc7CiAgICAgICAgfQogICAgfQp9\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -7742,20 +13642,24 @@ }, { "name": "content-length", - "value": "7358" + "value": "4597" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:25 GMT" + "value": "Wed, 19 Jun 2024 21:28:30 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -7765,14 +13669,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:25.943Z", - "time": 60, + "startedDateTime": "2024-06-19T21:28:31.230Z", + "time": 54, "timings": { "blocked": -1, "connect": -1, @@ -7780,11 +13684,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 60 + "wait": 54 } }, { - "_id": "b58afe5cd68f1b63d007dcf8166b3ab0", + "_id": "a1a476f7f90af798330625d10b5e75d8", "_order": 0, "cache": {}, "request": { @@ -7796,16 +13700,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -7815,28 +13719,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1639, + "headersSize": 1670, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"OAuth2 JWT Issuer Script\"" + "value": "name eq \"Remove Button\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22OAuth2%20JWT%20Issuer%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Remove%20Button%22" }, "response": { - "bodySize": 5308, + "bodySize": 1695, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 5308, - "text": "{\"result\":[{\"_id\":\"400e48ba-3f13-4144-ac7b-f824ea8e98c5\",\"name\":\"OAuth2 JWT Issuer Script\",\"description\":\"Default global script for scripted JWT Issuers\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgdG8gZGVyaXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIGR5bmFtaWMgSldUIGlzc3VlciBmcm9tIHRoZSBpc3N1ZXIgc3RyaW5nLgogKiBBIEpXVCBpc3N1ZXIgaXMgbWFkZSB1cCBvZiB0aGUgZm9sbG93aW5nOgogKiAgIC0gaXNzdWVyIC0gdGhlIGlkZW50aWZpZXIgb2YgdGhlIGVudGl0eSB0aGF0IGlzc3VlcyBKV1RzCiAqICAgLSByZXNvdXJjZSBvd25lciBzdWJqZWN0IGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCBpZGVudGlmaWVzIHRoZSByZXNvdXJjZSBvd25lcgogKiAgIC0gY29uc2VudGVkIHNjb3BlIGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCByZXByZXNlbnRzIHNjb3BlIHRoYXQgdGhlIHJlc291cmNlIG93bmVyCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYWxyZWFkeSBjb25zZW50ZWQgdG8gZXh0ZXJuYWxseQogKiAgIC0gYXV0aG9yaXplZCBzdWJqZWN0cyAtIHRoZSBzZXQgb2YgcHJpbmNpcGFsIGlkZW50aWZpZXJzIHRoYXQgYXJlIGF1dGhvcml6ZWQgdG8gYmUgdXNlZCBhcyByZXNvdXJjZSBvd25lcnMKICogICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgaXNzdWVyCiAqICAgLSBKV0tzIC0gZWl0aGVyIGEgc2V0IG9mIEpXS3Mgb3IgY29ubmVjdGlvbiBkZXRhaWxzIGZvciBvYnRhaW5pbmcgdGhhdCBzZXQsIHRoYXQgYXJlIHRoZSBwdWJsaWMga2V5cyB0aGF0CiAqICAgICAgICAgICAgY2FuIHZlcmlmeSB0aGUgc2lnbmF0dXJlIG9uIHRoZSBpc3N1ZWQgSldUcy4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIGlzc3VlciAtIFN0cmluZwogKiAgICAgICAgICBUaGUgaXNzdWVyIGZyb20gdGhlIGJlYXJlciBKV1QuCiAqIHJlYWxtIC0gU3RyaW5nCiAqICAgICAgICAgVGhlIHBhdGggb2YgdGhlIHJlYWxtIHRoYXQgaXMgaGFuZGxpbmcgdGhlIHJlcXVlc3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIHNjcmlwdCBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5PQVVUSDJfU0NSSVBURURfSldUX0lTU1VFUi4KICogaHR0cENsaWVudCAtIEhUVFAgQ2xpZW50ICgxKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgSFRUUCBDbGllbnQgaW5zdGFuY2U6CiAqICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC4KICogaWRSZXBvc2l0b3J5IC0gSWRlbnRpdHkgUmVwb3NpdG9yeSAoMikuIEFsd2F5cyBwcmVzZW50LgogKiBzZWNyZXRzIC0gU2VjcmV0cyBhY2Nlc3NvciAoMykuIEFsd2F5cyBwcmVzZW50LgogKgogKiBSZXR1cm4gLSBvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLlRydXN0ZWRKd3RJc3N1ZXJDb25maWcgKDQpIC0gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRydXN0ZWQgSldUIGlzc3Vlci4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgyKSBTY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuYW0vc2NyaXB0aW5nL2FwaS9pZGVudGl0eS9TY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeS5odG1sLgogKiAoMykgU2NyaXB0ZWRTZWNyZXRzIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5hbS9zY3JpcHRpbmcvYXBpL3NlY3JldHMvU2NyaXB0ZWRTZWNyZXRzLmh0bWwuCiAqICg0KSBUcnVzdGVkSnd0SXNzdWVyQ29uZmlnIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1RydXN0ZWRKd3RJc3N1ZXJDb25maWcuaHRtbC4KICovCgovKiBFWEFNUExFCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVHJ1c3RlZEp3dElzc3VlckNvbmZpZywKICAgICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbnMKICAgICk7CgogICAgdmFyIGlzcyA9IGlkUmVwb3NpdG9yeS5nZXRJZGVudGl0eShpc3N1ZXIpOwogICAgaWYgKGlzcyA9PSBudWxsKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoJ05vIGlzc3VlciBmb3VuZCBmb3I6ICcraXNzdWVyKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGxvZ2dlci5tZXNzYWdlKCdGb3VuZCBpc3N1ZXI6ICcraXNzKTsKICAgIC8vIGluIHRoaXMgZXhhbXBsZSBlaXRoZXIgYSBKV0sgc2V0IG9yIGEgVVJJIHRvIGEgSldLIHNldCBhcmUgaW4gdGhlIHBvc3RhbEFkZHJlc3MgYXR0cmlidXRlCiAgICB2YXIgandrc0F0dHJzID0gaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygncG9zdGFsQWRkcmVzcycpOwogICAgdmFyIGp3a1NldCA9IGp3a3NBdHRycy5sZW5ndGggPT09IDAgPyBudWxsIDogandrc0F0dHJzWzBdOwogICAgdmFyIGNvbmZpZyA9IG5ldyBmckphdmEuVHJ1c3RlZEp3dElzc3VlckNvbmZpZygKICAgICAgICBpc3N1ZXIsCiAgICAgICAgJ3N1YicsCiAgICAgICAgJ3Njb3BlJywKICAgICAgICAvLyBpbiB0aGlzIGV4YW1wbGUsIHZhbGlkIHN1YmplY3RzIGFyZSBzdG9yZWQgaW4gdGhlIG1haWwgYXR0cmlidXRlCiAgICAgICAgaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygnbWFpbCcpLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCd7JykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCdodHRwJykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgICc1IG1pbnV0ZXMnLAogICAgICAgICcxIG1pbnV0ZScKICAgICk7CiAgICByZXR1cm4gY29uZmlnOwp9KCkpOwoqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_SCRIPTED_JWT_ISSUER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1695, + "text": "{\"result\":[{\"_id\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"name\":\"Remove Button\",\"description\":\"Remove button from page.\",\"script\":\"LyogUmVtb3ZlIEJ1dHRvbgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBIaWRlIGJ1dHRvbnMgb24gdGhlIGpvdXJuZXkgcGFnZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfSkiCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICB2YXIgbWVzc2FnZSA9ICIgIgogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIG1lc3NhZ2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -7886,20 +13794,24 @@ }, { "name": "content-length", - "value": "5308" + "value": "1695" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:25 GMT" + "value": "Wed, 19 Jun 2024 21:28:30 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -7909,14 +13821,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:26.013Z", - "time": 65, + "startedDateTime": "2024-06-19T21:28:31.288Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -7924,11 +13836,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 65 + "wait": 51 } }, { - "_id": "6b041cdd91b1a940e2f050d4a2c575a6", + "_id": "b053354d3e96e3e2828f1986afdf05c8", "_order": 0, "cache": {}, "request": { @@ -7940,16 +13852,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -7959,28 +13871,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1622, + "headersSize": 1687, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Test-Script-1\"" + "value": "name eq \"WeChat Profile Normalization\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Test-Script-1%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22WeChat%20Profile%20Normalization%22" }, "response": { - "bodySize": 854, + "bodySize": 1312, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 854, - "text": "{\"result\":[{\"_id\":\"59f84396-71e4-4c1d-a6ae-c4fc624d9752\",\"name\":\"Test-Script-1\",\"description\":\"A test script that uses an environment variable and a secret variable\",\"script\":\"Ly8gQ2FsY3VsYXRlIEU9bWNeMiB1c2luZyBtID0gNDIKY29uc3QgYzIgPSBzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi50ZXN0LnZhcmlhYmxlLmxpZ2h0Iik7CmNvbnNvbGUubG9nKGBFID0gJHs0MiAqIGMyICogYzJ9YCk7Ci8vIENhbGN1bGF0ZSB0aGUgYXJlYSBvZiBhIGNpcmNsZSB3aXRoIHJhZGl1cyByID0gNDIKY29uc3QgcGkgPSBwYXJzZUZsb2F0KHN5c3RlbUVudi5nZXRQcm9wZXJ0eSgiZXN2LnRlc3Quc2VjcmV0LnBpIikpOwpjb25zb2xlLmxvZyhgQSA9ICR7cGkgKiA0MiAqIDQyfWApOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1312, + "text": "{\"result\":[{\"_id\":\"472534ec-a25f-468d-a606-3fb1935190df\",\"name\":\"WeChat Profile Normalization\",\"description\":\"Normalizes raw profile data from WeChat\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLm9wZW5pZCksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uaWNrbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5oZWFkaW1ndXJsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLm5pY2tuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -8030,20 +13946,24 @@ }, { "name": "content-length", - "value": "854" + "value": "1312" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:25 GMT" + "value": "Wed, 19 Jun 2024 21:28:30 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -8053,14 +13973,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 773, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:26.093Z", - "time": 62, + "startedDateTime": "2024-06-19T21:28:31.344Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -8068,11 +13988,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 62 + "wait": 53 } }, { - "_id": "e3c2d193ee5e301889ca03246f232640", + "_id": "d03f9e8a49c3663717f6f44885052a82", "_order": 0, "cache": {}, "request": { @@ -8084,16 +14004,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -8103,28 +14023,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1639, + "headersSize": 1685, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"SAML2 IDP Adapter Script\"" + "value": "name eq \"Okta Profile Normalization\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22SAML2%20IDP%20Adapter%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Okta%20Profile%20Normalization%22" }, "response": { - "bodySize": 7044, + "bodySize": 1579, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 7044, - "text": "{\"result\":[{\"_id\":\"248b8a56-df81-4b1b-b4ba-45d994f6504c\",\"name\":\"SAML2 IDP Adapter Script\",\"description\":\"Default global script for SAML2 IDP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9TQU1MMklkZW50aXR5UHJvdmlkZXJBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBJZHBBZGFwdGVyU2NyaXB0SGVscGVyICgxKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgSWRwQWRhcHRlclNjcmlwdEhlbHBlciBjb250YWluaW5nIGhlbHBlciBtZXRob2RzLiBTZWUgSmF2YWRvYyBmb3IgbW9yZSBkZXRhaWxzLgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgyKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDMpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDQpCiAqICAgICBUaGUgb3JpZ2luYWwgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IGZyb20gU1AKICogcmVxSWQgLSBTdHJpbmcKICogICAgIFRoZSBpZCB0byB1c2UgZm9yIGNvbnRpbnVhdGlvbiBvZiBwcm9jZXNzaW5nIGlmIHRoZSBhZGFwdGVyIHJlZGlyZWN0cwogKiByZXMgLSBSZXNwb25zZSAoNSkKICogICAgIFRoZSBTQU1MIFJlc3BvbnNlCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNikKICogICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLiBUaGUgcmVmZXJlbmNlIHR5cGUgb2YgdGhpcyBpcyBPYmplY3QgYW5kIHdvdWxkIG5lZWQgdG8gYmUgY2FzdGVkIHRvIFNTT1Rva2VuLgogKiByZWxheVN0YXRlIC0gU3RyaW5nCiAqICAgICBUaGUgcmVsYXlTdGF0ZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgcmVkaXJlY3QKICogZmF1bHRDb2RlIC0gU3RyaW5nCiAqICAgICB0aGUgZmF1bHQgY29kZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogZmF1bHREZXRhaWwgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBkZXRhaWwgdGhhdCB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBTQU1MIHJlc3BvbnNlCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwuCiAqICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuPHNjcmlwdCBuYW1lPgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb24gKDcpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL0F1dGhuUmVxdWVzdC5odG1sLgogKiAoNSkgUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvUmVzcG9uc2UuaHRtbC4KICogKDYpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBJRFAgQWRhcHRlciBzY3JpcHRlZCBwbHVnaW4uCiAqLwoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2luZ2xlU2lnbk9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlU2lnbk9uICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlQXV0aGVudGljYXRpb246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVBdXRoZW50aWNhdGlvbiAoKSB7CiAgICByZXR1cm4gZmFsc2U7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNlbmRSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgcmVxSWQKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIGJyb3dzZXIgcmVkaXJlY3Rpb24gaGFwcGVuZWQgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2VuZFJlc3BvbnNlICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2lnblJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIHJlcwogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTaWduUmVzcG9uc2UgKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgZmF1bHRDb2RlCiAqICAgICBmYXVsdERldGFpbAogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlICgpIHsKfQ==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1579, + "text": "{\"result\":[{\"_id\":\"6325cf19-a49b-471e-8d26-7e4df76df0e2\",\"name\":\"Okta Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJPa3RhIHJhd1Byb2ZpbGU6ICIrcmF3UHJvZmlsZSkKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5wcmVmZXJyZWRfdXNlcm5hbWUpKSk=\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -8174,20 +14098,24 @@ }, { "name": "content-length", - "value": "7044" + "value": "1579" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:25 GMT" + "value": "Wed, 19 Jun 2024 21:28:30 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -8197,14 +14125,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:26.164Z", - "time": 84, + "startedDateTime": "2024-06-19T21:28:31.402Z", + "time": 51, "timings": { "blocked": -1, "connect": -1, @@ -8212,11 +14140,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 84 + "wait": 51 } }, { - "_id": "91ace92f5115d94b26cb380ff635ab0f", + "_id": "945e3364d6ed180bc93576ef2f0f323d", "_order": 0, "cache": {}, "request": { @@ -8228,16 +14156,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -8247,28 +14175,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1682, + "headersSize": 1677, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Alpha endUserUIClient OAuth2 Access Token Modification Script\"" + "value": "name eq \"Set Email Verified\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Alpha%20endUserUIClient%20OAuth2%20Access%20Token%20Modification%20Script%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Set%20Email%20Verified%22" }, "response": { - "bodySize": 1061, + "bodySize": 756, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1061, - "text": "{\"result\":[{\"_id\":\"e232cff3-2460-47cd-80b2-36c86c0d0f06\",\"name\":\"Alpha endUserUIClient OAuth2 Access Token Modification Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBpZiAoc2NvcGVzLmNvbnRhaW5zKCdmcjphdXRvYWNjZXNzOionKSB8fCBzY29wZXMuY29udGFpbnMoJ2ZyOmlnYToqJykgfHwgc2NvcGVzLmNvbnRhaW5zKCdmcjppZGM6YW5hbHl0aWNzOionKSkgewogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBjb20uc3VuLmlkZW50aXR5LmlkbS5JZFR5cGUKICAgICk7CiAgICB2YXIgZ3JvdXBzID0gW107CiAgICBpZGVudGl0eS5nZXRNZW1iZXJzaGlwcyhmci5JZFR5cGUuR1JPVVApLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkgewogICAgICBncm91cHMucHVzaChncm91cC5nZXRBdHRyaWJ1dGUoJ2NuJykudG9BcnJheSgpWzBdKTsKICAgIH0pOwogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ2dyb3VwcycsIGdyb3Vwcyk7CiAgfQp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 756, + "text": "{\"result\":[{\"_id\":\"7b88752e-5529-459c-a970-1fb78ff0d87f\",\"name\":\"Set Email Verified\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkKKTsKd2l0aCAoZnIpIHsKICAKICB2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCiAgdmFyIGF0dHJpYnV0ZSA9ICJmci1hdHRyLXN0cjEiCiAKICBpZFJlcG9zaXRvcnkuc2V0QXR0cmlidXRlKHVzZXJuYW1lLCBhdHRyaWJ1dGUsIFsidmVyaWZpZWQiXSk7CiAgCiAgb3V0Y29tZSA9ICJ0cnVlIgp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -8318,20 +14250,24 @@ }, { "name": "content-length", - "value": "1061" + "value": "756" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:25 GMT" + "value": "Wed, 19 Jun 2024 21:28:30 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -8341,14 +14277,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 793, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:26.257Z", - "time": 68, + "startedDateTime": "2024-06-19T21:28:31.458Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -8356,11 +14292,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 68 + "wait": 53 } }, { - "_id": "0ef369f427baa872ca4ee159a6fe7dc7", + "_id": "107a4931480ecae131b0dd4dbfc827bd", "_order": 0, "cache": {}, "request": { @@ -8372,16 +14308,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -8391,28 +14327,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1631, + "headersSize": 1703, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"UOP Enrich Session\"" + "value": "name eq \"ForgeRock Internal: OIDC Claims Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22UOP%20Enrich%20Session%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22ForgeRock%20Internal%3A%20OIDC%20Claims%20Script%22" }, "response": { - "bodySize": 1914, + "bodySize": 41560, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1914, - "text": "{\"result\":[{\"_id\":\"743351b3-001a-4ec8-b3ac-a674ddb8de22\",\"name\":\"UOP Enrich Session\",\"description\":\"Enrich user session with UOP class ID.\",\"script\":\"LyogVU9QIEVucmljaCBTZXNzaW9uCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIEFkZCBjdXJyZW50IGNsYXNzIElEIHRvIHVzZXIgc2Vzc2lvbi4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuIAogKiBJdCByZXF1aXJlcyB0aGUgSWRlbnRpZnkgRXhpc3RpbmcgVXNlciBub2RlIGJlZm9yZSBpdCBpcyBiZWluZyBjYWxsZWQuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAtIGZhbHNlCiAqLwpsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBzdGFydCIpOwpvdXRjb21lID0gImZhbHNlIjsKCmlmIChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBnb2luZyB0byBlbnJpY2ggc2Vzc2lvbiB3aXRoIGNsYXNzIGlkOiAiLmNvbmNhdChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpKTsKICAKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaQogICAgKTsKCiAgICB3aXRoIChmcikgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJVT1AgRW5yaWNoIFNlc3Npb246IEVuZCAob3V0Y29tZT0iLmNvbmNhdChvdXRjb21lKS5jb25jYXQoIikiKSk7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8ob3V0Y29tZSkucHV0U2Vzc2lvblByb3BlcnR5KCJVT1BDbGFzc0lEIiwgc2hhcmVkU3RhdGUuZ2V0KCJ1b3BDdXJyZW50Q2xhc3NJRCIpKS5idWlsZCgpOwogICAgfQogIAp9IGVsc2UgewogICAgbG9nZ2VyLmVycm9yKCJVT1AgRW5yaWNoIFNlc3Npb246IG5vIGNsYXNzZXMhIik7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBFbmQgKG91dGNvbWU9Ii5jb25jYXQob3V0Y29tZSkuY29uY2F0KCIpIikpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 41560, + "text": "{\"result\":[{\"_id\":\"1f389a3d-21cf-417c-a6d3-42ea620071f0\",\"name\":\"ForgeRock Internal: OIDC Claims Script\",\"description\":\"Internal OIDC Claims script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -8461,21 +14401,25 @@ "value": "application/json;charset=UTF-8" }, { - "name": "content-length", - "value": "1914" + "name": "transfer-encoding", + "value": "chunked" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:26 GMT" + "value": "Wed, 19 Jun 2024 21:28:30 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -8485,14 +14429,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 800, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:26.338Z", - "time": 66, + "startedDateTime": "2024-06-19T21:28:31.516Z", + "time": 53, "timings": { "blocked": -1, "connect": -1, @@ -8500,11 +14444,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 66 + "wait": 53 } }, { - "_id": "63054e0911bafed4c6e0d118e2b5d118", + "_id": "614bf5c8a1d05f1935f666cfb91d1043", "_order": 0, "cache": {}, "request": { @@ -8516,16 +14460,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -8535,28 +14479,32 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1640, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ { "name": "_queryFilter", - "value": "name eq \"Apple Profile Normalization\"" + "value": "name eq \"Library Script\"" } ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Apple%20Profile%20Normalization%22" + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22Library%20Script%22" }, "response": { - "bodySize": 2942, + "bodySize": 1862, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 2942, - "text": "{\"result\":[{\"_id\":\"484e6246-dbc6-4288-97e6-54e55431402e\",\"name\":\"Apple Profile Normalization\",\"description\":\"Normalizes raw profile data from Apple\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICoKICogSW4gc29tZSBjb21tb24gZGVmYXVsdCBjb25maWd1cmF0aW9ucywgdGhlIGZvbGxvd2luZyBrZXlzIGFyZSByZXF1aXJlZCB0byBiZSBub3QgZW1wdHk6CiAqIHVzZXJuYW1lLCBnaXZlbk5hbWUsIGZhbWlseU5hbWUsIGVtYWlsLgogKgogKiBGcm9tIFJGQzQ1MTc6IEEgdmFsdWUgb2YgdGhlIERpcmVjdG9yeSBTdHJpbmcgc3ludGF4IGlzIGEgc3RyaW5nIG9mIG9uZSBvciBtb3JlCiAqIGFyYml0cmFyeSBjaGFyYWN0ZXJzIGZyb20gdGhlIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0IChVQ1MpLgogKiBBIHplcm8tbGVuZ3RoIGNoYXJhY3RlciBzdHJpbmcgaXMgbm90IHBlcm1pdHRlZC4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKU3RyaW5nIGVtYWlsID0gImNoYW5nZUBtZS5jb20iClN0cmluZyBzdWJqZWN0SWQgPSByYXdQcm9maWxlLnN1YgpTdHJpbmcgZmlyc3ROYW1lID0gIiAiClN0cmluZyBsYXN0TmFtZSA9ICIgIgpTdHJpbmcgdXNlcm5hbWUgPSBzdWJqZWN0SWQKU3RyaW5nIG5hbWUKCmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgiZW1haWwiKSAmJiByYXdQcm9maWxlLmVtYWlsLmlzTm90TnVsbCgpKXsgLy8gVXNlciBjYW4gZWxlY3QgdG8gbm90IHNoYXJlIHRoZWlyIGVtYWlsCiAgICBlbWFpbCA9IHJhd1Byb2ZpbGUuZW1haWwuYXNTdHJpbmcoKQogICAgdXNlcm5hbWUgPSBlbWFpbAp9CmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgibmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5pc05vdE51bGwoKSkgewogICAgaWYgKHJhd1Byb2ZpbGUubmFtZS5pc0RlZmluZWQoImZpcnN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5maXJzdE5hbWUuaXNOb3ROdWxsKCkpIHsKICAgICAgICBmaXJzdE5hbWUgPSByYXdQcm9maWxlLm5hbWUuZmlyc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KICAgIGlmIChyYXdQcm9maWxlLm5hbWUuaXNEZWZpbmVkKCJsYXN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5sYXN0TmFtZS5pc05vdE51bGwoKSkgewogICAgICAgIGxhc3ROYW1lID0gcmF3UHJvZmlsZS5uYW1lLmxhc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KfQoKbmFtZSA9IChmaXJzdE5hbWU/LnRyaW0oKSA/IGZpcnN0TmFtZSA6ICIiKSArIChsYXN0TmFtZT8udHJpbSgpID8gKChmaXJzdE5hbWU/LnRyaW0oKSA/ICIgIiA6ICIiKSArIGxhc3ROYW1lKSA6ICIiKQpuYW1lID0gICghbmFtZT8udHJpbSgpKSA/ICIgIiA6IG5hbWUKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCBzdWJqZWN0SWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIG5hbWUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIGVtYWlsKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgZmlyc3ROYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIGxhc3ROYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCB1c2VybmFtZSkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1862, + "text": "{\"result\":[{\"_id\":\"6c49bebe-3a62-11ed-a261-0242ac120002\",\"name\":\"Library Script\",\"description\":\"Default global library script to be referenced from other scripts\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjItMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIGlzIGFuIGV4YW1wbGUgbGlicmFyeSBzY3JpcHQgd2l0aCBtZXRob2RzIHRoYXQgY2FuIGJlIHVzZWQgaW4gb3RoZXIgc2NyaXB0cy4KICogVG8gcmVmZXJlbmNlIGl0LCB1c2UgdGhlIGZvbGxvd2luZzoKICoKICogdmFyIGxpYnJhcnkgPSByZXF1aXJlKCJMaWJyYXJ5IFNjcmlwdCIpOwogKgogKiBsaWJyYXJ5LmxvZ0Vycm9yKGxvZ2dlciwgIkVycm9yIG1lc3NhZ2UiKTsKICogbGlicmFyeS5sb2dEZWJ1Zyhsb2dnZXIsICJEZWJ1ZyBtZXNzYWdlIik7CiAqLwoKZnVuY3Rpb24gbG9nRXJyb3IobG9nLCBlcnJvck1lc3NhZ2UpIHsKICBsb2cuZXJyb3IoZXJyb3JNZXNzYWdlKTsKfQoKZnVuY3Rpb24gbG9nV2FybmluZyhsb2csIHdhcm5pbmdNZXNzYWdlKSB7CiAgbG9nLndhcm4od2FybmluZ01lc3NhZ2UpOwp9CgpleHBvcnRzLmxvZ0Vycm9yID0gbG9nRXJyb3I7CmV4cG9ydHMubG9nV2FybmluZyA9IGxvZ1dhcm5pbmc7CgovLyBBbHRlcm5hdGl2ZWx5LCBleHBvcnRzIGNhbiBiZSBkZWNsYXJlZCB1c2luZyBhbiBpbmxpbmUgYXJyb3cgZnVuY3Rpb24KCmV4cG9ydHMubG9nSW5mbyA9IChsb2csIGluZm9NZXNzYWdlKSA9PiBsb2cuaW5mbyhpbmZvTWVzc2FnZSk7CmV4cG9ydHMubG9nRGVidWcgPSAobG9nLCBkZWJ1Z01lc3NhZ2UpID0+IGxvZy5kZWJ1ZyhkZWJ1Z01lc3NhZ2UpOw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org\",\"creationDate\":1433147666269,\"lastModifiedBy\":\"id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org\",\"lastModifiedDate\":1433147666269,\"evaluatorVersion\":\"2.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -8606,20 +14554,24 @@ }, { "name": "content-length", - "value": "2942" + "value": "1862" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:26 GMT" + "value": "Wed, 19 Jun 2024 21:28:30 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -8629,14 +14581,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:26.410Z", - "time": 67, + "startedDateTime": "2024-06-19T21:28:31.574Z", + "time": 56, "timings": { "blocked": -1, "connect": -1, @@ -8644,7 +14596,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 67 + "wait": 56 } } ], diff --git a/src/test/mock-recordings/ScriptOps_3024995978/importScripts_707210791/1-Import-all-scripts_764501976/recording.har b/src/test/mock-recordings/ScriptOps_3024995978/importScripts_707210791/1-Import-all-scripts_764501976/recording.har index de0624881..6a37a87fb 100644 --- a/src/test/mock-recordings/ScriptOps_3024995978/importScripts_707210791/1-Import-all-scripts_764501976/recording.har +++ b/src/test/mock-recordings/ScriptOps_3024995978/importScripts_707210791/1-Import-all-scripts_764501976/recording.har @@ -25,11 +25,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -41,14 +41,18 @@ }, { "name": "content-length", - "value": 969 + "value": "969" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1635, + "headersSize": 1681, "httpVersion": "HTTP/1.1", "method": "PUT", "postData": { @@ -60,11 +64,11 @@ "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts/5b3e4dd2-8060-4029-9ec1-6867932ab939" }, "response": { - "bodySize": 1149, + "bodySize": 1150, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1149, - "text": "{\"_id\":\"5b3e4dd2-8060-4029-9ec1-6867932ab939\",\"_rev\":\"149912081\",\"name\":\"FrodoTestScript5\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"id=76618ff6-e851-433e-9704-9d2852a17b7a,ou=user,ou=am-config\",\"creationDate\":1704383306598,\"lastModifiedBy\":\"id=76618ff6-e851-433e-9704-9d2852a17b7a,ou=user,ou=am-config\",\"lastModifiedDate\":1704383306598,\"evaluatorVersion\":\"1.0\"}" + "size": 1150, + "text": "{\"_id\":\"5b3e4dd2-8060-4029-9ec1-6867932ab939\",\"_rev\":\"-292279100\",\"name\":\"FrodoTestScript5\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"id=ba58ff99-76d3-4c69-9c4a-7f150ac70e2c,ou=user,ou=am-config\",\"creationDate\":1718832511751,\"lastModifiedBy\":\"id=ba58ff99-76d3-4c69-9c4a-7f150ac70e2c,ou=user,ou=am-config\",\"lastModifiedDate\":1718832511751,\"evaluatorVersion\":\"1.0\"}" }, "cookies": [], "headers": [ @@ -102,7 +106,7 @@ }, { "name": "etag", - "value": "\"149912081\"" + "value": "\"-292279100\"" }, { "name": "expires", @@ -122,20 +126,24 @@ }, { "name": "content-length", - "value": "1149" + "value": "1150" }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:26 GMT" + "value": "Wed, 19 Jun 2024 21:28:31 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -145,14 +153,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 896, + "headersSize": 917, "httpVersion": "HTTP/1.1", "redirectURL": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts/5b3e4dd2-8060-4029-9ec1-6867932ab939", "status": 201, "statusText": "Created" }, - "startedDateTime": "2024-01-04T15:48:26.559Z", - "time": 162, + "startedDateTime": "2024-06-19T21:28:31.694Z", + "time": 176, "timings": { "blocked": -1, "connect": -1, @@ -160,7 +168,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 162 + "wait": 176 } } ], diff --git a/src/test/mock-recordings/ScriptOps_3024995978/importScripts_707210791/2-Import-script-by-name_4052896697/recording.har b/src/test/mock-recordings/ScriptOps_3024995978/importScripts_707210791/2-Import-script-by-name_4052896697/recording.har index c43ba2301..475301a82 100644 --- a/src/test/mock-recordings/ScriptOps_3024995978/importScripts_707210791/2-Import-script-by-name_4052896697/recording.har +++ b/src/test/mock-recordings/ScriptOps_3024995978/importScripts_707210791/2-Import-script-by-name_4052896697/recording.har @@ -25,11 +25,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-58" + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -41,14 +41,18 @@ }, { "name": "content-length", - "value": 969 + "value": "969" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1635, + "headersSize": 1681, "httpVersion": "HTTP/1.1", "method": "PUT", "postData": { @@ -64,7 +68,7 @@ "content": { "mimeType": "application/json;charset=UTF-8", "size": 1062, - "text": "{\"_id\":\"5b3e4dd2-8060-4029-9ec1-6867932ab939\",\"name\":\"FrodoTestScript5\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"id=76618ff6-e851-433e-9704-9d2852a17b7a,ou=user,ou=am-config\",\"lastModifiedDate\":1704383306800,\"evaluatorVersion\":\"1.0\"}" + "text": "{\"_id\":\"5b3e4dd2-8060-4029-9ec1-6867932ab939\",\"name\":\"FrodoTestScript5\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"id=ba58ff99-76d3-4c69-9c4a-7f150ac70e2c,ou=user,ou=am-config\",\"lastModifiedDate\":1718832511977,\"evaluatorVersion\":\"1.0\"}" }, "cookies": [], "headers": [ @@ -118,16 +122,20 @@ }, { "name": "date", - "value": "Thu, 04 Jan 2024 15:48:26 GMT" + "value": "Wed, 19 Jun 2024 21:28:31 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-c40d8a05-8af7-41c7-8fb7-8563cb3daacd" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -137,14 +145,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 747, + "headersSize": 767, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-01-04T15:48:26.743Z", - "time": 83, + "startedDateTime": "2024-06-19T21:28:31.881Z", + "time": 145, "timings": { "blocked": -1, "connect": -1, @@ -152,7 +160,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 83 + "wait": 145 } } ], diff --git a/src/test/mock-recordings/ScriptOps_3024995978/readScriptByName_2330529531/1-Read-script-by-name-FrodoTestScript1_1144542807/recording.har b/src/test/mock-recordings/ScriptOps_3024995978/readScriptByName_2330529531/1-Read-script-by-name-FrodoTestScript1_1144542807/recording.har index c18d8538d..c296aa255 100644 --- a/src/test/mock-recordings/ScriptOps_3024995978/readScriptByName_2330529531/1-Read-script-by-name-FrodoTestScript1_1144542807/recording.har +++ b/src/test/mock-recordings/ScriptOps_3024995978/readScriptByName_2330529531/1-Read-script-by-name-FrodoTestScript1_1144542807/recording.har @@ -20,16 +20,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-32" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-a3f32770-5881-4c4f-82d9-180a286b5f60" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -39,12 +39,16 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1625, + "headersSize": 1671, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ @@ -56,11 +60,11 @@ "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=name%20eq%20%22FrodoTestScript1%22" }, "response": { - "bodySize": 1106, + "bodySize": 1131, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1106, - "text": "{\"result\":[{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 1131, + "text": "{\"result\":[{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -110,20 +114,24 @@ }, { "name": "content-length", - "value": "1106" + "value": "1131" }, { "name": "date", - "value": "Sat, 30 Sep 2023 16:45:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:21 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-a3f32770-5881-4c4f-82d9-180a286b5f60" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -133,14 +141,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 774, + "headersSize": 794, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2023-09-30T16:45:21.589Z", - "time": 57, + "startedDateTime": "2024-06-19T21:28:22.223Z", + "time": 60, "timings": { "blocked": -1, "connect": -1, @@ -148,7 +156,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 57 + "wait": 60 } } ], diff --git a/src/test/mock-recordings/ScriptOps_3024995978/readScript_892381245/1-Read-script-by-id-c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d_815506610/recording.har b/src/test/mock-recordings/ScriptOps_3024995978/readScript_892381245/1-Read-script-by-id-c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d_815506610/recording.har index 863ea700e..938cb8786 100644 --- a/src/test/mock-recordings/ScriptOps_3024995978/readScript_892381245/1-Read-script-by-id-c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d_815506610/recording.har +++ b/src/test/mock-recordings/ScriptOps_3024995978/readScript_892381245/1-Read-script-by-id-c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d_815506610/recording.har @@ -20,16 +20,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-32" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-a3f32770-5881-4c4f-82d9-180a286b5f60" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -39,23 +39,27 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1614, + "headersSize": 1660, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [], "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts/c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d" }, "response": { - "bodySize": 969, + "bodySize": 994, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 969, - "text": "{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0}" + "size": 994, + "text": "{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}" }, "cookies": [], "headers": [ @@ -105,20 +109,24 @@ }, { "name": "content-length", - "value": "969" + "value": "994" }, { "name": "date", - "value": "Sat, 30 Sep 2023 16:45:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:21 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-a3f32770-5881-4c4f-82d9-180a286b5f60" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -128,14 +136,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 746, + "headersSize": 766, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2023-09-30T16:45:21.524Z", - "time": 50, + "startedDateTime": "2024-06-19T21:28:22.150Z", + "time": 58, "timings": { "blocked": -1, "connect": -1, @@ -143,7 +151,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 50 + "wait": 58 } } ], diff --git a/src/test/mock-recordings/ScriptOps_3024995978/readScripts_3051169088/1-Read-scripts_679488918/recording.har b/src/test/mock-recordings/ScriptOps_3024995978/readScripts_3051169088/1-Read-scripts_679488918/recording.har index 634c84b40..14cf2fc4d 100644 --- a/src/test/mock-recordings/ScriptOps_3024995978/readScripts_3051169088/1-Read-scripts_679488918/recording.har +++ b/src/test/mock-recordings/ScriptOps_3024995978/readScripts_3051169088/1-Read-scripts_679488918/recording.har @@ -20,16 +20,16 @@ "value": "application/json, text/plain, */*" }, { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-32" + "name": "content-type", + "value": "application/json" }, { - "name": "x-forgerock-transactionid", - "value": "frodo-a3f32770-5881-4c4f-82d9-180a286b5f60" + "name": "user-agent", + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { - "name": "content-type", - "value": "application/json" + "name": "x-forgerock-transactionid", + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -39,12 +39,16 @@ "name": "authorization", "value": "Bearer " }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1595, + "headersSize": 1641, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [ @@ -56,11 +60,11 @@ "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=true" }, "response": { - "bodySize": 733735, + "bodySize": 463944, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 733735, - "text": "{\"result\":[{\"_id\":\"638c865e-d393-4503-a517-535b9c74e010\",\"name\":\"CP-ITE-static-inner1\",\"description\":\"CP-InnerTreeEvaluator-static-inner1\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoqCiAqIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGEgc2ltcGxpZmllZCB0ZW1wbGF0ZSBmb3IgdW5kZXJzdGFuZGluZyBob3cgdG8gYnVpbGQKICogdXAgYSBjb25maWcgTWFwIG9iamVjdCB3aXRoIGN1c3RvbSB2YWx1ZXMuIFRoZSBDb25maWcgUHJvdmlkZXIgTm9kZSB3aWxsIHRoZW4KICogcHJvdmlkZSB0aGlzIGNvbmZpZyBNYXAgdG8gdGhlIGRlc2lyZWQgbm9kZSB0eXBlLiBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgTWFwCiAqIHlvdSBidWlsZCBoZXJlIGlzIG5hbWVkICdjb25maWcnLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICoKICogbm9kZVN0YXRlIC0gTm9kZSBTdGF0ZSAoMSkKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGlzIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdmFsdWVzIHN0b3JlZCBpbiB0aGUgbm9kZSBzdGF0ZS4KICoKICogaWRSZXBvc2l0b3J5IC0gUHJvZmlsZSBEYXRhICgyKQogKiAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGEgcmVwb3NpdG9yeSB0byByZXRyaWV2ZSB1c2VyIGluZm9ybWF0aW9uLgogKgogKiBzZWNyZXRzIC0gQ3JlZGVudGlhbHMgYW5kIFNlY3JldHMgKDMpCiAqICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgYW4gaW50ZXJmYWNlIHRvIGFjY2VzcyB0aGUgU2VjcmV0cyBBUEkgZnJvbSBhIHNjcmlwdGluZyBjb250ZXh0LgogKgogKiByZXF1ZXN0SGVhZGVycyAoNCkgLSBNYXAgKDUpCiAqICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgYW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyBmb3IgYWNjZXNzaW5nIGhlYWRlcnMgaW4gdGhlIGxvZ2luIHJlcXVlc3QuCiAqCiAqIGxvZ2dlciAtIERlYnVnIExvZ2dpbmcgKDYpCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlLgogKgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDcpCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgSFRUUCBjbGllbnQgdGhhdCBjYW4gYmUgdXNlZCB0byBtYWtlIGV4dGVybmFsIEhUVFAgcmVxdWVzdHMuCiAqCiAqIHJlYWxtIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIG5hbWUgb2YgdGhlIHJlYWxtIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0aW5nIHRvLgogKgogKiBleGlzdGluZ1Nlc3Npb24gLSBNYXA8U3RyaW5nLCBTdHJpbmc+ICg1KQogKiAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4gVGhlIHJldHVybmVkIG1hcCBmcm9tCiAqICAgICAgICAgIFNTT1Rva2VuLmdldFByb3BlcnRpZXMoKSAoOCkKICoKICogcmVxdWVzdFBhcmFtZXRlcnMgLSBNYXAgKDUpCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFyYW1ldGVycy4KICoKICoKICogT3V0cHV0czoKICoKICogY29uZmlnIC0gTWFwICg1KQogKiAgICAgICAgICAgRGVmaW5lIGFuZCBmaWxsIGEgTWFwIG9iamVjdCBuYW1lZCAnY29uZmlnJyB3aXRoIGN1c3RvbSB2YWx1ZXMsIHRoaXMgd2lsbCBkZWZpbmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZQogKiAgICAgICAgICAgYXNzb2NpYXRlZCBub2RlIHNlbGVjdGVkIGluIHRoZSBDb25maWdQcm92aWRlck5vZGUuCiAqCiAqIFJlZmVyZW5jZToKICogKDEpIE5vZGUgU3RhdGUgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvaWRjbG91ZC1hbS9sYXRlc3QvYXV0aGVudGljYXRpb24tZ3VpZGUvc2NyaXB0aW5nLWFwaS1ub2RlLmh0bWwjc2NyaXB0aW5nLWFwaS1ub2RlLW5vZGVTdGF0ZQogKiAoMikgUHJvZmlsZSBEYXRhIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMS9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtaWQtcmVwbwogKiAoMykgQ3JlZGVudGlhbHMgYW5kIFNlY3JldHMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4xL2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktYXV0aG4tc2VjcmV0cwogKiAoNCkgUmVxdWVzdCBIZWFkZXJzIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXV0aGVudGljYXRpb24tZ3VpZGUvc2NyaXB0aW5nLWFwaS1ub2RlLmh0bWwjc2NyaXB0aW5nLWFwaS1ub2RlLXJlcXVlc3RIZWFkZXJzLgogKiAoNSkgTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9NYXAuaHRtbAogKiAoNikgRGVidWcgTG9nZ2luZyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICg3KSBIVFRQIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKiAoOCkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKi8KCmNvbmZpZyA9IHsKICB0cmVlOiAnaW5uZXIxJwp9Ow==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"CONFIG_PROVIDER_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"a8f10e93-3f6c-4d6c-b6a3-a8453e3d6b3a\",\"name\":\"ResetPasswordReplayCredentials\",\"description\":\"Reset the attributes holding replay credentials for the IG replay use case.\",\"script\":\"LyogUmVzZXRQYXNzd29yZFJlcGxheUNyZWRlbnRpYWxzCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIFJlc2V0IHRoZSBhdHRyaWJ1dGVzIGhvbGRpbmcgcmVwbGF5IGNyZWRlbnRpYWxzIGZvciB0aGUgSUcgcmVwbGF5IHVzZSBjYXNlLgogKiAKICogVGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgcGFyYW1ldHJpemVkIGZvciB5b3VyIGVudi4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwooZnVuY3Rpb24gKCkgewogIG91dGNvbWUgPSAidHJ1ZSI7CiAgdmFyIFJFUExBWV9VU0VSTkFNRV9JRE1fQVRUUiA9ICJmclVuaW5kZXhlZFN0cmluZzEiOwogIHZhciBSRVBMQVlfUEFTU1dPUkRfSURNX0FUVFIgPSAiZnJVbmluZGV4ZWRTdHJpbmcyIjsKICAKICBzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKS5wdXQoUkVQTEFZX1VTRVJOQU1FX0lETV9BVFRSLCBudWxsKTsKICBzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKS5wdXQoUkVQTEFZX1BBU1NXT1JEX0lETV9BVFRSLCBudWxsKTsKfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"073a64d4-37c9-486d-8c59-6583494644b9\",\"name\":\"FRAAS-7955 Transient State Only\",\"description\":\"FRAAS-7955 Transient State Only\",\"script\":\"b3V0Y29tZSA9ICJ0cnVlIjsKCnNldFRyYW5zaWVudE9iamVjdEF0dHJpYnV0ZSgidXNlck5hbWUiLCAiRlJBQVMtNzk1NSIpOwpzZXRUcmFuc2llbnRPYmplY3RBdHRyaWJ1dGUoImdpdmVuTmFtZSIsICJGaXJzdC10cmFuc2llbnQiKTsKc2V0VHJhbnNpZW50T2JqZWN0QXR0cmlidXRlKCJzbiIsICJMYXN0LXRyYW5zaWVudCIpOwpzZXRUcmFuc2llbnRPYmplY3RBdHRyaWJ1dGUoIm1haWwiLCAiZmlyc3QubGFzdC10cmFuc2llbnRAY29tcGFueS5jb20iKTsKCi8qCiAqIFN0b3JlIGF0dHJpYnV0ZXMgaW4gdHJhbnNpZW50IHN0YXRlIGZvciB1c2Ugd2l0aCB0aGUgQ3JlYXRlL1BhdGNoIE9iamVjdCBub2Rlcy4KICovCmZ1bmN0aW9uIHNldFRyYW5zaWVudE9iamVjdEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgewogICAgdmFyIHRyYW5zaWVudFN0b3JhZ2UgPSB0cmFuc2llbnRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKICAgIGlmICh0cmFuc2llbnRTdG9yYWdlICYmIHZhbHVlKSB7CiAgICAgICAgICBpZiAodHJhbnNpZW50U3RvcmFnZS5wdXQpIHsKICAgICAgICAgICAgdHJhbnNpZW50U3RvcmFnZS5wdXQobmFtZSwgdmFsdWUpOwogICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB0cmFuc2llbnRTdG9yYWdlW25hbWVdID0gdmFsdWU7CiAgICAgICAgfQogICAgfQogICAgZWxzZSBpZiAodmFsdWUpIHsKICAgIHRyYW5zaWVudFN0YXRlLnB1dCgib2JqZWN0QXR0cmlidXRlcyIsIEpTT04ucGFyc2UoIntcIiIrbmFtZSsiXCI6XCIiK3ZhbHVlKyJcIn0iKSk7CiAgICB9Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"ec8b314c-8e11-4364-93b9-a3e82d2a074a\",\"name\":\"Display Password\",\"description\":\"Display Password from nodeState\",\"script\":\"LyogRGlzcGxheSBQYXNzd29yZAogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBEaXNwbGF5IFBhc3N3b3JkIGNvbGxlY3RlZCB2aWEgUGxhdGZvcm0gUGFzc3dvcmQgbm9kZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KdmFyIHBhc3N3b3JkID0gInVuYWJsZSB0byByZXRyaWV2ZSEiOwppZiAobm9kZVN0YXRlLmdldCgicGFzc3dvcmQiKSkgewogIHBhc3N3b3JkID0gbm9kZVN0YXRlLmdldCgicGFzc3dvcmQiKS5hc1N0cmluZygpOwp9CnZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2sKKQppZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgZnIuVGV4dE91dHB1dENhbGxiYWNrLklORk9STUFUSU9OLAogICAgICAgICAgICBwYXNzd29yZAogICAgICAgICkKICAgICkuYnVpbGQoKQp9CmVsc2UgewogIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKCJ0cnVlIikuYnVpbGQoKTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"dbe0bf9a-72aa-49d5-8483-9db147985a47\",\"name\":\"ADFS Profile Normalization (JS)\",\"description\":\"Normalizes raw profile data from ADFS\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIHRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIKICogaW4gYSBzdGFuZGFyZCBmb3JtIGV4cGVjdGVkIGJ5IHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogcmF3UHJvZmlsZSAtIFRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvdmlkZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIuCiAqICAgICAgICAgICAgICBKc29uVmFsdWUgKDEpLgogKiBsb2dnZXIgLSBUaGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiByZWFsbSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqIHJlcXVlc3RIZWFkZXJzIC0gVHJlZU1hcCAoMikuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFjY2Vzc2luZyBoZWFkZXJzIGluIHRoZSBsb2dpbiByZXF1ZXN0OgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1yZXF1ZXN0SGVhZGVycy4KICogcmVxdWVzdFBhcmFtZXRlcnMgLSBUcmVlTWFwICgyKS4KICogICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFyYW1ldGVycy4KICogc2VsZWN0ZWRJZHAgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgVGhlIHNvY2lhbCBpZGVudGl0eSBwcm92aWRlciBuYW1lLiBGb3IgZXhhbXBsZTogZ29vZ2xlLgogKiBzaGFyZWRTdGF0ZSAtIExpbmtlZEhhc2hNYXAgKDMpLgogKiAgICAgICAgICAgICAgIFRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgc3RhdGUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRyZWUgYW5kIGFsbG93cyBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gdGhlIHN0YXRlbGVzcyBub2RlczoKICogICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoLW5vZGVzL2NvcmUtYWN0aW9uLmh0bWwjYWNjZXNzaW5nLXRyZWUtc3RhdGUuCiAqIHRyYW5zaWVudFN0YXRlIC0gTGlua2VkSGFzaE1hcCAoMykuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCBmb3Igc3RvcmluZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdGhhdCBtdXN0IG5vdCBsZWF2ZSB0aGUgc2VydmVyIHVuZW5jcnlwdGVkLAogKiAgICAgICAgICAgICAgICAgIGFuZCB0aGF0IG1heSBub3QgbmVlZCB0byBwZXJzaXN0IGJldHdlZW4gYXV0aGVudGljYXRpb24gcmVxdWVzdHMgZHVyaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBzZXNzaW9uOgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGgtbm9kZXMvY29yZS1hY3Rpb24uaHRtbCNhY2Nlc3NpbmctdHJlZS1zdGF0ZS4KICoKICogUmV0dXJuIC0gYSBKc29uVmFsdWUgKDEpLgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqCiAqICAgICAgICAgIFRoaXMgc2NyaXB0J3MgbGFzdCBzdGF0ZW1lbnQgc2hvdWxkIHJlc3VsdCBpbiBhIEpzb25WYWx1ZSAoMSkgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAqICAgICAgICAgIHsKICogICAgICAgICAgICAgIHsiZGlzcGxheU5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZW1haWwiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZmFtaWx5TmFtZSI6ICJjb3JyZXNwb25kaW5nLXNvY2lhbC1pZGVudGl0eS1wcm92aWRlci12YWx1ZSJ9LAogKiAgICAgICAgICAgICAgeyJnaXZlbk5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiaWQiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsibG9jYWxlIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InBob3RvVXJsIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InVzZXJuYW1lIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0KICogICAgICAgICAgfQogKgogKiAgICAgICAgICBUaGUgY29uc3VtZXIgb2YgdGhpcyBkYXRhIGRlZmluZXMgd2hpY2gga2V5cyBhcmUgcmVxdWlyZWQgYW5kIHdoaWNoIGFyZSBvcHRpb25hbC4KICogICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlIGFuZCwKICogICAgICAgICAgdWx0aW1hdGVseSwgdGhlIG1hbmFnZWQgb2JqZWN0IGNyZWF0ZWQvdXBkYXRlZCB3aXRoIHRoaXMgZGF0YQogKiAgICAgICAgICB3aWxsIGV4cGVjdCBjZXJ0YWluIGtleXMgdG8gYmUgcG9wdWxhdGVkLgogKiAgICAgICAgICBJbiBzb21lIGNvbW1vbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB0aGUgZm9sbG93aW5nIGtleXMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vdCBlbXB0eToKICogICAgICAgICAgdXNlcm5hbWUsIGdpdmVuTmFtZSwgZmFtaWx5TmFtZSwgZW1haWwuCiAqCiAqICAgICAgICAgIEZyb20gUkZDNDUxNzogQSB2YWx1ZSBvZiB0aGUgRGlyZWN0b3J5IFN0cmluZyBzeW50YXggaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKICogICAgICAgICAgYXJiaXRyYXJ5IGNoYXJhY3RlcnMgZnJvbSB0aGUgVW5pdmVyc2FsIENoYXJhY3RlciBTZXQgKFVDUykuCiAqICAgICAgICAgIEEgemVyby1sZW5ndGggY2hhcmFjdGVyIHN0cmluZyBpcyBub3QgcGVybWl0dGVkLgogKgogKiAoMSkgSnNvblZhbHVlIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2pzb24vSnNvblZhbHVlLmh0bWwuCiAqICgyKSBUcmVlTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9UcmVlTWFwLmh0bWwuCiAqICgzKSBMaW5rZWRIYXNoTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqLwoKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQogICAgKTsKCiAgICB2YXIgbm9ybWFsaXplZFByb2ZpbGVEYXRhID0gZnJKYXZhLkpzb25WYWx1ZS5qc29uKGZySmF2YS5Kc29uVmFsdWUub2JqZWN0KCkpOwogIAogIAkvL2xvZ2dlci5tZXNzYWdlKCdTZWd1aW4gcmF3UHJvZmlsZTogJytyYXdQcm9maWxlKTsKCiAgICBub3JtYWxpemVkUHJvZmlsZURhdGEucHV0KCdpZCcsIHJhd1Byb2ZpbGUuZ2V0KCdzdWInKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2Rpc3BsYXlOYW1lJywgcmF3UHJvZmlsZS5nZXQoJ2dpdmVuTmFtZScpLmFzU3RyaW5nKCkgKyAnICcgKyByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2VtYWlsJywgcmF3UHJvZmlsZS5nZXQoJ21haWwnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2dpdmVuTmFtZScsIHJhd1Byb2ZpbGUuZ2V0KCdnaXZlbk5hbWUnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2ZhbWlseU5hbWUnLCByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ3VzZXJuYW1lJywgcmF3UHJvZmlsZS5nZXQoJ3VwbicpLmFzU3RyaW5nKCkpOwogICAgbm9ybWFsaXplZFByb2ZpbGVEYXRhLnB1dCgncm9sZXMnLCByYXdQcm9maWxlLmdldCgncm9sZXMnKS5hc1N0cmluZygpKTsKICAKICAJLy9sb2dnZXIubWVzc2FnZSgnU2VndWluIG5vcm1hbGl6ZWRQcm9maWxlRGF0YTogJytub3JtYWxpemVkUHJvZmlsZURhdGEpOwoKICAgIHJldHVybiBub3JtYWxpemVkUHJvZmlsZURhdGE7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"d2cf4f18-651a-4a3c-9b04-ee4fc896d0c3\",\"name\":\"ST_healthcare-idc-social-transformation\",\"description\":\"Social Identity Provider Profile Transformation for ForgeRock OIDC Providers\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2suIE5vdCBmb3IgcHJvZHVjdGlvbiB1c2UuCiAqIE1vZGlmaWVkIGJ5IFN0ZXBoZW4gUGF5bmUKICovCi8qIFNvY2lhbCBJZGVudGl0eSBQcm92aWRlciBQcm9maWxlIFRyYW5zZm9ybWF0aW9uIHNjcmlwdCBmb3IgSGVhbHRoY2FyZSBJRCBDbG91ZCAqLwppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKbG9nZ2VyLmVycm9yKCJTVF9oZWFsdGhjYXJlLWlkYy1zb2NpYWwtdHJhbnNmb3JtYXRpb24gSGVhbHRoY2FyZSBJRCBDbG91ZCBJZGVudGl0eSBQcm92aWRlciBQcm9maWxlIFRyYW5zZm9ybWF0aW9uIHNjcmlwdDogU3RhcnQiKTsKCmxvZ2dlci5lcnJvcigiU1RfaGVhbHRoY2FyZS1pZGMtc29jaWFsLXRyYW5zZm9ybWF0aW9uIFByb2ZpbGUgVHJhbnNmb3JtYXRpb24gc2NyaXB0OiBTdGFydCIpOwpsb2dnZXIuZXJyb3IoIlNUX2hlYWx0aGNhcmUtaWRjLXNvY2lhbC10cmFuc2Zvcm1hdGlvbnk6IGdpdmVuTmFtZSAiICsgcmF3UHJvZmlsZS5naXZlbk5hbWUpOwpsb2dnZXIuZXJyb3IoIlNUX2hlYWx0aGNhcmUtaWRjLXNvY2lhbC10cmFuc2Zvcm1hdGlvbjogc246ICIgK3Jhd1Byb2ZpbGUuZmFtaWx5TmFtZSk7CmxvZ2dlci5lcnJvcigiU1RfaGVhbHRoY2FyZS1pZGMtc29jaWFsLXRyYW5zZm9ybWF0aW9uOiBpZDogIiArcmF3UHJvZmlsZS5pZCk7CmxvZ2dlci5lcnJvcigiU1RfaGVhbHRoY2FyZS1pZGMtc29jaWFsLXRyYW5zZm9ybWF0aW9uOiBtYWlsOiAiICsgcmF3UHJvZmlsZS5lbWFpbCk7CmxvZ2dlci5lcnJvcigiU1RfaGVhbHRoY2FyZS1pZGMtc29jaWFsLXRyYW5zZm9ybWF0aW9uOiBjbjogIiArIHJhd1Byb2ZpbGUuZGlzcGxheU5hbWUpOwpsb2dnZXIuZXJyb3IoIlNUX2hlYWx0aGNhcmUtaWRjLXNvY2lhbC10cmFuc2Zvcm1hdGlvbjogdXNlck5hbWU6ICIgKyByYXdQcm9maWxlLnVzZXJuYW1lKTsKbG9nZ2VyLmVycm9yKCJTVF9oZWFsdGhjYXJlLWlkYy1zb2NpYWwtdHJhbnNmb3JtYXRpb246IGlkOiAiICsgcmF3UHJvZmlsZS5pZC5hc1N0cmluZygpKTsKLy9sb2dnZXIuZXJyb3IoIlNUX2hlYWx0aGNhcmUtaWRjLXNvY2lhbC10cmFuc2Zvcm1hdGlvbjogaXBsYW5ldC1hbS11c2VyLWFsaWFzLWxpc3Q6ICIgKyBzZWxlY3RlZElkcCArICctJyArIHJhd1Byb2ZpbGUuaWQuYXNTdHJpbmcoKSApOwovL2xvZ2dlci5lcnJvcigiU1RfaGVhbHRoY2FyZS1pZGMtc29jaWFsLXRyYW5zZm9ybWF0aW9uOiBzZWxlY3RlZElkcDogIiArIHNlbGVjdGVkSWRwKTsKaWYgKHJhd1Byb2ZpbGUuZmhpclVzZXIuaXNOb3ROdWxsKCkpIGxvZ2dlci5lcnJvcigiU1RfaGVhbHRoY2FyZS1pZGMtc29jaWFsLXRyYW5zZm9ybWF0aW9uOiBmaGlyVXNlcjogIiArIHJhd1Byb2ZpbGUuZmhpclVzZXIpOwppZiAocmF3UHJvZmlsZS5JQUwuaXNOb3ROdWxsKCkpIGxvZ2dlci5lcnJvcigiU1RfaGVhbHRoY2FyZS1pZGMtc29jaWFsLXRyYW5zZm9ybWF0aW86IElBTDogIiArIHJhd1Byb2ZpbGUuSUFMKTsKCgoKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJJQUwiLCByYXdQcm9maWxlLklBTCksICAKICAgICAgICBmaWVsZCgidGVsZXBob25lTnVtYmVyIiwgcmF3UHJvZmlsZS5waG9uZV9udW1iZXIpLAogICAgICAgIGZpZWxkKCJmaGlyVXNlciIsIHJhd1Byb2ZpbGUuZmhpclVzZXIpLAogICAgICAgIGZpZWxkKCJ1c2VyVHlwZSIsIHJhd1Byb2ZpbGUudXNlclR5cGUpLAogICAgICAgICkKKQ==\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"73cecbfc-dad0-4395-be6a-6858ee3a80e5\",\"name\":\"Microsoft Profile Normalization\",\"description\":\"Normalizes raw profile data from Microsoft\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKewogICAgIkBvZGF0YS5jb250ZXh0IjogImh0dHBzOi8vZ3JhcGgubWljcm9zb2Z0LmNvbS92MS4wLyRtZXRhZGF0YSN1c2Vycy8kZW50aXR5IiwKICAgICJAb2RhdGEuaWQiOiAiaHR0cHM6Ly9ncmFwaC5taWNyb3NvZnQuY29tL3YyLzcxMWZmYTljLTU5NzItNDcxMy1hY2UzLTY4OGM5NzMyNjE0YS9kaXJlY3RvcnlPYmplY3RzLzdkNzc1OWUyLTM2ZDgtNGU2NC1iMTczLTNmODkwZDdkNDZkNi9NaWNyb3NvZnQuRGlyZWN0b3J5U2VydmljZXMuVXNlciIsCiAgICAiYnVzaW5lc3NQaG9uZXMiOiBbCiAgICAgICAgIjE4MDE0NzM1NDUxIgogICAgXSwKICAgICJkaXNwbGF5TmFtZSI6ICJWb2xrZXIgU2NoZXViZXIiLAogICAgImdpdmVuTmFtZSI6ICJWb2xrZXIiLAogICAgImpvYlRpdGxlIjogbnVsbCwKICAgICJtYWlsIjogInZzY2hldWJlckB2c2NoZXViZXIub25taWNyb3NvZnQuY29tIiwKICAgICJtb2JpbGVQaG9uZSI6IG51bGwsCiAgICAib2ZmaWNlTG9jYXRpb24iOiBudWxsLAogICAgInByZWZlcnJlZExhbmd1YWdlIjogbnVsbCwKICAgICJzdXJuYW1lIjogIlNjaGV1YmVyIiwKICAgICJ1c2VyUHJpbmNpcGFsTmFtZSI6ICJ2c2NoZXViZXJAdnNjaGV1YmVyLm9ubWljcm9zb2Z0LmNvbSIsCiAgICAiaWQiOiAiN2Q3NzU5ZTItMzZkOC00ZTY0LWIxNzMtM2Y4OTBkN2Q0NmQ2Igp9CiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci5tZXNzYWdlKCJLYXVhaSBNaWNyb3NvZnQgUHJvZmlsZSBOb3JtYWxpemF0aW9uOiByYXdQcm9maWxlPXt9IiwgcmF3UHJvZmlsZSkKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlOYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbk5hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5zdXJuYW1lKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSwKICAgICAgICBmaWVsZCgiZ3JvdXBzIiwgcmF3UHJvZmlsZS5ncm91cHMpKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"name\":\"mode\",\"description\":\"Check if mode has already been set.\",\"script\":\"LyogbW9kZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDb2xsZWN0IG1vZGUgaWYgbm90IGFscmVhZHkgc2V0IGFuZCBzZXQgb3V0Y29tZSB0byBtb2RlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSAnc2hhcmVkIGFuZCBsZXZlbCcKICogLSAnc2hhcmVkIG9ubHknCiAqIC0gJ2xldmVsIG9ubHknCiAqIC0gJ25vbmUnCiAqLwooZnVuY3Rpb24gKCkgewogIHZhciBtb2RlID0gbm9kZVN0YXRlLmdldCgnbW9kZScpOwogIGlmIChtb2RlKSB7CiAgICBvdXRjb21lID0gbW9kZS5hc1N0cmluZygpOwogICAgdmFyIGxldmVsID0gbm9kZVN0YXRlLmdldCgnbGV2ZWwnKS5hc0ludGVnZXIoKSArIDE7CiAgICBsb2dnZXIuZXJyb3IoJ21vZGU6IG1vZGU9JyArIG1vZGUuYXNTdHJpbmcoKSArICcsIGxldmVsPScgKyBsZXZlbCk7CiAgICBzaGFyZWRTdGF0ZS5wdXQoJ2xldmVsJywgbGV2ZWwpOwogIH0KICBlbHNlIHsKICAgIHZhciBjaG9pY2VzID0gWydzaGFyZWQgYW5kIGxldmVsJywgJ3NoYXJlZCBvbmx5JywgJ2xldmVsIG9ubHknLCAnbm9uZSddOwogIAogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DaG9pY2VDYWxsYmFjawogICAgKQoKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKFsKICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soJ0Nob29zZSB0ZXN0IG1vZGUnLCBjaG9pY2VzLCAwLCBmYWxzZSkKICAgICAgXSkuYnVpbGQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBjaG9pY2UgPSBwYXJzZUludChjYWxsYmFja3MuZ2V0KDApLmdldFNlbGVjdGVkSW5kZXhlcygpWzBdKTsKICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgnbW9kZScsIGNob2ljZXNbY2hvaWNlXSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2xldmVsJywgMCk7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKGNob2ljZXNbY2hvaWNlXSkuYnVpbGQoKTsKICAgIH0KICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"be6f1f2c-30ee-41fb-9e1e-8da72267fad3\",\"name\":\"Twilio IVR: Greet Verified Caller\",\"description\":\"Greet verified caller\",\"script\":\"LyogVHdpbGlvIElWUjogR3JlZXQgVmVyaWZpZWQgQ2FsbGVyCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAKICogRGVwZW5kaW5nIG9uIHRoZSBhbW91bnQgb2YgZGF0YSBjb2xsZWN0ZWQgdGhyb3VnaCBjYWxsYmFja3MgYW5kIGhvdyBtYW55IG9mIHRoZSBjYWxsUGFyYW1zCiAqIHlvdSBhY3RpdmF0ZSBiZWxvdywgeW91IHdpbGwgbmVlZCB0byBjaGFuZ2UgeW91ciBhdXRoZW50aWNhdGlvbiBzZXNzaW9uIGZyb20gSldUIHRvIENUUyBvcgogKiBNZW1vcnkuCiAqLwpvdXRjb21lID0gInRydWUiOwoKLyogQmVnaW4gQ29uZmlndXJhdGlvbgogKi8KCi8vIEZvciBJRCBDbG91ZCB1c2UgIl9pZCIsIGZvciBjbGFzc2ljIGRlcGxveW1lbnRzIHVzZSAidXNlcm5hbWUiCnZhciB1c2VyaWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCgovLyBDb25maWd1cmUgaG93IHlvdSB3b3VsZCBsaWtlIHRvIGFkZHJlc3MgdGhlIHZlcmlmaWVkIGNhbGxlci4gVGhlIGRlZmF1bHQgaXMgdGhlIGZ1bGwgbmFtZS4KdmFyIG5hbWUgPSBbaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZSh1c2VyaWQsICJnaXZlbk5hbWUiKS5pdGVyYXRvcigpLm5leHQoKSwgaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZSh1c2VyaWQsICJzbiIpLml0ZXJhdG9yKCkubmV4dCgpXS5qb2luKCIgIik7CgovLyBCdWlsZCBvdXQgdGhlIGZ1bGwgbWVzc2FnZQp2YXIgbWVzc2FnZSA9IFsiSGVsbG8iLCBuYW1lLCAiISBIb3cgY2FuIEkgaGVscCB5b3UgdG9kYXk/Il0uam9pbigiICIpOwoKLyogRW5kIENvbmZpZ3VyYXRpb24KICovCgp2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suVGV4dE91dHB1dENhbGxiYWNrCik7CiAgCndpdGggKGZyKSB7CiAgICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgdmFyIG91dHB1dCA9IG5ldyBUZXh0T3V0cHV0Q2FsbGJhY2soVGV4dE91dHB1dENhbGxiYWNrLklORk9STUFUSU9OLCBtZXNzYWdlKTsKICAgICAgICBhY3Rpb24gPSBBY3Rpb24uc2VuZChvdXRwdXQpLmJ1aWxkKCk7CiAgICAgIH0gCiAgICAgIGVsc2UgewogICAgICAgIGFjdGlvbiA9IEFjdGlvbi5nb1RvKG91dGNvbWUpLmJ1aWxkKCk7CiAgICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"53c50dbd-5331-4739-bea1-4c5e9bf553f2\",\"name\":\"Twilio IVR: Welcome Message\",\"description\":\"Welcome message\",\"script\":\"LyogVHdpbGlvIElWUjogV2VsY29tZSBNZXNzYWdlCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAKICogRGVwZW5kaW5nIG9uIHRoZSBhbW91bnQgb2YgZGF0YSBjb2xsZWN0ZWQgdGhyb3VnaCBjYWxsYmFja3MgYW5kIGhvdyBtYW55IG9mIHRoZSBjYWxsUGFyYW1zCiAqIHlvdSBhY3RpdmF0ZSBiZWxvdywgeW91IHdpbGwgbmVlZCB0byBjaGFuZ2UgeW91ciBhdXRoZW50aWNhdGlvbiBzZXNzaW9uIGZyb20gSldUIHRvIENUUyBvcgogKiBNZW1vcnkuCiAqLwpsb2dnZXIud2FybmluZygiVHdpbGlvIElWUjogV2VsY29tZSBNZXNzYWdlOiBzdGFydCIpOwpvdXRjb21lID0gInRydWUiOwoKLyogQmVnaW4gQ29uZmlndXJhdGlvbgogKi8KCi8vIEJ1aWxkIG91dCB0aGUgZnVsbCBtZXNzYWdlCnZhciBtZXNzYWdlID0gIlRoYW5rIHlvdSBmb3IgY2FsbGluZyBGb3JnZVJvY2sgSWRlbnRpdHkgQ2xvdWQhIjsKCi8qIEVuZCBDb25maWd1cmF0aW9uCiAqLwoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLAogICAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjawopOwogIAp3aXRoIChmcikgewogICAgICBpZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgICAgIHZhciBvdXRwdXQgPSBuZXcgVGV4dE91dHB1dENhbGxiYWNrKFRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwgbWVzc2FnZSk7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLnNlbmQob3V0cHV0KS5idWlsZCgpOwogICAgICB9IAogICAgICBlbHNlIHsKICAgICAgICBsb2dnZXIud2FybmluZygiVHdpbGlvIElWUjogV2VsY29tZSBNZXNzYWdlOiBmaW5pc2ggW291dGNvbWU9Ii5jb25jYXQob3V0Y29tZSkuY29uY2F0KCJdIikpOwogICAgICAgIGFjdGlvbiA9IEFjdGlvbi5nb1RvKG91dGNvbWUpLmJ1aWxkKCk7CiAgICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"4accb4d0-56ec-4a28-a769-5275dbac3147\",\"name\":\"Admin_PasswordFixStart\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKVGhpcyBpcyBhIHdvcmthcm91bmQgdGhhdCBmaXhlcyBhbiBpc3N1ZSB3aXRoIHBhc3N3b3JkIHBvbGljeS4KClRoZSBQbGF0Zm9ybSBQYXNzd29yZCBub2RlIGF0dGVtcHRzIHRvIHZhbGlkYXRlIGEgcGFzc3dvcmQgYnkgY2FsbGluZyBJRE0ncyB2YWxpZGF0ZVByb3BlcnR5IGFjdGlvbiwgYW5kIGl0IHVzZXMKc2hhcmVkU3RhdGUub2JqZWN0QXR0cmlidXRlcyBhcyB0aGUgYG9iamVjdGAgcHJvcGVydHkgb2YgdGhhdCByZXF1ZXN0IHBheWxvYWQuICBJZiB0aGUgcmVxdWVzdCBpcyBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnRpZXMKb3IgY29udGFpbnMgcHJvcGVydGllcyBub3QgaW4gdGhlIG9iamVjdCdzIHNjaGVtYSwgRFMgd2lsbCBlcnJvciBhbmQgSURNIHdpbGwgc3dhbGxvdyB0aGF0IGVycm9yLCByZXR1cm5pbmcgYW4gZW1wdHkgCmxpc3Qgb2YgZmFpbGVkIHBvbGljaWVzIGluc3RlYWQuCgpUaGlzIHdvcmthcm91bmQgcHJvdmlkZXMgZmFrZSB2YWx1ZXMgZm9yIHJlcXVpcmVkIHByb3BlcnRpZXMuIEl0IGFsc28gZW5zdXJlcyBmaXJzdC9sYXN0IG5hbWUgaXMgaW4gb2JqZWN0QXR0cmlidXRlcyBzbyB0aGUKImNhbid0IGNvbnRhaW4iIHBvbGljeSBjYW4gYmUgZXZhbHVhdGVkLiBUaGlzIHdvcmthcm91bmQgaXMgY2xlYW5lZCB1cCBieSBBZG1pbl9QYXNzd29yZEZpeEVuZC5qcy4KKi8KCi8vIENhcHR1cmUgZXhpc3Rpbmcgb2JqZWN0IGF0dHJpYnV0ZXMgc28gd2UgY2FuIHJlc3RvcmUgdGhlbSBsYXRlcgppZiAoc2hhcmVkU3RhdGUuY29udGFpbnNLZXkoJ29iamVjdEF0dHJpYnV0ZXMnKSkgewogIHNoYXJlZFN0YXRlLnB1dCgnb3JpZ2luYWxPYmplY3RBdHRyaWJ1dGVzJywgc2hhcmVkU3RhdGUuZ2V0KCdvYmplY3RBdHRyaWJ1dGVzJykpOwp9CgovLyBEZWZpbmUgdGhlIG9iamVjdCB0byB1c2UgZm9yIHBvbGljeSBldmFsdWF0aW9uCnZhciBwb2xpY3lPYmplY3QgPSB7CiAgZ2l2ZW5OYW1lOiAnJywKICBzbjogJycsCiAgZ3JvdXBzOiBbJ2Zha2UnXSwKICBpbnZpdGVEYXRlOiAnZmFrZScKfTsKCi8vIElmIHdlJ3ZlIGxvYWRlZCB0aGUgYWRtaW4gb2JqZWN0LCBhZGQgZmlyc3QvbGFzdCBuYW1lIHRvIHN1cHBvcnQKLy8gZXZhbHVhdGlvbiBvZiB0aGUgZnVsbCBwb2xpY3kKaWYgKHNoYXJlZFN0YXRlLmNvbnRhaW5zS2V5KCdhZG1pbk9iamVjdCcpKSB7CiAgdmFyIGFkbWluT2JqZWN0ID0gc2hhcmVkU3RhdGUuZ2V0KCdhZG1pbk9iamVjdCcpOwogIHBvbGljeU9iamVjdC5naXZlbk5hbWUgPSBhZG1pbk9iamVjdC5nZXQoJ2dpdmVuTmFtZScpOwogIHBvbGljeU9iamVjdC5zbiA9IGFkbWluT2JqZWN0LmdldCgnc24nKTsKfQoKLy8gUmVwbGFjZSBvYmplY3RBdHRyaWJ1dGVzIHdpdGggb3VyIHBvbGljeSBvYmplY3QKc2hhcmVkU3RhdGUucHV0KCdvYmplY3RBdHRyaWJ1dGVzJywgcG9saWN5T2JqZWN0KTsKCm91dGNvbWUgPSAnVHJ1ZSc7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"8a768bb3-01cd-46b8-881c-b77f5a26c283\",\"name\":\"Onfido-Meta-Tags\",\"description\":\"Write Onfido HTML Meta Tags\",\"script\":\"LyogV3JpdGUgSFRNTCBNZXRhIFRhZ3MKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogVGhpcyBzY3JpcHQgd3JpdGVzIG1ldGEgdGFncyB0byB0aGUgaGVhZGVyLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwooZnVuY3Rpb24gKCkgewogIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawogICkKCiAgZnVuY3Rpb24gY3JlYXRlU2NyaXB0KCkgewogICAgcmV0dXJuIFN0cmluZygiXG5cCiAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcblwKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVxuXAogICAgKS5mb3JFYWNoKFxuXAogICAgICBmdW5jdGlvbiAoZSkge1xuXAogICAgICAgIHZhciBtZXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbWV0YScpOyBcblwKICAgICAgICBtZXRhLm5hbWUgPSBcImF1dGhvclwiOyBcblwKICAgICAgICBtZXRhLmNvbnRlbnQgPSBcIkpvaG4gRG9lXCI7IFxuXAogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQobWV0YSk7IFxuXAogICAgICB9XG5cCiAgICApIik7CiAgfQoKICBpZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgIG5ldyBmci5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2soY3JlYXRlU2NyaXB0KCkpCiAgICAgICkuYnVpbGQoKQogIH0gZWxzZSB7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKCJ0cnVlIikuYnVpbGQoKTsKICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"766ed2a6-29dd-4bd7-a60d-9eabbd63545c\",\"name\":\"Service Account - Verify JWT\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sudXRpbC5PcHRpb25zLAogIG9yZy5mb3JnZXJvY2suanNvbi5qb3NlLmp3ay5KV0tTZXQsCiAgb3JnLmZvcmdlcm9jay5qc29uLmpvc2UuandzLlNpZ25pbmdNYW5hZ2VyLAogIG9yZy5mb3JnZXJvY2suanNvbi5qb3NlLmJ1aWxkZXJzLkp3dEJ1aWxkZXJGYWN0b3J5LAogIG9yZy5mb3JnZXJvY2suanNvbi5qb3NlLmp3cy5TaWduZWRKd3QKKTsKCnZhciBzbSA9IG5ldyBmci5TaWduaW5nTWFuYWdlcigpOwoKZnVuY3Rpb24gZ2V0SldLcyhzdmNBY2N0SWQpIHsKICB2YXIgc3ZjQWNjdCA9IGlkUmVwb3NpdG9yeS5nZXRJZGVudGl0eShzdmNBY2N0SWQpOwogIGlmIChzdmNBY2N0ID09IG51bGwpIHsKICAgIGxvZ2dlci5tZXNzYWdlKCdObyBzZXJ2aWNlIGFjY291bnQgZm91bmQgZm9yIHt9Jywgc3ZjQWNjdElkKTsKICAgIHJldHVybiBudWxsOwogIH0KICB2YXIgandrc0F0dHJzID0gc3ZjQWNjdC5nZXRBdHRyaWJ1dGVWYWx1ZXMoJ2ZyLWF0dHItandrcycpOwogIGlmICghandrc0F0dHJzIHx8IGp3a3NBdHRycy5sZW5ndGggPT09IDApIHsKICAgIGxvZ2dlci5tZXNzYWdlKCdObyBqd2tzIGF0dHJpYnV0ZXMgaW4gaXNzdWVyJyk7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgdmFyIGp3a1NldCA9IGp3a3NBdHRyc1swXTsKICBpZiAoIWp3a1NldCkgewogICAgbG9nZ2VyLm1lc3NhZ2UoJ05vIGp3ayBzZXQgaW4gandrcyBhdHRyaWJ1dGUgaW4gaXNzdWVyJyk7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIGZyLkpXS1NldC5wYXJzZShqd2tTZXQpLmdldEpXS3NBc0xpc3QoKTsKfQoKb3V0Y29tZSA9IChmdW5jdGlvbiAoKSB7CiAgdmFyIGF1dGh6ID0gcmVxdWVzdEhlYWRlcnMuZ2V0KCdhdXRob3JpemF0aW9uJyk7CiAgaWYgKGF1dGh6ID09PSBudWxsIHx8IGF1dGh6Lmxlbmd0aCA9PT0gMCB8fCBhdXRoelswXS5pbmRleE9mKCdzdmNhY2N0JykgIT09IDApIHsKICAgIGxvZ2dlci5tZXNzYWdlKCdObyBhdXRob3JpemF0aW9uIGhlYWRlcicpOwogICAgcmV0dXJuICdGYWxzZSc7CiAgfQoKICBhdXRoeiA9IGF1dGh6WzBdLnNwbGl0KCcgJyk7CiAgaWYgKGF1dGh6Lmxlbmd0aCAhPT0gMykgewogICAgbG9nZ2VyLm1lc3NhZ2UoJ0JhZCBhdXRob3JpemF0aW9uIGhlYWRlciBsZW5ndGgge30nLCBhdXRoei5sZW5ndGgpOwogICAgcmV0dXJuICdGYWxzZSc7CiAgfQogIHZhciBzdmNBY2N0SWQgPSBhdXRoelsxXTsKICB2YXIgand0ID0gYXV0aHpbMl07CiAgdmFyIHNpZ25lZEp3dCA9IG5ldyBmci5Kd3RCdWlsZGVyRmFjdG9yeSgpLnJlY29uc3RydWN0KGp3dCwgZnIuU2lnbmVkSnd0KTsKCiAgdmFyIGp3a3MgPSBnZXRKV0tzKHN2Y0FjY3RJZCk7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBqd2tzLnNpemUoKTsgaSsrKSB7CiAgICB2YXIgdmVyaWZpZXIgPSBzbS5uZXdWZXJpZmljYXRpb25IYW5kbGVyKGp3a3MuZ2V0KGkpKQogICAgaWYgKHNpZ25lZEp3dC52ZXJpZnkodmVyaWZpZXIpKSB7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoInVzZXJuYW1lIiwgc3ZjQWNjdElkKTsKICAgICAgcmV0dXJuICdUcnVlJzsKICAgIH0KICB9CgogIGxvZ2dlci5tZXNzYWdlKCdDb3VsZCBub3QgdmVyaWZ5IGp3dCcpOwogIHJldHVybiAnRmFsc2UnOwp9KSgpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"5561a45f-bf00-4ec5-bab4-f069bac9a38b\",\"name\":\"CopyOTPToObjectAttributes\",\"description\":\"Copy an OTP generated by the \\\"HOTP Generator\\\" node to the IDM profile shared state so it can be patched to the user profile.\",\"script\":\"LyogQ29weU9UUFRvT2JqZWN0QXR0cmlidXRlcwogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDb3B5IGFuIE9UUCBnZW5lcmF0ZWQgYnkgdGhlICJIT1RQIEdlbmVyYXRvciIgbm9kZSB0byB0aGUgSURNIHByb2ZpbGUgCiAqIHNoYXJlZCBzdGF0ZSBzbyBpdCBjYW4gYmUgcGF0Y2hlZCB0byB0aGUgdXNlciBwcm9maWxlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwppZiAoc2hhcmVkU3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikpIHsKICAgIHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpLnB1dCgiZGVzY3JpcHRpb24iLCBzaGFyZWRTdGF0ZS5nZXQoIm9uZVRpbWVQYXNzd29yZCIpKQp9CmVsc2UgewogICAgc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwge2Rlc2NyaXB0aW9uOiBzaGFyZWRTdGF0ZS5nZXQoIm9uZVRpbWVQYXNzd29yZCIpfSk7Cn0Kb3V0Y29tZSA9ICJ0cnVlIjs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"1acc5535-13e2-4ed8-83e1-f4fefd86d243\",\"name\":\"Ready Response\",\"description\":\"Readiness probe response\",\"script\":\"LyogUmVhZHkgUmVzcG9uc2UKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogUmV0dXJuIFJFQURZIGluIGEgVGV4dE91dHB1dENhbGxiYWNrIGluZGljYXRpbmcgdGhhdCB0aGUgam91cm5leSBsYXllciBpcyBvcGVyYXRpb25hbC4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8Kb3V0Y29tZSA9ICJ0cnVlIjsKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjawopCmlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgICJSRUFEWSIKICAgICAgICApCiAgICApLmJ1aWxkKCkKfQplbHNlIHsKICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbyhvdXRjb21lKS5idWlsZCgpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"123725a9-2119-4efd-a6b0-456f3ccd34b7\",\"name\":\"deviceprofile_to_attribute\",\"description\":\"null\",\"script\":\"dmFyIG9iamVjdEF0dHJpYnV0ZXMgPSBzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKdmFyIGRldmljZUhhc2ggPSBzaGFyZWRTdGF0ZS5nZXQoImRldmljZUhhc2giKTsKCnNoYXJlZFN0YXRlLnB1dCgiZnJJbmRleGVkU3RyaW5nMSIgLCBkZXZpY2VIYXNoICk7CgoKCmlmKG9iamVjdEF0dHJpYnV0ZXMgPT09IG51bGwgfHwgb2JqZWN0QXR0cmlidXRlcyA9PT0gdW5kZWZpbmVkKQp7CgoKIG9iamVjdEF0dHJpYnV0ZXMgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ1c2VyTmFtZSIgOiAiYW5vbi0iLmNvbmNhdChkZXZpY2VIYXNoKSwKICAgICAgICAgICAgICAgICAgICAgImdpdmVuTmFtZSIgOiAiICIsCiAgICAgICAgICAgICAgICAgICAgICJzbiIgOiAiICIsCiAgICAgICAgICAgICAgICAgICAgICJtYWlsIiA6ICJhbm9uLSIuY29uY2F0KGRldmljZUhhc2gpLmNvbmNhdCgiQG15dGVzdHJ1bi5jb20iKSwKICAgICAgICAgICAgICAgICAgICAgImZySW5kZXhlZFN0cmluZzEiIDogZGV2aWNlSGFzaAogICAgICAgICAgICAgICAgICAgIH0KfQplbHNlCnsKCiAgICBvYmplY3RBdHRyaWJ1dGVzLnB1dCgidXNlck5hbWUiLCAgImFub24tIi5jb25jYXQoZGV2aWNlSGFzaCkpOwogICAgb2JqZWN0QXR0cmlidXRlcy5wdXQoImdpdmVuTmFtZSIsICIgIik7CiAgICBvYmplY3RBdHRyaWJ1dGVzLnB1dCgic24iLCAiICIpOwogICAgb2JqZWN0QXR0cmlidXRlcy5wdXQoIm1haWwiLCAiYW5vbi0iLmNvbmNhdChkZXZpY2VIYXNoKS5jb25jYXQoIkBteXRlc3RydW4uY29tIikpOwogICAgb2JqZWN0QXR0cmlidXRlcy5wdXQoImZySW5kZXhlZFN0cmluZzEiLCBkZXZpY2VIYXNoKTsKICAgCn0KCgpzaGFyZWRTdGF0ZS5wdXQoIm9iamVjdEF0dHJpYnV0ZXMiLG9iamVjdEF0dHJpYnV0ZXMpOwogICAgCm91dGNvbWUgPSAidHJ1ZSI7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"2aaa8076-5d0b-4433-9660-fec1ba51b608\",\"name\":\"temp\",\"description\":\"null\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwpvdXRjb21lID0gImZhbHNlIjsKaWYoc2hhcmVkU3RhdGUuZ2V0KCJ1c2VyTmFtZSIpKQp7CnZhciB1c2VybmFtZSA9IHNoYXJlZFN0YXRlLmdldCgidXNlck5hbWUiKQp2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCnZhciBwZXJzb25hID0gZXhpc3RpbmdTZXNzaW9uLmdldCgncGVyc29uYScpCgpzaGFyZWRTdGF0ZS5wdXQoImRlYnVnIix1c2VybmFtZSk7CnNoYXJlZFN0YXRlLnB1dCgiZGVidWdfaWQiLGlkKTsKc2hhcmVkU3RhdGUucHV0KCJwZXJzb25hIixwZXJzb25hKTsKCmlmKHVzZXJuYW1lIT09JycpCnsKICBvdXRjb21lID0gInRydWUiOwp9fQo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"22ab12ac-d1d9-414b-ab51-cfae30de8c0a\",\"name\":\"Configure Email Template Node\",\"description\":\"Create a configuration object for the Email Template Node.\",\"script\":\"LyogQ29uZmlndXJlIEVtYWlsIFRlbXBsYXRlIE5vZGUKICogCiAqIENyZWF0ZSBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgRW1haWwgVGVtcGxhdGUgTm9kZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAtIGVycm9yCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICovCihmdW5jdGlvbiAoKSB7CiAgdHJ5IHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBjb25maWcgPSB7CiAgICBlbWFpbEF0dHJpYnV0ZTogJ21haWwnLAogICAgZW1haWxUZW1wbGF0ZU5hbWU6ICd3ZWxjb21lJywKICAgIGlkZW50aXR5QXR0cmlidXRlOiAndXNlck5hbWUnCiAgfTsKICBub2RlU3RhdGUucHV0U2hhcmVkKCdub2RlQ29uZmlnJywgY29uZmlnKTsKICB9IGNhdGNoIChlcnJvcikgewogICAgICBvdXRjb21lID0gJ2Vycm9yJzsKICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2Vycm9yJywgZXJyb3IubWVzc2FnZSk7CiAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"76421cb0-0550-43e7-89f8-51ad1d95d306\",\"name\":\"Set Theme\",\"description\":\"Detect and preserve currently active theme before setting the new theme.\",\"script\":\"LyogU2V0IFRoZW1lCiAqIAogKiBEZXRlY3QgYW5kIHByZXNlcnZlIGN1cnJlbnRseSBhY3RpdmUgdGhlbWUgYmVmb3JlIHNldHRpbmcgdGhlIG5ldyB0aGVtZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqLwooZnVuY3Rpb24gKCkgewogICAgICBvdXRjb21lID0gInRydWUiOwogICAgICAKICAgICAgdmFyIHRoZW1lID0gIkV4cGFuc2VfTUZBIjsKCiAgICAvLyBkbyBub3QgY2hhbmdlLCBtdXN0IGJlIGEgcmFuZG9tIGlkZW50aWZpZXIKICAgIHZhciBhbmNob3IgPSBnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4Jyk7CiAgCiAgICAgIHZhciBzY3JpcHQgPSAiIjsKICAgIHNjcmlwdCArPSAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0aGVtZS1pZC0iK2FuY2hvcisiXCIpLnZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RoZW1lLWlkJyk7IjsKICAgIHNjcmlwdCArPSAiY29uc29sZS5sb2coJ3RoZW1lLWlkPScrZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0aGVtZS1pZC0iK2FuY2hvcisiXCIpLnZhbHVlKTsiOwogICAgICBzY3JpcHQgKz0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibG9naW5CdXR0b25fMFwiKS5jbGljaygpOyI7CgogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlBvbGxpbmdXYWl0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuSGlkZGVuVmFsdWVDYWxsYmFjaywKICAgICAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKICAgICkKICAgIC8vIGRpc2NvdmVyIGFjdGl2ZSB0aGVtZSBmcm9tIFVJCiAgICBpZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKAogICAgICAgICAgICBuZXcgZnIuSGlkZGVuVmFsdWVDYWxsYmFjaygidGhlbWUtaWQtIithbmNob3IsICJmYWxzZSIpLAogICAgICAgICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkKICAgICAgICApLmJ1aWxkKCk7CiAgICB9CiAgICAgIC8vIGdldCBhY3RpdmUgdGhlbWUgZnJvbSBjYWxsYmFjayBhbmQgc2V0IG5ldyB0aGVtZQogICAgICBlbHNlIGlmIChjYWxsYmFja3Muc2l6ZSgpID09PSAyKSB7CiAgICAgICAgLy8gZGlkIHdlIGdldCB0aGUgaWQgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgdGhlbWU/CiAgICAgICAgaWYgKGNhbGxiYWNrcy5nZXQoMCkuZ2V0VmFsdWUoKSAhPT0gInRoZW1lLWlkLSIrYW5jaG9yKSB7CiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUucHV0KCJ0aGVtZUlkIiwgY2FsbGJhY2tzLmdldCgwKS5nZXRWYWx1ZSgpKTsKICAgICAgICB9CiAgICAgICAgLy8gc2V0IG5ldyB0aGVtZQogICAgICAgIHZhciBzdGFnZSA9ICJ0aGVtZUlkPSIrdGhlbWU7CiAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICAgICAgbmV3IGZyLlBvbGxpbmdXYWl0Q2FsbGJhY2soIjEwMCIsICJQbGVhc2Ugd2FpdCAuLi4iKQogICAgICAgICkud2l0aFN0YWdlKHN0YWdlKS5idWlsZCgpOwogICAgfQogICAgICBlbHNlIHsKICAgICAgICAvLyBjb250aW51ZQogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKG91dGNvbWUpLmJ1aWxkKCk7CiAgICB9CgogICAgIC8qCiAgICAgICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAgICAgKiAKICAgICAgKiBFeGFtcGxlOgogICAgICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICAgICAqICd4eHgteHh4JyBwcm9kdWNlcyAnNDMyLTUyMScKICAgICAgKi8KICAgIGZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgICAgIHJldHVybiBmb3JtYXQucmVwbGFjZSgvW3hdL2csIGZ1bmN0aW9uKGMpIHsKICAgICAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpKjEwfDA7CiAgICAgICAgICAgIHZhciB2ID0gcjsKICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTApOwogICAgICAgIH0pOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"d70df7a8-6390-409d-b821-166272a9a9c8\",\"name\":\"Collect Inner Tree Evaluator Config\",\"description\":\"Collect all the configuration items required for the Inner Tree Evaluator to function properly.\",\"script\":\"LyogQ29sbGVjdCBJbm5lciBUcmVlIEV2YWx1YXRvciBDb25maWcKICogCiAqIENvbGxlY3QgYWxsIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIHJlcXVpcmVkIGZvciB0aGUgSW5uZXIgVHJlZSBFdmFsdWF0b3IgdG8gZnVuY3Rpb24gcHJvcGVybHkuCiAqIAogKiBUaGlzIHNjcmlwdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICAgIHZhciBjb25maWcgPSB7CiAgICAgICAgInRyZWUiOiAiTG9naW4iLAogICAgfTsKICAgICAgdmFyIHNjcmlwdCA9ICIiOwogICAgc2NyaXB0ICs9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCgiOwogICAgc2NyaXB0ICs9ICIgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JykiOwogICAgc2NyaXB0ICs9ICIpLmZvckVhY2goIjsKICAgIHNjcmlwdCArPSAiICAgIGZ1bmN0aW9uIChpbnB1dCxpKSB7IjsKICAgIHNjcmlwdCArPSAiICAgICAgICBjb25zb2xlLmxvZygnaW5wdXQgJytpKTsiCiAgICBzY3JpcHQgKz0gIiAgICAgICAgdmFyIGNvbmZpZyA9IEpTT04ucGFyc2UoJyIrSlNPTi5zdHJpbmdpZnkoY29uZmlnKSsiJyk7IjsKICAgIHNjcmlwdCArPSAiICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZyk7IjsKICAgIHNjcmlwdCArPSAiICAgICAgICBpZiAoaW5wdXQudHlwZSA9PT0gJ3RleHQnKSB7IjsKICAgIHNjcmlwdCArPSAiICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGNvbmZpZ1trZXlzW2ldXSk7IjsKICAgIHNjcmlwdCArPSAiICAgICAgICAgICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudCggJ2lucHV0JyAsIHsna2V5JzonRW50ZXInfSApKTsiOwogICAgc2NyaXB0ICs9ICIgICAgICAgIH0iOwogICAgc2NyaXB0ICs9ICIgICAgfSI7CiAgICBzY3JpcHQgKz0gIik7IjsKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suTmFtZUNhbGxiYWNrLAogICAgICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawogICAgKQogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLk5hbWVDYWxsYmFjaygidHJlZSIsIGNvbmZpZy50cmVlKSwKICAgICAgICAgICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkKICAgICAgICApLmJ1aWxkKCk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAgIGNvbmZpZ1tjYWxsYmFja3MuZ2V0KDApLmdldFByb21wdCgpXSA9IGNhbGxiYWNrcy5nZXQoMCkuZ2V0TmFtZSgpOwogICAgICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgibm9kZUNvbmZpZyIsIGNvbmZpZyk7CiAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgIH0KfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"1e8175a2-6114-415f-9b72-9fe15bdf3661\",\"name\":\"Admin_IsFederationEnforcedForUser\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGZyID0gbmV3IEphdmFJbXBvcnRlcigKICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGVzLAogIG9yZy5mb3JnZXJvY2suZ3VpY2UuY29yZQopOwoKd2l0aCAoZnIpIHsKICB2YXIgZW5mb3JjZW1lbnQgPSAnbm9uZSc7CgogIGZ1bmN0aW9uIGlzU3VwZXJBZG1pbigpIHsKICAgIHZhciB1dWlkID0gc2hhcmVkU3RhdGUuZ2V0KCdfaWQnKTsKICAgIHZhciByZWFsbSA9IHNoYXJlZFN0YXRlLmdldCgncmVhbG0nKTsKICAgIHZhciBpZGVudGl0eVByb3ZpZGVyID0gSW5qZWN0b3JIb2xkZXIuZ2V0SW5zdGFuY2UoSWRlbnRpdHlQcm92aWRlcik7CiAgICB2YXIgaWRlbnRpdHkgPSBpZGVudGl0eVByb3ZpZGVyLmdldElkZW50aXR5KHV1aWQsIHJlYWxtKTsKICAgIHZhciBncm91cHMgPSBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ2ZyLWF0dHItZ3JvdXAnKS50b0FycmF5KCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoZ3JvdXBzW2ldID09ICdzdXBlci1hZG1pbnMnKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHRyeSB7CiAgICBzd2l0Y2ggKGVuZm9yY2VtZW50KSB7CiAgICAgIGNhc2UgJ25vbmUnOgogICAgICAgIG91dGNvbWUgPSAnRmFsc2UnOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdhbGwnOgogICAgICAgIG91dGNvbWUgPSAnVHJ1ZSc7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgb3V0Y29tZSA9IGlzU3VwZXJBZG1pbigpID8gJ0ZhbHNlJyA6ICdUcnVlJzsKICAgICAgICBicmVhazsKICAgIH0KICB9IGNhdGNoIChlKSB7CiAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZXRlcm1pbmUgaWYgZmVkZXJhdGlvbiBpcyBlbmZvcmNlZCBmb3IgdXNlcjoge30nLCBlKTsKICAgIG91dGNvbWUgPSAnRXJyb3InOwogIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"8e298710-b55e-4085-a464-88a375a4004b\",\"name\":\"Twitter Profile Normalization\",\"description\":\"Normalizes raw profile data from Twitter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkX3N0ciksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnByb2ZpbGVfaW1hZ2VfdXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnNjcmVlbl9uYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"14f14ad3-f35f-455b-a7ba-d7cd939c6921\",\"name\":\"Choice inner1, inner2\",\"description\":\"Dropdown selector\",\"script\":\"LyogQ2hvaWNlIGlubmVyMSwgaW5uZXIyCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIFJlbmRlciBhIGRyb3Bkb3duIHNlbGVjdG9yCiAqIAogKiBUaGlzIHNjcmlwdCBtdXN0IGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCBub3Qgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwooZnVuY3Rpb24gKCkgewogIG91dGNvbWUgPSAidHJ1ZSI7CiAgdmFyIGNob2ljZXMgPSBbImlubmVyMSIsICJpbm5lcjIiXTsKICAKICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ2hvaWNlQ2FsbGJhY2sKICApCgogIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZChbCiAgICAgIG5ldyBmci5DaG9pY2VDYWxsYmFjaygiU2VsZWN0IGEgam91cm5leSIsIGNob2ljZXMsIDAsIGZhbHNlKQogICAgXSkuYnVpbGQoKTsKICB9IGVsc2UgewogICAgdmFyIGNob2ljZSA9IHBhcnNlSW50KGNhbGxiYWNrcy5nZXQoMCkuZ2V0U2VsZWN0ZWRJbmRleGVzKClbMF0pOwogICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgibm9kZUNvbmZpZyIsIHt0cmVlOiBjaG9pY2VzW2Nob2ljZV19KTsKICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKG91dGNvbWUpLmJ1aWxkKCk7CiAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"90c4eca5-05f0-42f5-b9bf-88b693eabbbd\",\"name\":\"Saml2 IDP Attribute Mapper Script\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgcmV0dXJucyBhIGxpc3Qgb2YgU0FNTCBBdHRyaWJ1dGUgb2JqZWN0cyBmb3IgdGhlIElEUCBmcmFtZXdvcmsgdG8gaW5zZXJ0IGludG8gdGhlIGdlbmVyYXRlZCBBc3NlcnRpb24uCiAqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDEpCiAqICAgICAgICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4KICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgICAgVGhlIGhvc3RlZCBlbnRpdHkgSUQuCiAqIHJlbW90ZUVudGl0eUlkIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgICAgICAgICAgIFRoZSByZW1vdGUgZW50aXR5IElELgogKiByZWFsbSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuU0FNTDJfSURQX0FUVFJJQlVURV9NQVBQRVIKICogaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyIC0gSWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyICgyKQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBbiBJZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgaW5zdGFuY2UgY29udGFpbmluZyBtZXRob2RzIHVzZWQgZm9yIElEUCBhdHRyaWJ1dGUgbWFwcGluZy4KICoKICogVGhyb3dzIFNBTUwyRXhjZXB0aW9uOgogKiAgICAgIC0gb24gZmFpbGluZyB0byBtYXAgdGhlIElEUCBhdHRyaWJ1dGVzLgogKgogKiBSZXR1cm4gLSBhIGxpc3Qgb2YgU0FNTCBBdHRyaWJ1dGUgKDMpIG9iamVjdHMuCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDIpIElkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL0lkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMykgQXR0cmlidXRlIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2Fzc2VydGlvbi9BdHRyaWJ1dGUuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBTQU1MMiBJRFAgQXR0cmlidXRlIE1hcHBlci4KICovCmZ1bmN0aW9uIGdldEF0dHJpYnV0ZXMoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIGNvbS5zdW4uaWRlbnRpdHkuc2FtbDIuY29tbW9uLlNBTUwyRXhjZXB0aW9uCiAgICApOwoKICAgIGNvbnN0IGRlYnVnTWV0aG9kID0gIlNjcmlwdGVkSURQQXR0cmlidXRlTWFwcGVyLmdldEF0dHJpYnV0ZXM6OiAiOwoKICAgIHRyeSB7CgogICAgICAgIGlmICghaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzU2Vzc2lvblZhbGlkKHNlc3Npb24pKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihkZWJ1Z01ldGhvZCArICJJbnZhbGlkIHNlc3Npb24uIik7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgdmFyIGNvbmZpZ01hcCA9IGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5nZXRSZW1vdGVTUENvbmZpZ0F0dHJpYnV0ZU1hcChyZWFsbSwgcmVtb3RlRW50aXR5SWQpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKGRlYnVnTWV0aG9kICsgIlJlbW90ZSBTUCBhdHRyaWJ1dGUgbWFwID0ge30iLCBjb25maWdNYXApOwogICAgICAgIGlmIChjb25maWdNYXAgPT0gbnVsbCB8fCBjb25maWdNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIGNvbmZpZ01hcCA9IGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5nZXRIb3N0ZWRJRFBDb25maWdBdHRyaWJ1dGVNYXAocmVhbG0sIGhvc3RlZEVudGl0eUlkKTsKICAgICAgICAgICAgaWYgKGNvbmZpZ01hcCA9PSBudWxsIHx8IGNvbmZpZ01hcC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKGRlYnVnTWV0aG9kICsgIkNvbmZpZ3VyYXRpb24gbWFwIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoZGVidWdNZXRob2QgKyAiSG9zdGVkIElEUCBhdHRyaWJ1dGUgbWFwID0ge30iLCBjb25maWdNYXApOwogICAgICAgIH0KCiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBuZXcgamF2YS51dGlsLkFycmF5TGlzdCgpOwogICAgICAgIHZhciBzdHJpbmdWYWx1ZU1hcCA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgIHZhciBiaW5hcnlWYWx1ZU1hcDsKICAgICAgICB2YXIgbG9jYWxBdHRyaWJ1dGU7CgogICAgICAgIC8vIERvbid0IHRyeSB0byByZWFkIHRoZSBhdHRyaWJ1dGVzIGZyb20gdGhlIGRhdGFzdG9yZSBpZiB0aGUgaWdub3JlZCBwcm9maWxlIGlzIGVuYWJsZWQgaW4gdGhpcyByZWFsbS4KICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc0lnbm9yZWRQcm9maWxlKHNlc3Npb24sIHJlYWxtKSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgLy8gUmVzb2x2ZSBhdHRyaWJ1dGVzIHRvIGJlIHJlYWQgZnJvbSB0aGUgZGF0YXN0b3JlLgogICAgICAgICAgICAgICAgdmFyIHN0cmluZ0F0dHJpYnV0ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKICAgICAgICAgICAgICAgIHZhciBiaW5hcnlBdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KCk7CiAgICAgICAgICAgICAgICB2YXIga2V5SXRlciA9IGNvbmZpZ01hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwogICAgICAgICAgICAgICAgd2hpbGUgKGtleUl0ZXIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleUl0ZXIubmV4dCgpOwogICAgICAgICAgICAgICAgICAgIGxvY2FsQXR0cmlidXRlID0gY29uZmlnTWFwLmdldChrZXkpOwogICAgICAgICAgICAgICAgICAgIGlmICghaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzU3RhdGljQXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzQmluYXJ5QXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGl0IHRvIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgdG8gdHJlYXQgYXMgYmVpbmcgYmluYXJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlBdHRyaWJ1dGVzLmFkZChpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlQmluYXJ5QXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nQXR0cmlidXRlcy5hZGQobG9jYWxBdHRyaWJ1dGUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghc3RyaW5nQXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBzdHJpbmdWYWx1ZU1hcCA9IGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5nZXRBdHRyaWJ1dGVzKHNlc3Npb24sIHN0cmluZ0F0dHJpYnV0ZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFiaW5hcnlBdHRyaWJ1dGVzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgIGJpbmFyeVZhbHVlTWFwID0gaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldEJpbmFyeUF0dHJpYnV0ZXMoc2Vzc2lvbiwgYmluYXJ5QXR0cmlidXRlcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoZGVidWdNZXRob2QgKyAiRXJyb3IgYWNjZXNzaW5nIHRoZSBkYXRhc3RvcmUuICIgKyBlcnJvcik7CiAgICAgICAgICAgICAgICAvL2NvbnRpbnVlIHRvIGNoZWNrIGluIHNzb3Rva2VuLgogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIga2V5SXRlciA9IGNvbmZpZ01hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwogICAgICAgIHdoaWxlIChrZXlJdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICB2YXIga2V5ID0ga2V5SXRlci5uZXh0KCkKICAgICAgICAgICAgdmFyIG5hbWVGb3JtYXQgPSBudWxsOwogICAgICAgICAgICB2YXIgc2FtbEF0dHJpYnV0ZSA9IGtleTsKICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBjb25maWdNYXAuZ2V0KGtleSk7CiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHNhbWxBdHRyaWJ1dGUgaGFzIGZvcm1hdCBuYW1lRm9ybWF0fHNhbWxBdHRyaWJ1dGUKICAgICAgICAgICAgdmFyIHNhbWxBdHRyaWJ1dGVzID0gU3RyaW5nKG5ldyBqYXZhLmxhbmcuU3RyaW5nKHNhbWxBdHRyaWJ1dGUpKTsKICAgICAgICAgICAgdmFyIHRva2VucyA9IHNhbWxBdHRyaWJ1dGVzLnNwbGl0KCd8Jyk7CgogICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgICAgIG5hbWVGb3JtYXQgPSB0b2tlbnNbMF07CiAgICAgICAgICAgICAgICBzYW1sQXR0cmlidXRlID0gdG9rZW5zWzFdOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgYXR0cmlidXRlVmFsdWVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KCk7CiAgICAgICAgICAgIGlmIChpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaXNTdGF0aWNBdHRyaWJ1dGUobG9jYWxBdHRyaWJ1dGUpKSB7CiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHN0YXRpYyBmbGFnIGJlZm9yZSB1c2luZyBpdCBhcyB0aGUgc3RhdGljIHZhbHVlCiAgICAgICAgICAgICAgICBsb2NhbEF0dHJpYnV0ZSA9IGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5yZW1vdmVTdGF0aWNBdHRyaWJ1dGVGbGFnKGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldChbbG9jYWxBdHRyaWJ1dGVdKTsKICAgICAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKGRlYnVnTWV0aG9kICsgIkFkZGluZyBzdGF0aWMgdmFsdWUge30gZm9yIGF0dHJpYnV0ZSBuYW1lZCB7fSIsIGxvY2FsQXR0cmlidXRlLCBzYW1sQXR0cmlidXRlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaXNCaW5hcnlBdHRyaWJ1dGUobG9jYWxBdHRyaWJ1dGUpKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBmbGFnIGFzIG5vdCB1c2VkIGZvciBsb29rdXAKICAgICAgICAgICAgICAgICAgICBsb2NhbEF0dHJpYnV0ZSA9IGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5yZW1vdmVCaW5hcnlBdHRyaWJ1dGVGbGFnKGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0QmluYXJ5QXR0cmlidXRlVmFsdWVzKHNhbWxBdHRyaWJ1dGUsIGxvY2FsQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlWYWx1ZU1hcCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmdWYWx1ZU1hcCAhPSBudWxsICYmICFzdHJpbmdWYWx1ZU1hcC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzID0gc3RyaW5nVmFsdWVNYXAuZ2V0KGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJ7fSBzdHJpbmcgdmFsdWUgbWFwIHdhcyBlbXB0eSBvciBudWxsLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHRyeSB0byBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHVzZXJzIHNzb1Rva2VuCiAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWVzID09IG51bGwgfHwgYXR0cmlidXRlVmFsdWVzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKGRlYnVnTWV0aG9kICsgIlVzZXIgcHJvZmlsZSBkb2VzIG5vdCBoYXZlIHZhbHVlIGZvciB7fSwgY2hlY2tpbmcgU1NPVG9rZW4uIiwgbG9jYWxBdHRyaWJ1dGUpOwogICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldChpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0UHJvcGVydHlTZXQoc2Vzc2lvbiwgbG9jYWxBdHRyaWJ1dGUpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlcyA9PSBudWxsIHx8IGF0dHJpYnV0ZVZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKGRlYnVnTWV0aG9kICsgInt9IG5vdCBmb3VuZCBpbiB1c2VyIHByb2ZpbGUgb3IgU1NPVG9rZW4uIiwgbG9jYWxBdHRyaWJ1dGUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYXR0cmlidXRlcy5hZGQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmNyZWF0ZVNBTUxBdHRyaWJ1dGUoc2FtbEF0dHJpYnV0ZSwgbmFtZUZvcm1hdCwgYXR0cmlidXRlVmFsdWVzKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzOwoKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKGRlYnVnTWV0aG9kICsgIkVycm9yIG1hcHBpbmcgSURQIGF0dHJpYnV0ZXMuICIgKyBlcnJvcik7CiAgICAgICAgdGhyb3cgbmV3IGZySmF2YS5TQU1MMkV4Y2VwdGlvbihlcnJvcik7CiAgICB9Cn0KCmdldEF0dHJpYnV0ZXMoKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ATTRIBUTE_MAPPER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"a7a78773-445b-4eca-bb93-409e86bced81\",\"name\":\"GitHub Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUubG9naW4pKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"1f389a3d-21cf-417c-a6d3-42ea620071f0\",\"name\":\"ForgeRock Internal: OIDC Claims Script\",\"description\":\"Internal OIDC Claims script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"6325cf19-a49b-471e-8d26-7e4df76df0e2\",\"name\":\"Okta Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJPa3RhIHJhd1Byb2ZpbGU6ICIrcmF3UHJvZmlsZSkKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5wcmVmZXJyZWRfdXNlcm5hbWUpKSk=\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"e1db8a0a-0329-4962-a5bf-ecffaca376ae\",\"name\":\"Alpha endUserUIClient OIDC Claims Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"5dbd53c6-67ff-4a43-84c3-90c5cf5da35a\",\"name\":\"OTP Valid\",\"description\":\"Return TextOutputCallback indicating the provided OTP was valid.\",\"script\":\"LyogT1RQIFZhbGlkCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIFJldHVybiBUZXh0T3V0cHV0Q2FsbGJhY2sgaW5kaWNhdGluZyB0aGUgcHJvdmlkZWQgT1RQIHdhcyB2YWxpZC4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8Kb3V0Y29tZSA9ICJ0cnVlIjsKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjawopCmlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgICJWQUxJRCIKICAgICAgICApCiAgICApLmJ1aWxkKCkKfQplbHNlIHsKICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbyhvdXRjb21lKS5idWlsZCgpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"d2a41d85-d33a-42d9-a7dd-50dfbc9fa7c0\",\"name\":\"Onfido-CheckApplicant\",\"description\":\"Check Applicant\",\"script\":\"bG9nZ2VyLmVycm9yKCJPbmZpZG8tQ2hlY2tBcHBsaWNhbnQ6IFN0YXJ0Iik7CgovKgogKiAhISEgRXh0ZW5kIHlvdXIgYXV0aGVudGljYXRpb24gc2Vzc2lvbiB0aW1lIHNvIHlvdXIgaWRlbnRpdHkgcHJvb2ZpbmcgZmxvd3MgZG9uJ3QgdGltZSBvdXQgISEhCiAqCiAqIEF1dGhlbnRpY2F0aW9uID4gU2V0dGluZ3MgPiBUcmVlcyA+IE1heCBEdXJhdGlvbiAoTWludXRlcykKICoKICogU2V0IHRvIDE1IG1pbnV0ZXMuCiAqCiAqLwoKLyoKICogQkVHSU4gU0NSSVBUIENPTkZJR1VSQVRJT04KICoKICogUkVQTEFDRSBXSVRIIFlPVVIgT1dOIE9ORklETyBBUEkgVE9LRU4KICovCi8vdmFyIE9ORklET19BUElfVE9LRU4gPSAiYXBpX2xpdmUuU3RVZGZ4ZGlDRmIuWXJ6YmFkeEJfUjItcUc1bEZVYzNsV2c2SkFjM0NucS0iCnZhciBPTkZJRE9fQVBJX1RPS0VOID0gImFwaV9saXZlLkg1eXNSdXNBb21ZLm5iYmtpbW9XYzkxY0RaQVdKWmtKdDBUa3Fkam0xUmpyIjsKLyoKICogRU5EIFNDUklQVCBDT05GSUdVUkFUSU9OCiAqLwoKdmFyIHJlcXVlc3RCb2R5SnNvbiA9IHsKICAgICJhcHBsaWNhbnRfaWQiOiBTdHJpbmcoc2hhcmVkU3RhdGUuZ2V0KCJvbmZpZG9BcHBsaWNhbnRJRCIpKSwKICAgICJyZXBvcnRfbmFtZXMiOiBbImRvY3VtZW50IiwgImZhY2lhbF9zaW1pbGFyaXR5X3Bob3RvIl0KfQovLyB2YXIgcmVxdWVzdEJvZHlKc29uID0gewovLyAgICAgImFwcGxpY2FudF9pZCI6IFN0cmluZyhzaGFyZWRTdGF0ZS5nZXQoIm9uZmlkb0FwcGxpY2FudElEIikpLAovLyAgICAgInJlcG9ydF9uYW1lcyI6IFsiZG9jdW1lbnQiXQovLyB9Cgp2YXIgZmFpbHVyZSA9IHRydWUKCnZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0CikKCnZhciByZXF1ZXN0ID0gbmV3IGZyLlJlcXVlc3QoKQpyZXF1ZXN0LnNldFVyaSgiaHR0cHM6Ly9hcGkub25maWRvLmNvbS92My9jaGVja3MiKQpyZXF1ZXN0LnNldE1ldGhvZCgiUE9TVCIpCnJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgiKQpyZXF1ZXN0LmdldEhlYWRlcnMoKS5hZGQoIkF1dGhvcml6YXRpb24iLCAiVG9rZW4gdG9rZW49IiArIE9ORklET19BUElfVE9LRU4pCnJlcXVlc3QuZ2V0RW50aXR5KCkuc2V0U3RyaW5nKEpTT04uc3RyaW5naWZ5KHJlcXVlc3RCb2R5SnNvbikpCgp2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCkKbG9nZ2VyLmVycm9yKCJPbmZpZG8tQ2hlY2tBcHBsaWNhbnQ6IEluaXRpYXRlIGNoZWNrcyByZXNwb25zZTogIi5jb25jYXQocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpKTsKCmlmIChyZXNwb25zZS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkgPT09IDIwMCkgewogICAgdmFyIGlkID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSkuaWQKICAgIGZhaWx1cmUgPSAhaWQKICAgIGlmICghZmFpbHVyZSkgc2hhcmVkU3RhdGUucHV0KCJvbmZpZG9BdXRoVG9rZW4iLCBpZCk7Cn0gZWxzZSB7CiAgICBmYWlsdXJlID0gdHJ1ZQp9CgpvdXRjb21lID0gZmFpbHVyZSA/ICJmYWxzZSIgOiAidHJ1ZSI7CmxvZ2dlci5lcnJvcigiT25maWRvLUNoZWNrQXBwbGljYW50OiBFbmQgKG91dGNvbWU9Ii5jb25jYXQob3V0Y29tZSkuY29uY2F0KCIpIikpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"312e951f-70c5-49d2-a9ae-93aef909d5df\",\"name\":\"Salesforce Profile Normalization\",\"description\":\"Normalizes raw profile data from Salesforce\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZ2l2ZW5fbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmZhbWlseV9uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnBpY3R1cmUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJsb2NhbGUiLCByYXdQcm9maWxlLnpvbmVJbmZvKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"6b3cfd48-62d3-48ff-a96f-fe8f3a22ab30\",\"name\":\"Amazon Profile Normalization\",\"description\":\"Normalizes raw profile data from Amazon\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"740cf6fa-a173-4e9d-b17c-44758e9b19ec\",\"name\":\"CP-ITE-static-inner2\",\"description\":\"CP-InnerTreeEvaluator-static-inner2\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoqCiAqIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGEgc2ltcGxpZmllZCB0ZW1wbGF0ZSBmb3IgdW5kZXJzdGFuZGluZyBob3cgdG8gYnVpbGQKICogdXAgYSBjb25maWcgTWFwIG9iamVjdCB3aXRoIGN1c3RvbSB2YWx1ZXMuIFRoZSBDb25maWcgUHJvdmlkZXIgTm9kZSB3aWxsIHRoZW4KICogcHJvdmlkZSB0aGlzIGNvbmZpZyBNYXAgdG8gdGhlIGRlc2lyZWQgbm9kZSB0eXBlLiBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgTWFwCiAqIHlvdSBidWlsZCBoZXJlIGlzIG5hbWVkICdjb25maWcnLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICoKICogbm9kZVN0YXRlIC0gTm9kZSBTdGF0ZSAoMSkKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGlzIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdmFsdWVzIHN0b3JlZCBpbiB0aGUgbm9kZSBzdGF0ZS4KICoKICogaWRSZXBvc2l0b3J5IC0gUHJvZmlsZSBEYXRhICgyKQogKiAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGEgcmVwb3NpdG9yeSB0byByZXRyaWV2ZSB1c2VyIGluZm9ybWF0aW9uLgogKgogKiBzZWNyZXRzIC0gQ3JlZGVudGlhbHMgYW5kIFNlY3JldHMgKDMpCiAqICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgYW4gaW50ZXJmYWNlIHRvIGFjY2VzcyB0aGUgU2VjcmV0cyBBUEkgZnJvbSBhIHNjcmlwdGluZyBjb250ZXh0LgogKgogKiByZXF1ZXN0SGVhZGVycyAoNCkgLSBNYXAgKDUpCiAqICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgYW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyBmb3IgYWNjZXNzaW5nIGhlYWRlcnMgaW4gdGhlIGxvZ2luIHJlcXVlc3QuCiAqCiAqIGxvZ2dlciAtIERlYnVnIExvZ2dpbmcgKDYpCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlLgogKgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDcpCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgSFRUUCBjbGllbnQgdGhhdCBjYW4gYmUgdXNlZCB0byBtYWtlIGV4dGVybmFsIEhUVFAgcmVxdWVzdHMuCiAqCiAqIHJlYWxtIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIG5hbWUgb2YgdGhlIHJlYWxtIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0aW5nIHRvLgogKgogKiBleGlzdGluZ1Nlc3Npb24gLSBNYXA8U3RyaW5nLCBTdHJpbmc+ICg1KQogKiAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4gVGhlIHJldHVybmVkIG1hcCBmcm9tCiAqICAgICAgICAgIFNTT1Rva2VuLmdldFByb3BlcnRpZXMoKSAoOCkKICoKICogcmVxdWVzdFBhcmFtZXRlcnMgLSBNYXAgKDUpCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFyYW1ldGVycy4KICoKICoKICogT3V0cHV0czoKICoKICogY29uZmlnIC0gTWFwICg1KQogKiAgICAgICAgICAgRGVmaW5lIGFuZCBmaWxsIGEgTWFwIG9iamVjdCBuYW1lZCAnY29uZmlnJyB3aXRoIGN1c3RvbSB2YWx1ZXMsIHRoaXMgd2lsbCBkZWZpbmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZQogKiAgICAgICAgICAgYXNzb2NpYXRlZCBub2RlIHNlbGVjdGVkIGluIHRoZSBDb25maWdQcm92aWRlck5vZGUuCiAqCiAqIFJlZmVyZW5jZToKICogKDEpIE5vZGUgU3RhdGUgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvaWRjbG91ZC1hbS9sYXRlc3QvYXV0aGVudGljYXRpb24tZ3VpZGUvc2NyaXB0aW5nLWFwaS1ub2RlLmh0bWwjc2NyaXB0aW5nLWFwaS1ub2RlLW5vZGVTdGF0ZQogKiAoMikgUHJvZmlsZSBEYXRhIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMS9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtaWQtcmVwbwogKiAoMykgQ3JlZGVudGlhbHMgYW5kIFNlY3JldHMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4xL2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktYXV0aG4tc2VjcmV0cwogKiAoNCkgUmVxdWVzdCBIZWFkZXJzIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXV0aGVudGljYXRpb24tZ3VpZGUvc2NyaXB0aW5nLWFwaS1ub2RlLmh0bWwjc2NyaXB0aW5nLWFwaS1ub2RlLXJlcXVlc3RIZWFkZXJzLgogKiAoNSkgTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9NYXAuaHRtbAogKiAoNikgRGVidWcgTG9nZ2luZyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICg3KSBIVFRQIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKiAoOCkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKi8KCmNvbmZpZyA9IHsKICB0cmVlOiAnaW5uZXIyJwp9Ow==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"CONFIG_PROVIDER_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"4ee5b182-1b09-45cc-97a9-0e609f0a2915\",\"name\":\"Resend OTP Option\",\"description\":\"Resend OTP Option\",\"script\":\"LyogQ1Jlc2VuZCBPVFAgT3B0aW9uCiAqCiAqIEF1dGhvcjogam9uLmtuaWdodEBmb3JnZXJvY2suY29tLCB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ29sbGVjdCBPVFAgYW5kIHZhbGlkYXRlIHRoZSBjb2xsZWN0ZWQgT1RQLiBBbHNvIG9mZmVyIGEgcmVzZW5kIG9wdGlvbi4KICogUmV0dXJuICJ0cnVlIiBpZiBjb2xsZWN0ZWQgT1RQIGlzIHZhbGlkLCAiZmFsc2UiIGlmIGNvbGxlY3RlZCBPVFAgaXMgaW52YWxpZCwgCiAqIGFuZCByZXNlbmQgaWYgdGhlIHVzZXIgc2VsZWN0ZWQgdGhlIHJlc2VuZCBidXR0b24uCiAqIAogKiBUaGlzIHNjcmlwdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICogLSBmYWxzZQogKiAtIHJlc2VuZAogKi8KKGZ1bmN0aW9uICgpIHsKICAvLyBob3cgbG9uZyB1bnRpbCB0aGUgInJlc2VuZCIgYnV0dG9uIGJlY29tZXMgZW5hYmxlZC4KICBERUxBWT0yMDsKICAKICAvLyBob3cgbG9uZyAoaW4gc2Vjb25kcykgc2hvdWxkIHRoZSBPVFAgYmUgYWNjZXB0ZWQgYXMgdmFsaWQKICBPVFBfVFRMID0gMzA7CgogIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suTmFtZUNhbGxiYWNrLAogICAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKICApCgogIGZ1bmN0aW9uIGNyZWF0ZVNjcmlwdCgpIHsKICAgICAgcmV0dXJuIFN0cmluZygiIFxuXAogICAgICAgICAgdmFyIENPVU5UID0gIiArIERFTEFZICsgIjsgXG5cCiAgICAgICAgICBmdW5jdGlvbiBnbyhvYnMpIHsgXG5cCiAgICAgICAgICAgICAgY29uc3QgcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtdnYtYXM9XCJPbmUgVGltZSBQYXNzY29kZVwiXScpWzBdOyBcblwKICAgICAgICAgICAgICBpZiAocCkgeyBcblwKICAgICAgICAgICAgICAgICAgdmFyIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsgXG5cCiAgICAgICAgICAgICAgICAgIGIuaWQgPSAncmVzZW5kQnV0dG9uJzsgXG5cCiAgICAgICAgICAgICAgICAgIGIuY2xhc3NMaXN0LmFkZChcImJ0blwiLCBcIm10LTNcIiwgXCJidG4tc2Vjb25kYXJ5XCIsIFwiYnRuLXNtXCIpOyBcblwKICAgICAgICAgICAgICAgICAgYi5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IHAudmFsdWU9J19fX1JFU0VORF9fXyc7IHAuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0JykpOyB9OyBcblwKICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSAnUmVzZW5kIENvZGUgLi4uICcgKyBDT1VOVCArICdzJzsgXG5cCiAgICAgICAgICAgICAgICAgIGIuZGlzYWJsZWQgPSB0cnVlOyBcblwKICAgICAgICAgICAgICAgICAgcC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShiLCBwLm5leHRTaWJsaW5nKTsgXG5cCiAgICAgICAgICAgICAgICAgIHZhciB0ID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7IFxuXAogICAgICAgICAgICAgICAgICAgICAgaWYgKENPVU5UID09IDEpIHsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0KTsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgICAgYi5kaXNhYmxlZCA9IGZhbHNlOyBcblwKICAgICAgICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9ICdSZXNlbmQgQ29kZSc7IFxuXAogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09VTlQtLTsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSAnUmVzZW5kIENvZGUgLi4uICcgKyBDT1VOVCArICdzJzsgXG5cCiAgICAgICAgICAgICAgICAgICAgICB9IFxuXAogICAgICAgICAgICAgICAgICB9LCAxMDAwICk7IFxuXAogICAgICAgICAgICAgICAgICBpZiAob2JzKSBvYnMuZGlzY29ubmVjdCgpOyBcblwKICAgICAgICAgICAgICAgICAgcmV0dXJuOyBcblwKICAgICAgICAgICAgICB9IFxuXAogICAgICAgICAgfSBcblwKICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtkYXRhLXZ2LWFzPVwiT25lIFRpbWUgUGFzc2NvZGVcIl0nKVswXSkgZ28oKTsgXG5cCiAgICAgICAgICBlbHNlIHsgXG5cCiAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zLCBvYnMpID0+IHsgZ28ob2JzKTsgfSk7IFxuXAogICAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pOyBcblwKICAgICAgICAgIH0gXG5cCiAgICAgICIpOwogIH0KCiAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKGNyZWF0ZVNjcmlwdCgpKSwKICAgICAgICAgIG5ldyBmci5OYW1lQ2FsbGJhY2soIk9uZSBUaW1lIFBhc3Njb2RlIikKICAgICAgKS5idWlsZCgpCiAgfSBlbHNlIHsKICAgICAgdmFyIG90cFRpbWVzdGFtcCA9IE1hdGguZmxvb3IobmV3IGphdmEudXRpbC5EYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCk7CiAgICAgIHZhciBvdHAgPSBjYWxsYmFja3MuZ2V0KDEpLmdldE5hbWUoKTsKICAgICAgaWYgKG90cCA9PT0gIl9fX1JFU0VORF9fXyIpIHsKICAgICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKCJyZXNlbmQiKS5idWlsZCgpOwogICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIHNlbnRPdHAgPSBzaGFyZWRTdGF0ZS5nZXQoIm9uZVRpbWVQYXNzd29yZCIpOwogICAgICAgICAgdmFyIHNlbnRPdHBUaW1lc3RhbXAgPSBzaGFyZWRTdGF0ZS5nZXQoIm9uZVRpbWVQYXNzd29yZFRpbWVzdGFtcCIpOwogICAgICAgICAgaWYgKHNlbnRPdHAgPT0gb3RwICYmIG90cFRpbWVzdGFtcCAtIE9UUF9UVEwgPj0gc2VudE90cFRpbWVzdGFtcCkgewogICAgICAgICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKCJ0cnVlIikuYnVpbGQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKCJmYWxzZSIpLmJ1aWxkKCk7CiAgICAgICAgICB9CiAgICAgIH0KICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"878816b3-2bb4-4b43-8001-10f926ddefff\",\"name\":\"Impersonate: Switch Actors And Become Impersonatee\",\"description\":\"Switch Actors And Become Impersonatee.\",\"script\":\"LyogSW1wZXJzb25hdGU6IFN3aXRjaCBBY3RvcnMgQW5kIEJlY29tZSBJbXBlcnNvbmF0ZWUKICoKICogU3dpdGNoIEFjdG9ycyBBbmQgQmVjb21lIEltcGVyc29uYXRlZS4KICoKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICogLSBmYWxzZQogKi8KCihmdW5jdGlvbiAoKSB7CiAgICBsb2dnZXIud2FybmluZygiSW1wZXJzb25hdGU6IFN3aXRjaCBBY3RvcnM6IHN0YXJ0Iik7CiAgICBvdXRjb21lID0gImZhbHNlIjsKCiAgICB2YXIgaW1wZXJzb25hdGVlID0gc2hhcmVkU3RhdGUuZ2V0KCJpbXBlcnNvbmF0ZWUiKTsKICAgIHZhciBpbXBlcnNvbmF0b3IgPSBzaGFyZWRTdGF0ZS5nZXQoImltcGVyc29uYXRvciIpOwogICAgaWYgKGltcGVyc29uYXRlZSAmJiBpbXBlcnNvbmF0b3IpIHsKICAgICAgICBvdXRjb21lID0gInRydWUiOwogICAgICAgIHNoYXJlZFN0YXRlLnB1dCgidXNlcm5hbWUiLCBpbXBlcnNvbmF0ZWUpOwogICAgICAgIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgidXNlck5hbWUiLCBpbXBlcnNvbmF0ZWUpOwogICAgfQoKICAgIGxvZ2dlci53YXJuaW5nKCJJbXBlcnNvbmF0ZTogU3dpdGNoIEFjdG9yczogZmluaXNoIFtvdXRjb21lPSIuY29uY2F0KG91dGNvbWUpLmNvbmNhdCgiXSIpKTsKICAKICAgIC8qCiAgICAgKiBTdG9yZSBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgewogICAgICAgICB2YXIgc3RvcmFnZSA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwogICAgICAgIGlmIChzdG9yYWdlICYmIHZhbHVlKSB7CiAgICAgICAgICAgIGlmIChzdG9yYWdlLnB1dCkgewogICAgICAgICAgICAgICAgICBzdG9yYWdlLnB1dChuYW1lLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzdG9yYWdlW25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAodmFsdWUpIHsKICAgICAgICAgICAgc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgSlNPTi5wYXJzZSgie1wiIituYW1lKyJcIjpcIiIrdmFsdWUrIlwifSIpKTsKICAgICAgICB9CiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"ce6fbbcf-5d9a-471b-bcc1-448758a6374a\",\"name\":\"MobileOTP: Validate OTP In Profile Attribute\",\"description\":\"Validate OTP in profile attribute\",\"script\":\"LyoKICogVmFsaWRhdGUgT1RQIGluIHVzZXIgcHJvZmlsZSBhdHRyaWJ1dGUgYWdhaW5zdCBPVFAgaW4gc2hhcmVkIHN0YXRlCiAqLwpvdXRjb21lID0gImZhbHNlIjsKdmFyIE9UUF9MRU5HVEggPSA4OwoKaWYgKHNoYXJlZFN0YXRlLmdldCgibW9iaWxlT1RQIikpIHsKICAJdmFyIHByb2ZpbGVPVFAgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCAiZnItYXR0ci1pbnQ1Iik7Cn0KCmZ1bmN0aW9uIGNoZWNrUGFzc3dvcmQocHJvZmlsZU9UUCwgcGFzc3dvcmQpIHsKCXZhciBvbmVUaW1lUGFzc3dvcmQgPSBwcm9maWxlT1RQLnN1YnN0cmluZygwLDcpOwoJdmFyIHBhc3N3b3JkVGltZXN0YW1wID0gTnVtYmVyKHByb2ZpbGVPVFAuc3Vic3RyaW5nKDgpKTsKCgl2YXIgcGFzc3dvcmRNYXRjaGVzID0gb25lVGltZVBhc3N3b3JkCiAgICAgICAgJiYgKG9uZVRpbWVQYXNzd29yZCA9PSBwYXNzd29yZCkKICAgICAgICAmJiBwYXNzd29yZFRpbWVzdGFtcCAhPSBudWxsCiAgICAgICAgJiYgaXNXaXRoaW5FeHBpcnlUaW1lKHBhc3N3b3JkVGltZXN0YW1wKTsKCXJldHVybiBwYXNzd29yZE1hdGNoZXM7Cn0KCmZ1bmN0aW9uIGlzV2l0aGluRXhwaXJ5VGltZShwYXNzd29yZFRpbWVzdGFtcCkgewogICAgICAgIEluc3RhbnQgcHJldmlvdXMgPSBJbnN0YW50Lm9mRXBvY2hTZWNvbmQocGFzc3dvcmRUaW1lc3RhbXApOwogICAgICAgIER1cmF0aW9uIHBhc3N3b3JkRXhwaXJ5ID0gRHVyYXRpb24ub2ZNaW51dGVzKGNvbmZpZy5wYXNzd29yZEV4cGlyeVRpbWUoKSk7CiAgICAgICAgSW5zdGFudCBub3cgPSBUaW1lLmdldENsb2NrKCkuaW5zdGFudCgpOwogICAgICAgIGxvZ2dlci5kZWJ1ZygicHJldmlvdXMge30gXG4gcGFzc3dvcmRFeHBpcnkge30gXG4gbm93IHt9IiwgcHJldmlvdXMsIHBhc3N3b3JkRXhwaXJ5LCBub3cpOwogICAgICAgIGJvb2xlYW4gd2l0aGluRXhwaXJ5VGltZSA9IER1cmF0aW9uLmJldHdlZW4ocHJldmlvdXMucGx1cyhwYXNzd29yZEV4cGlyeSksIG5vdykuaXNOZWdhdGl2ZSgpOwogICAgICAgIGxvZ2dlci5kZWJ1Zygid2l0aGluRXhwaXJ5VGltZSB7fSIsIHdpdGhpbkV4cGlyeVRpbWUpOwogICAgICAgIHJldHVybiB3aXRoaW5FeHBpcnlUaW1lOwp9CgovKgogICAgcHJpdmF0ZSBBY3Rpb24gY2hlY2tQYXNzd29yZChUcmVlQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgcGFzc3dvcmQpIHsKICAgICAgICBKc29uVmFsdWUgb25lVGltZVBhc3N3b3JkID0gY29udGV4dC5nZXRTdGF0ZShPTkVfVElNRV9QQVNTV09SRCk7CiAgICAgICAgSnNvblZhbHVlIHBhc3N3b3JkVGltZXN0YW1wID0gY29udGV4dC5nZXRTdGF0ZShPTkVfVElNRV9QQVNTV09SRF9USU1FU1RBTVApOwoKICAgICAgICBib29sZWFuIHBhc3N3b3JkTWF0Y2hlcyA9IG9uZVRpbWVQYXNzd29yZCAhPSBudWxsICYmIG9uZVRpbWVQYXNzd29yZC5pc1N0cmluZygpCiAgICAgICAgICAgICAgICAmJiBvbmVUaW1lUGFzc3dvcmQuYXNTdHJpbmcoKS5lcXVhbHMocGFzc3dvcmQpCiAgICAgICAgICAgICAgICAmJiBwYXNzd29yZFRpbWVzdGFtcCAhPSBudWxsICYmIHBhc3N3b3JkVGltZXN0YW1wLmlzTnVtYmVyKCkKICAgICAgICAgICAgICAgICYmIGlzV2l0aGluRXhwaXJ5VGltZShwYXNzd29yZFRpbWVzdGFtcC5hc0xvbmcoKSk7CiAgICAgICAgbG9nZ2VyLmRlYnVnKCJwYXNzd29yZE1hdGNoZXMge30iLCBwYXNzd29yZE1hdGNoZXMpOwogICAgICAgIHJldHVybiBnb1RvKHBhc3N3b3JkTWF0Y2hlcykuYnVpbGQoKTsKICAgIH0KCiAgICBwcml2YXRlIGJvb2xlYW4gaXNXaXRoaW5FeHBpcnlUaW1lKGxvbmcgcGFzc3dvcmRUaW1lc3RhbXApIHsKICAgICAgICBJbnN0YW50IHByZXZpb3VzID0gSW5zdGFudC5vZkVwb2NoU2Vjb25kKHBhc3N3b3JkVGltZXN0YW1wKTsKICAgICAgICBEdXJhdGlvbiBwYXNzd29yZEV4cGlyeSA9IER1cmF0aW9uLm9mTWludXRlcyhjb25maWcucGFzc3dvcmRFeHBpcnlUaW1lKCkpOwogICAgICAgIEluc3RhbnQgbm93ID0gVGltZS5nZXRDbG9jaygpLmluc3RhbnQoKTsKICAgICAgICBsb2dnZXIuZGVidWcoInByZXZpb3VzIHt9IFxuIHBhc3N3b3JkRXhwaXJ5IHt9IFxuIG5vdyB7fSIsIHByZXZpb3VzLCBwYXNzd29yZEV4cGlyeSwgbm93KTsKICAgICAgICBib29sZWFuIHdpdGhpbkV4cGlyeVRpbWUgPSBEdXJhdGlvbi5iZXR3ZWVuKHByZXZpb3VzLnBsdXMocGFzc3dvcmRFeHBpcnkpLCBub3cpLmlzTmVnYXRpdmUoKTsKICAgICAgICBsb2dnZXIuZGVidWcoIndpdGhpbkV4cGlyeVRpbWUge30iLCB3aXRoaW5FeHBpcnlUaW1lKTsKICAgICAgICByZXR1cm4gd2l0aGluRXhwaXJ5VGltZTsKICAgIH0KICAgICov\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"7e3d7067-d50f-4674-8c76-a3e13a810c33\",\"name\":\"Scripted Module - Server Side\",\"description\":\"Default global script for server side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAxNyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgp2YXIgU1RBUlRfVElNRSA9IDk7ICAvLyA5YW0KdmFyIEVORF9USU1FICAgPSAxNzsgLy8gNXBtCnZhciBsb25naXR1ZGUsIGxhdGl0dWRlOwp2YXIgbG9jYWxUaW1lOwoKbG9nZ2VyLm1lc3NhZ2UoIlN0YXJ0aW5nIHNjcmlwdGVkIGF1dGhlbnRpY2F0aW9uIik7CmxvZ2dlci5tZXNzYWdlKCJVc2VyOiAiICsgdXNlcm5hbWUpOwoKdmFyIHVzZXJQb3N0YWxBZGRyZXNzID0gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKTsKbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgYWRkcmVzczogIiArIHVzZXJQb3N0YWxBZGRyZXNzKTsKCmdldExvbmdpdHVkZUxhdGl0dWRlRnJvbVVzZXJQb3N0YWxBZGRyZXNzKCk7CmdldExvY2FsVGltZSgpOwoKbG9nZ2VyLm1lc3NhZ2UoIkN1cnJlbnQgdGltZSBhdCB0aGUgdXNlcnMgbG9jYXRpb246ICIgKyBsb2NhbFRpbWUuZ2V0SG91cnMoKSk7CmlmIChsb2NhbFRpbWUuZ2V0SG91cnMoKSA8IFNUQVJUX1RJTUUgfHwgbG9jYWxUaW1lLmdldEhvdXJzKCkgPiBFTkRfVElNRSkgewogICAgbG9nZ2VyLmVycm9yKCJMb2dpbiBmb3JiaWRkZW4gb3V0c2lkZSB3b3JrIGhvdXJzISIpOwogICAgYXV0aFN0YXRlID0gRkFJTEVEOwp9IGVsc2UgewogICAgbG9nZ2VyLm1lc3NhZ2UoIkF1dGhlbnRpY2F0aW9uIGFsbG93ZWQhIik7CiAgICBhdXRoU3RhdGUgPSBTVUNDRVNTOwp9CgpmdW5jdGlvbiBnZXRMb25naXR1ZGVMYXRpdHVkZUZyb21Vc2VyUG9zdGFsQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlclBvc3RhbEFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwogICAgICAvL3RoZSBhYm92ZSBVUkkgaGFzIHRvIGJlIGV4dGVuZGVkIHdpdGggYW4gQVBJX0tFWSBpZiB1c2VkIGluIGEgZnJlcXVlbnQgbWFubmVyCiAgICAgIC8vc2VlIGRvY3VtZW50YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9nZW9jb2RpbmcvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIGdlb2NvZGUgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIHZhciBpOwogICAgZm9yIChpID0gMDsgaSA8IGdlb2NvZGUucmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciByZXN1bHQgPSBnZW9jb2RlLnJlc3VsdHNbaV07CiAgICAgICAgbGF0aXR1ZGUgPSByZXN1bHQuZ2VvbWV0cnkubG9jYXRpb24ubGF0OwogICAgICAgIGxvbmdpdHVkZSA9IHJlc3VsdC5nZW9tZXRyeS5sb2NhdGlvbi5sbmc7CiAgICAgIAogICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJsYXRpdHVkZToiICsgbGF0aXR1ZGUgKyAiIGxvbmdpdHVkZToiICsgbG9uZ2l0dWRlKTsKICAgIH0KfQoKZnVuY3Rpb24gZ2V0TG9jYWxUaW1lKCkgewoKICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7CiAgICB2YXIgbG9jYXRpb24gPSAibG9jYXRpb249IiArIGxhdGl0dWRlICsgIiwiICsgbG9uZ2l0dWRlOwogICAgdmFyIHRpbWVzdGFtcCA9ICJ0aW1lc3RhbXA9IiArIG5vdzsKICAgICAgICAKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL3RpbWV6b25lL2pzb24/IiArIGxvY2F0aW9uICsgIiYiICsgdGltZXN0YW1wKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwogICAgICAvL3RoZSBhYm92ZSBVUkkgaGFzIHRvIGJlIGV4dGVuZGVkIHdpdGggYW4gQVBJX0tFWSBpZiB1c2VkIGluIGEgZnJlcXVlbnQgbWFubmVyCiAgICAgIC8vc2VlIGRvY3VtZW50YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi90aW1lem9uZS9pbnRybwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgdGltZXpvbmUgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIHZhciBsb2NhbFRpbWVzdGFtcCA9IHBhcnNlSW50KG5vdykgKyBwYXJzZUludCh0aW1lem9uZS5kc3RPZmZzZXQpICsgcGFyc2VJbnQodGltZXpvbmUucmF3T2Zmc2V0KTsKICAgIGxvY2FsVGltZSA9IG5ldyBEYXRlKGxvY2FsVGltZXN0YW1wKjEwMDApOwp9CgpmdW5jdGlvbiBnZXRVc2VyUG9zdGFsQWRkcmVzcygpIHsKICAgIHZhciB1c2VyQWRkcmVzc1NldCA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUodXNlcm5hbWUsICJwb3N0YWxBZGRyZXNzIik7CiAgICBpZiAodXNlckFkZHJlc3NTZXQgPT0gbnVsbCB8fCB1c2VyQWRkcmVzc1NldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gYWRkcmVzcyBzcGVjaWZpZWQgZm9yIHVzZXI6ICIgKyB1c2VybmFtZSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHVzZXJBZGRyZXNzU2V0Lml0ZXJhdG9yKCkubmV4dCgpCn0KCmZ1bmN0aW9uIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKSB7CiAgICBsb2dnZXIubWVzc2FnZSgiVXNlciBSRVNUIENhbGwuIFN0YXR1czogIiArIHJlc3BvbnNlLmdldFN0YXR1cygpICsgIiwgQm9keTogIiArIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKfQ==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"48f17202-039f-4d40-b7fc-4ce380f1b929\",\"name\":\"Collect SAML2 Node Config\",\"description\":\"Collect all the configuration items required for the SAML2 Node to function properly.\",\"script\":\"LyogQ29sbGVjdCBTQU1MMiBOb2RlIENvbmZpZwogKiAKICogQ29sbGVjdCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgcmVxdWlyZWQgZm9yIHRoZSBTQU1MMiBOb2RlIHRvIGZ1bmN0aW9uIHByb3Blcmx5LgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICovCihmdW5jdGlvbiAoKSB7CiAgICBvdXRjb21lID0gInRydWUiOwogICAgICB2YXIgY29uZmlnID0gewogICAgICAgICJtZXRhQWxpYXMiOiAiL2lTUEF6dXJlIiwKICAgICAgICAiYWxsb3dDcmVhdGUiOiBmYWxzZSwKICAgICAgICAic2xvRW5hYmxlZCI6IGZhbHNlLAogICAgICAgICJhdXRobkNvbnRleHRDbGFzc1JlZiI6IFtdLAogICAgICAgICJhdXRobkNvbnRleHREZWNsUmVmIjogW10sCiAgICAgICAgImF1dGhDb21wYXJpc29uIjogIkVYQUNUIiwKICAgICAgICAibmFtZUlkRm9ybWF0IjogInVybjpvYXNpczpuYW1lczp0YzpTQU1MOjEuMTpuYW1laWQtZm9ybWF0OnVuc3BlY2lmaWVkIiwKICAgICAgICAicmVxdWVzdEJpbmRpbmciOiAiSFRUUF9SRURJUkVDVCIsCiAgICAgICAgImJpbmRpbmciOiAiSFRUUF9QT1NUIiwKICAgICAgICAiZm9yY2VBdXRobiI6IGZhbHNlLAogICAgICAgICJpZHBFbnRpdHlJZCI6ICJodHRwczovL3N0cy53aW5kb3dzLm5ldC83MTFmZmE5Yy01OTcyLTQ3MTMtYWNlMy02ODhjOTczMjYxNGEvIiwKICAgICAgICAiaXNQYXNzaXZlIjogZmFsc2UsCiAgICAgICAgInNsb1JlbGF5U3RhdGUiOiAiIgogICAgfTsKICAgICAgdmFyIHNjcmlwdCA9ICIiOwogICAgc2NyaXB0ICs9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCgiOwogICAgc2NyaXB0ICs9ICIgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JykiOwogICAgc2NyaXB0ICs9ICIpLmZvckVhY2goIjsKICAgIHNjcmlwdCArPSAiICAgIGZ1bmN0aW9uIChpbnB1dCxpKSB7IjsKICAgIHNjcmlwdCArPSAiICAgICAgICBjb25zb2xlLmxvZygnaW5wdXQgJytpKTsiCiAgICBzY3JpcHQgKz0gIiAgICAgICAgdmFyIGNvbmZpZyA9IEpTT04ucGFyc2UoJyIrSlNPTi5zdHJpbmdpZnkoY29uZmlnKSsiJyk7IjsKICAgIHNjcmlwdCArPSAiICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZyk7IjsKICAgIHNjcmlwdCArPSAiICAgICAgICBpZiAoaW5wdXQudHlwZSA9PT0gJ3RleHQnKSB7IjsKICAgIHNjcmlwdCArPSAiICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGNvbmZpZ1trZXlzW2ldXSk7IjsKICAgIHNjcmlwdCArPSAiICAgICAgICAgICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudCggJ2lucHV0JyAsIHsna2V5JzonRW50ZXInfSApKTsiOwogICAgc2NyaXB0ICs9ICIgICAgICAgIH0iOwogICAgc2NyaXB0ICs9ICIgICAgfSI7CiAgICBzY3JpcHQgKz0gIik7IjsKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suTmFtZUNhbGxiYWNrLAogICAgICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawogICAgKQogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLk5hbWVDYWxsYmFjaygibWV0YUFsaWFzIiksCiAgICAgICAgICAgIG5ldyBmci5OYW1lQ2FsbGJhY2soImFsbG93Q3JlYXRlIiksCiAgICAgICAgICAgIG5ldyBmci5OYW1lQ2FsbGJhY2soInNsb0VuYWJsZWQiKSwKICAgICAgICAgICAgbmV3IGZyLk5hbWVDYWxsYmFjaygiYXV0aG5Db250ZXh0Q2xhc3NSZWYiKSwKICAgICAgICAgICAgbmV3IGZyLk5hbWVDYWxsYmFjaygiYXV0aG5Db250ZXh0RGVjbFJlZiIpLAogICAgICAgICAgICBuZXcgZnIuTmFtZUNhbGxiYWNrKCJhdXRoQ29tcGFyaXNvbiIpLAogICAgICAgICAgICBuZXcgZnIuTmFtZUNhbGxiYWNrKCJuYW1lSWRGb3JtYXQiKSwKICAgICAgICAgICAgbmV3IGZyLk5hbWVDYWxsYmFjaygicmVxdWVzdEJpbmRpbmciKSwKICAgICAgICAgICAgbmV3IGZyLk5hbWVDYWxsYmFjaygiYmluZGluZyIpLAogICAgICAgICAgICBuZXcgZnIuTmFtZUNhbGxiYWNrKCJmb3JjZUF1dGhuIiksCiAgICAgICAgICAgIG5ldyBmci5OYW1lQ2FsbGJhY2soImlkcEVudGl0eUlkIiksCiAgICAgICAgICAgIG5ldyBmci5OYW1lQ2FsbGJhY2soImlzUGFzc2l2ZSIpLAogICAgICAgICAgICBuZXcgZnIuTmFtZUNhbGxiYWNrKCJzbG9SZWxheVN0YXRlIiksCiAgICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgICBjb25maWdbY2FsbGJhY2tzLmdldCgwKS5nZXRQcm9tcHQoKV0gPSBjYWxsYmFja3MuZ2V0KDApLmdldE5hbWUoKTsKICAgICAgICAgIGNvbmZpZ1tjYWxsYmFja3MuZ2V0KDEpLmdldFByb21wdCgpXSA9IChjYWxsYmFja3MuZ2V0KDEpLmdldE5hbWUoKSA9PT0gJ3RydWUnKTsKICAgICAgICAgIGNvbmZpZ1tjYWxsYmFja3MuZ2V0KDIpLmdldFByb21wdCgpXSA9IChjYWxsYmFja3MuZ2V0KDIpLmdldE5hbWUoKSA9PT0gJ3RydWUnKTsKICAgICAgICAgIGNvbmZpZ1tjYWxsYmFja3MuZ2V0KDMpLmdldFByb21wdCgpXSA9IFtjYWxsYmFja3MuZ2V0KDMpLmdldE5hbWUoKV07CiAgICAgICAgICBjb25maWdbY2FsbGJhY2tzLmdldCg0KS5nZXRQcm9tcHQoKV0gPSBbY2FsbGJhY2tzLmdldCg0KS5nZXROYW1lKCldOwogICAgICAgICAgY29uZmlnW2NhbGxiYWNrcy5nZXQoNSkuZ2V0UHJvbXB0KCldID0gY2FsbGJhY2tzLmdldCg1KS5nZXROYW1lKCk7CiAgICAgICAgICBjb25maWdbY2FsbGJhY2tzLmdldCg2KS5nZXRQcm9tcHQoKV0gPSBjYWxsYmFja3MuZ2V0KDYpLmdldE5hbWUoKTsKICAgICAgICAgIGNvbmZpZ1tjYWxsYmFja3MuZ2V0KDcpLmdldFByb21wdCgpXSA9IGNhbGxiYWNrcy5nZXQoNykuZ2V0TmFtZSgpOwogICAgICAgICAgY29uZmlnW2NhbGxiYWNrcy5nZXQoOCkuZ2V0UHJvbXB0KCldID0gY2FsbGJhY2tzLmdldCg4KS5nZXROYW1lKCk7CiAgICAgICAgICBjb25maWdbY2FsbGJhY2tzLmdldCg5KS5nZXRQcm9tcHQoKV0gPSAoY2FsbGJhY2tzLmdldCg5KS5nZXROYW1lKCkgPT09ICd0cnVlJyk7CiAgICAgICAgICBjb25maWdbY2FsbGJhY2tzLmdldCgxMCkuZ2V0UHJvbXB0KCldID0gY2FsbGJhY2tzLmdldCgxMCkuZ2V0TmFtZSgpOwogICAgICAgICAgY29uZmlnW2NhbGxiYWNrcy5nZXQoMTEpLmdldFByb21wdCgpXSA9IChjYWxsYmFja3MuZ2V0KDExKS5nZXROYW1lKCkgPT09ICd0cnVlJyk7CiAgICAgICAgICBjb25maWdbY2FsbGJhY2tzLmdldCgxMikuZ2V0UHJvbXB0KCldID0gY2FsbGJhY2tzLmdldCgxMikuZ2V0TmFtZSgpOwogICAgICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgibm9kZUNvbmZpZyIsIGNvbmZpZyk7CiAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgIH0KfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"6d6c2202-725b-4196-9436-92ec11a0b385\",\"name\":\"Display States - imported (2)\",\"description\":\"Display sharedState and transientState.\",\"script\":\"LyogRGlzcGxheSBTdGF0ZXMKICogCiAqIERpc3BsYXkgc2hhcmVkU3RhdGUgYW5kIHRyYW5zaWVudFN0YXRlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICovCihmdW5jdGlvbiAoKSB7CiAgICBvdXRjb21lID0gInRydWUiOwoKICAgIHZhciBhbmNob3IgPSAiYW5jaG9yLSIuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CiAgICB2YXIgaGFsaWduID0gImxlZnQiOwogICAgdmFyIG1lc3NhZ2UgPSAiPGg0PkN1cnJlbnQgU3RhdGUgVmFsdWVzPC9oND4iLmNvbmNhdCgKICAgICAgICAiPHA+PGI+U2hhcmVkIFN0YXRlPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgICAgICBzaGFyZWRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAgICAgIjxwPjxiPlRyYW5zaWVudCBTdGF0ZTwvYj46PGJyLz4iKS5jb25jYXQoCiAgICAgICAgdHJhbnNpZW50U3RhdGUudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4iLmNvbmNhdCgKICAgICAgImRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NhbGxiYWNrLWNvbXBvbmVudCcpKS5mb3JFYWNoKFxuIikuY29uY2F0KAogICAgICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAgICAgIiAgdmFyIG1lc3NhZ2UgPSBlLmZpcnN0RWxlbWVudENoaWxkO1xuIikuY29uY2F0KAogICAgICAiICBpZiAobWVzc2FnZS5maXJzdENoaWxkICYmIG1lc3NhZ2UuZmlyc3RDaGlsZC5ub2RlTmFtZSA9PSAnI3RleHQnICYmIG1lc3NhZ2UuZmlyc3RDaGlsZC5ub2RlVmFsdWUudHJpbSgpID09ICciKS5jb25jYXQoYW5jaG9yKS5jb25jYXQoIicpIHtcbiIpLmNvbmNhdCgKICAgICAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwiXCI7XG4iKS5jb25jYXQoCiAgICAgICIgICAgbWVzc2FnZS5zdHlsZSA9IFwidGV4dC1hbGlnbjogbGVmdDsgaW5saW5lLXNpemU6IDQzMHB4OyBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1wiO1xuIikuY29uY2F0KAogICAgICAiICAgIG1lc3NhZ2UuYWxpZ24gPSBcIiIpLmNvbmNhdChoYWxpZ24pLmNvbmNhdCgiXCI7XG4iKS5jb25jYXQoCiAgICAgICIgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIikuY29uY2F0KG1lc3NhZ2UpLmNvbmNhdCgiJztcbiIpLmNvbmNhdCgKICAgICAgIiAgfVxuIikuY29uY2F0KAogICAgICAifSkiKQogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suVGV4dE91dHB1dENhbGxiYWNrLAogICAgICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawogICAgKQogICAgaWYgKG1lc3NhZ2UubGVuZ3RoICYmIGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIGFuY2hvcgogICAgICAgICAgICApLAogICAgICAgICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkKICAgICAgICApLmJ1aWxkKCkKICAgIH0KICAgIGVsc2UgewogICAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbyhvdXRjb21lKS5idWlsZCgpOwogICAgfQoKICAgICAvKgogICAgICAqIEdlbmVyYXRlIGEgdG9rZW4gaW4gdGhlIGRlc2lyZWQgZm9ybWF0LiBBbGwgJ3gnIGNoYXJhY3RlcnMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGEgcmFuZG9tIG51bWJlciAwLTkuCiAgICAgICogCiAgICAgICogRXhhbXBsZToKICAgICAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAgICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICAgICovCiAgICBmdW5jdGlvbiBnZW5lcmF0ZU51bWVyaWNUb2tlbihmb3JtYXQpIHsKICAgICAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbihjKSB7CiAgICAgICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxMHwwOwogICAgICAgICAgICB2YXIgdiA9IHI7CiAgICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDEwKTsKICAgICAgICB9KTsKICAgIH0KfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"403cf226-6051-4368-8b72-9ba14f9a5140\",\"name\":\"VKontakte Profile Normalization\",\"description\":\"Normalizes raw profile data from VKontakte\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGhvdG9fNTApLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"57807349-630f-496a-bccb-ea1011b8e945\",\"name\":\"MobileOTP: Extract Username, Password, OTP\",\"description\":\"Extract username, password, and OTP from request headers and put them in shared state for validation.\",\"script\":\"bG9nZ2VyLndhcm5pbmcoIk1vYmlsZU9UUDogRXh0cmFjdCBVc2VybmFtZSwgUGFzc3dvcmQsIE9UUDogc3RhcnQiKTsKCi8qCiAqIEJFR0lOIFNDUklQVCBDT05GSUdVUkFUSU9OCiAqLwp2YXIgVVNFUk5BTUVfSEVBREVSX05BTUUgPSAiWC1PcGVuQU0tVXNlcm5hbWUiOwp2YXIgUEFTU1dPUkRfSEVBREVSX05BTUUgPSAiWC1PcGVuQU0tUGFzc3dvcmQiOwp2YXIgT1RQX0hFQURFUl9OQU1FID0gIlgtT3BlbkFNLU1vYmlsZU9UUCI7Ci8qCiAqIEVORCBTQ1JJUFQgQ09ORklHVVJBVElPTgogKi8KCm91dGNvbWUgPSAiZmFsc2UiOwoKdmFyIHVzZXJuYW1lID0gZ2V0SGVhZGVyKFVTRVJOQU1FX0hFQURFUl9OQU1FKSB8fCBudWxsOwp2YXIgcGFzc3dvcmQgPSBnZXRIZWFkZXIoUEFTU1dPUkRfSEVBREVSX05BTUUpIHx8IG51bGw7CnZhciBtb2JpbGVPVFAgPSBnZXRIZWFkZXIoT1RQX0hFQURFUl9OQU1FKSB8fCBudWxsOwoKaWYgKHVzZXJuYW1lICYmIHBhc3N3b3JkICYmIG1vYmlsZU9UUCkgewogICAgICBzaGFyZWRTdGF0ZS5wdXQoInVzZXJuYW1lIiwgdXNlcm5hbWUpOwogICAgICB0cmFuc2llbnRTdGF0ZS5wdXQoInBhc3N3b3JkIiwgcGFzc3dvcmQpOwogICAgICB0cmFuc2llbnRTdGF0ZS5wdXQoIm1vYmlsZU9UUCIsIG1vYmlsZU9UUCk7CiAgICBvdXRjb21lID0gInRydWUiOwp9Cgpsb2dnZXIud2FybmluZygiTW9iaWxlT1RQOiBFeHRyYWN0IFVzZXJuYW1lLCBQYXNzd29yZCwgT1RQOiBmaW5pc2ggW291dGNvbWU9Ii5jb25jYXQob3V0Y29tZSkuY29uY2F0KCJdIikpOwoKLyoKICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBoZWFkZXIKICovCmZ1bmN0aW9uIGdldEhlYWRlcihoZWFkZXJOYW1lKSB7CiAgICAgIGlmIChyZXF1ZXN0SGVhZGVycy5nZXQoaGVhZGVyTmFtZSkgJiYgcmVxdWVzdEhlYWRlcnMuZ2V0KGhlYWRlck5hbWUpLmdldCgwKSkgewogICAgICAgIHJldHVybiByZXF1ZXN0SGVhZGVycy5nZXQoaGVhZGVyTmFtZSkuZ2V0KDApLnRvU3RyaW5nKCk7CiAgICB9CiAgICAgIHJldHVybiBudWxsOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"e0ba741b-c952-4062-9899-0b1c19237ee4\",\"name\":\"FRAAS-7955 Workaround\",\"description\":\"FRAAS-7955 Workaround: Copy sharedState to transientState\",\"script\":\"b3V0Y29tZSA9ICJ0cnVlIjsKdmFyIGF0dHJzID0gc2hhcmVkU3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIik7CmlmIChhdHRycykgewogICAgICBzZXRUcmFuc2llbnRPYmplY3RBdHRyaWJ1dGUoImdpdmVuTmFtZSIsIGF0dHJzLmdldCgiZ2l2ZW5OYW1lIikuY29uY2F0KCItd29ya2Fyb3VuZCIpKTsKICAgICAgc2V0VHJhbnNpZW50T2JqZWN0QXR0cmlidXRlKCJzbiIsIGF0dHJzLmdldCgic24iKS5jb25jYXQoIi13b3JrYXJvdW5kIikpOwogICAgICBzZXRUcmFuc2llbnRPYmplY3RBdHRyaWJ1dGUoIm1haWwiLCBhdHRycy5nZXQoIm1haWwiKS5jb25jYXQoIi13b3JrYXJvdW5kIikpOwp9CgovKgogKiBTdG9yZSBhdHRyaWJ1dGVzIGluIHRyYW5zaWVudCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAqLwpmdW5jdGlvbiBzZXRUcmFuc2llbnRPYmplY3RBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHsKICAgIHZhciB0cmFuc2llbnRTdG9yYWdlID0gdHJhbnNpZW50U3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIik7CiAgICBpZiAodHJhbnNpZW50U3RvcmFnZSAmJiB2YWx1ZSkgewogICAgICAgICAgaWYgKHRyYW5zaWVudFN0b3JhZ2UucHV0KSB7CiAgICAgICAgICAgIHRyYW5zaWVudFN0b3JhZ2UucHV0KG5hbWUsIHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdHJhbnNpZW50U3RvcmFnZVtuYW1lXSA9IHZhbHVlOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHZhbHVlKSB7CiAgICB0cmFuc2llbnRTdGF0ZS5wdXQoIm9iamVjdEF0dHJpYnV0ZXMiLCBKU09OLnBhcnNlKCJ7XCIiK25hbWUrIlwiOlwiIit2YWx1ZSsiXCJ9IikpOwogICAgfQp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"d6469639-249f-4df1-9e03-335cd3e37b3d\",\"name\":\"Get Email\",\"description\":\"null\",\"script\":\"bG9nZ2VyLmVycm9yKCJHZXQgRW1haWw6IHN0YXJ0Iik7Cm91dGNvbWUgPSAidHJ1ZSI7CmlmIChnZXRQcm9maWxlQXR0cmlidXRlKCJtYWlsIikpIHsKICBzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoIm1haWwiLCBnZXRQcm9maWxlQXR0cmlidXRlKCJtYWlsIikpOwp9CmxvZ2dlci5lcnJvcigiR2V0IEVtYWlsOiBlbmQiKTsKCi8qCiAqIEdldCBwcm9maWxlIGF0dHJpYnV0ZQogKi8KZnVuY3Rpb24gZ2V0UHJvZmlsZUF0dHJpYnV0ZShuYW1lKSB7CiAgICByZXR1cm4gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpLCBuYW1lKS5pdGVyYXRvcigpLm5leHQoKTsKfQoKLyoKICogUHJvcGVybHkgc2V0IGF0dHJpYnV0ZXMgaW4gc2hhcmVkIHN0YXRlIGZvciB1c2Ugd2l0aCB0aGUgQ3JlYXRlL1BhdGNoIE9iamVjdCBub2Rlcy4KICovCmZ1bmN0aW9uIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgewogICAgaWYgKHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpKSB7CiAgICAgICAgc2hhcmVkU3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikucHV0KG5hbWUsIHZhbHVlKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHNoYXJlZFN0YXRlLnB1dCgib2JqZWN0QXR0cmlidXRlcyIsIEpTT04ucGFyc2UoIntcIiIrbmFtZSsiXCI6Iit2YWx1ZSsifSIpKTsKICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"36863ffb-40ec-48b9-94b1-9a99f71cc3b5\",\"name\":\"OIDC Claims Script\",\"description\":\"Default global script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"5b3b2c47-0248-46f4-8a1c-8a495d249037\",\"name\":\"Save/restore perpetrator\",\"description\":\"null\",\"script\":\"b3V0Y29tZSA9ICJ0cnVlIjsKaWYgKHNoYXJlZFN0YXRlLmdldCgicGVycGV0cmF0b3IiKSkKewogIHNoYXJlZFN0YXRlLnB1dCgidXNlcm5hbWUiLCBzaGFyZWRTdGF0ZS5nZXQoInBlcnBldHJhdG9yIikpOwovLyAgaWYgKHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpKSB7Ci8vICAgIHNoYXJlZFN0YXRlLnJlbW92ZSgib2JqZWN0QXR0cmlidXRlcyIpOwovLyAgfQogIHNoYXJlZFN0YXRlLnB1dCgib2JqZWN0QXR0cmlidXRlcyIsIHt9KTsKfQplbHNlCnsKICBzaGFyZWRTdGF0ZS5wdXQoInBlcnBldHJhdG9yIiwgc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKTsKICBpZiAoc2hhcmVkU3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikgJiYgCiAgICAgIHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpLmdldCgidXNlck5hbWUiKSkgewogICAgc2hhcmVkU3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikucmVtb3ZlKCJ1c2VyTmFtZSIpOwogIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"50cde102-d4b6-44c4-9ba7-8564af05ae08\",\"name\":\"Select Theme from URL\",\"description\":\"Select and apply theme from query param in the request URL.\",\"script\":\"LyogU2VsZWN0IFRoZW1lIGZyb20gVVJMCiAqIAogKiBTZWxlY3QgYW5kIGFwcGx5IHRoZW1lIGZyb20gcXVlcnkgcGFyYW0gaW4gdGhlIHJlcXVlc3QgVVJMLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICovCihmdW5jdGlvbiAoKSB7CiAgICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICAgIHZhciB0aGVtZSA9ICIiOwogICAgICBpZiAocmVxdWVzdFBhcmFtZXRlcnMuZ2V0KCJ0aGVtZUlkIikpIHsKICAgICAgICAgIHRoZW1lID0gcmVxdWVzdFBhcmFtZXRlcnMuZ2V0KCJ0aGVtZUlkIikuZ2V0KDApOwogICAgfQoKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuUG9sbGluZ1dhaXRDYWxsYmFjawogICAgKQogICAgaWYgKHRoZW1lICYmIGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICB2YXIgc3RhZ2UgPSAidGhlbWVJZD0iK3RoZW1lOwogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKAogICAgICAgICAgICAgIG5ldyBmci5Qb2xsaW5nV2FpdENhbGxiYWNrKCIxMDAiLCAiUGxlYXNlIHdhaXQgLi4uIikKICAgICAgICApLndpdGhTdGFnZShzdGFnZSkuYnVpbGQoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbyhvdXRjb21lKS5idWlsZCgpOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"779bb956-676d-4e44-b828-b9efa3c866d4\",\"name\":\"ForgeRockVpnOnly\",\"description\":\"null\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKdmFyIHZhbGlkSXBBZGRyZXNzZXMgPSBbCiAgIjM3LjcxLjE0OC45MiIsIC8vIEZSIEdyZW5vYmxlCiAgIjg0LjIxNC4xNTYuNTAiLCAvLyBGUiBPc2xvCiAgIjE4MC4yNTUuNjQuMjYiLCAvLyBGUiBTaW5nYXBvcmUKICAiMTI4LjEwNi4xMDUuMTM2IiwgLy8gRlIgU2luZ2Fwb3JlIFNhbGVzCiAgIjE4OC4zOS4yMzUuMTMwIiwgLy8gRlIgQnJpc3RvbAogICI3OC4zMy4yMi4xNjIiLCAvLyBGUiBCcmlzdG9sIE1hcnNoIFN0cmVldAogICI2NS4xMTMuOTguMTAiLCAvLyBGUiBTYW4gRnJhbmNpc2NvCiAgIjI0LjE1NS4xNDYuMTgiIC8vIEZSIEF1c3RpbgpdOwoKdHJ5IHsKICBvdXRjb21lID0gZnVuY3Rpb24oKSB7CiAgICBsb2dnZXIubWVzc2FnZShyZXF1ZXN0SGVhZGVycyk7CiAgICB2YXIgdnBuQnlwYXNzU2VjcmV0ID0gc3lzdGVtRW52LmdldFByb3BlcnR5KCdlc3YuYW1hZG1pbi52cG4uYnlwYXNzLnNlY3JldCcsICcnKSArICcnOwogICAgdmFyIGJ5cGFzc0hlYWRlciA9IHJlcXVlc3RIZWFkZXJzLmdldChuZXcgamF2YS5sYW5nLlN0cmluZygneC1mb3JnZXJvY2stdGVzdHMtYmVhcmVyJykpOwogICAgbG9nZ2VyLm1lc3NhZ2UoImNoZWNraW5nIGZvciBWUE4gYnlwYXNzIC0gaGVhZGVyIHt9IHRvIG1hdGNoIHNlY3JldCB7fSIsIGJ5cGFzc0hlYWRlciwgdnBuQnlwYXNzU2VjcmV0KTsKICAgIGlmICh2cG5CeXBhc3NTZWNyZXQgJiYgYnlwYXNzSGVhZGVyICYmIGJ5cGFzc0hlYWRlci5zaXplKCkgPT09IDEpIHsKICAgICAgbG9nZ2VyLm1lc3NhZ2UoImJ5cGFzcyBoZWFkZXIgaXMgcHJlc2VudCIpOwogICAgICBpZiAoYnlwYXNzSGVhZGVyLmdldCgwKSArICcnID09PSB2cG5CeXBhc3NTZWNyZXQgKyAnJykgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJieXBhc3NpbmcgVlBOIGNoZWNrIC0gcmVxdWVzdCBmcm9tIHRlc3RzIGF1dGhvcml6ZWQiKTsKICAgICAgICByZXR1cm4gJ1RydWUnOwogICAgICB9CiAgICB9CiAgICB2YXIgY2xpZW50SXBBZGRyZXNzZXMgPSByZXF1ZXN0SGVhZGVycy5nZXQobmV3IGphdmEubGFuZy5TdHJpbmcoJ3gtZm9yd2FyZGVkLWZvcicpKTsKICAgIGxvZ2dlci5tZXNzYWdlKGNsaWVudElwQWRkcmVzc2VzKTsKICAgIGlmICghY2xpZW50SXBBZGRyZXNzZXMpIHsKICAgICAgbG9nZ2VyLm1lc3NhZ2UoIk5vIGZvcndhcmRlZCBoZWFkZXIgLSBpbnRlcm5hbCBjbHVzdGVyIHJlcXVlc3QiKTsKICAgICAgcmV0dXJuICdUcnVlJzsKICAgIH0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xpZW50SXBBZGRyZXNzZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgdmFyIGNsaWVudElwSGVhZGVyID0gY2xpZW50SXBBZGRyZXNzZXMuZ2V0KGkpOwogICAgICB2YXIgaXBBZGRyZXNzZXMgPSBjbGllbnRJcEhlYWRlci5zcGxpdCgnLCcpOwogICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGlwQWRkcmVzc2VzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgdmFyIGNsaWVudElwID0gaXBBZGRyZXNzZXNbal0udHJpbSgpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCdDaGVja2luZyBjbGllbnQgSVAgJyArIGNsaWVudElwKTsKICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHZhbGlkSXBBZGRyZXNzZXMubGVuZ3RoOyBrKyspIHsKICAgICAgICAgIGlmIChjbGllbnRJcCArICcnID09PSB2YWxpZElwQWRkcmVzc2VzW2tdKSB7CiAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJyZXF1ZXN0IGZyb20gRm9yZ2VSb2NrIFZQTiBhdXRob3JpemVkIik7CiAgICAgICAgICAgIHJldHVybiAnVHJ1ZSc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBsb2dnZXIud2FybmluZygicmVxdWVzdCBmcm9tIG91dHNpZGUgdGhlIGNsdXN0ZXIgYW5kIG5vdCBmcm9tIEZvcmdlUm9jayBWUE4gcmVqZWN0ZWQiKTsKICAgIHJldHVybiAnRmFsc2UnOwogIH0oKTsKCn0gY2F0Y2ggKGUpIHsKCiAgbG9nZ2VyLmVycm9yKCdGb3JnZVJvY2tWcG5Pbmx5IGZhaWxlZCB0byBjaGVjayBJUCcpOwogIGxvZ2dlci5lcnJvcihlKTsKICBvdXRjb21lID0gJ0Vycm9yJzsKCn0K\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"91554b10-79a5-4aa8-aca1-59481a734c19\",\"name\":\"Twilio SMS OTP Sender\",\"description\":\"Twilio SMS OTP Sender\",\"script\":\"LyogVHdpbGlvIFNNUyBPVFAgU2VuZGVyCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIFRoaXMgc2NyaXB0IHdpbGwgc2VuZCBhbiBTTVMgY29udGFpbmluZyB0aGUgT1RQIHRvIHRoZSBwaG9uZSBudW1iZXIgaW4gdGhlIHVzZXIncyBwcm9maWxlLgogKiAKICogVGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIG5vdCB3b3JrIHByb3Blcmx5IGFzIGlzLiAKICogSXQgcmVxdWlyZXMgdGhlIElkZW50aWZ5IEV4aXN0aW5nIFVzZXIgbm9kZSBhbmQgSE9UUCBHZW5lcmF0b3Igbm9kZSBiZWZvcmUgaXQgaXMgYmVpbmcgY2FsbGVkLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHNlbnQKICogLSBmYWlsZWQKICovCmxvZ2dlci53YXJuaW5nKCJUd2lsaW8gU01TIE9UUCBTZW5kZXI6IHN0YXJ0Iik7CgppZiAoc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKSAmJiBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHNoYXJlZFN0YXRlLmdldCgiX2lkIiksICJ0ZWxlcGhvbmVOdW1iZXIiKS5pdGVyYXRvcigpLmhhc05leHQoKSkgewogICAgdmFyIEJhc2U2ND17X2tleVN0cjoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLGVuY29kZTpmdW5jdGlvbihpbnB1dCl7dmFyIG91dHB1dD0iIjt2YXIgY2hyMSxjaHIyLGNocjMsZW5jMSxlbmMyLGVuYzMsZW5jNDt2YXIgaT0wO2lucHV0PUJhc2U2NC5fdXRmOF9lbmNvZGUoaW5wdXQpO3doaWxlKGk8aW5wdXQubGVuZ3RoKXtjaHIxPWlucHV0LmNoYXJDb2RlQXQoaSsrKTtjaHIyPWlucHV0LmNoYXJDb2RlQXQoaSsrKTtjaHIzPWlucHV0LmNoYXJDb2RlQXQoaSsrKTtlbmMxPWNocjE+PjI7ZW5jMj0oY2hyMSYzKTw8NHxjaHIyPj40O2VuYzM9KGNocjImMTUpPDwyfGNocjM+PjY7ZW5jND1jaHIzJjYzO2lmKGlzTmFOKGNocjIpKXtlbmMzPWVuYzQ9NjR9ZWxzZSBpZihpc05hTihjaHIzKSl7ZW5jND02NH1vdXRwdXQ9b3V0cHV0K3RoaXMuX2tleVN0ci5jaGFyQXQoZW5jMSkrdGhpcy5fa2V5U3RyLmNoYXJBdChlbmMyKSt0aGlzLl9rZXlTdHIuY2hhckF0KGVuYzMpK3RoaXMuX2tleVN0ci5jaGFyQXQoZW5jNCl9cmV0dXJuIG91dHB1dH0sZGVjb2RlOmZ1bmN0aW9uKGlucHV0KXt2YXIgb3V0cHV0PSIiO3ZhciBjaHIxLGNocjIsY2hyMzt2YXIgZW5jMSxlbmMyLGVuYzMsZW5jNDt2YXIgaT0wO2lucHV0PWlucHV0LnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCIiKTt3aGlsZShpPGlucHV0Lmxlbmd0aCl7ZW5jMT10aGlzLl9rZXlTdHIuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7ZW5jMj10aGlzLl9rZXlTdHIuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7ZW5jMz10aGlzLl9rZXlTdHIuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7ZW5jND10aGlzLl9rZXlTdHIuaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7Y2hyMT1lbmMxPDwyfGVuYzI+PjQ7Y2hyMj0oZW5jMiYxNSk8PDR8ZW5jMz4+MjtjaHIzPShlbmMzJjMpPDw2fGVuYzQ7b3V0cHV0PW91dHB1dCtTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjEpO2lmKGVuYzMhPTY0KXtvdXRwdXQ9b3V0cHV0K1N0cmluZy5mcm9tQ2hhckNvZGUoY2hyMil9aWYoZW5jNCE9NjQpe291dHB1dD1vdXRwdXQrU3RyaW5nLmZyb21DaGFyQ29kZShjaHIzKX19b3V0cHV0PUJhc2U2NC5fdXRmOF9kZWNvZGUob3V0cHV0KTtyZXR1cm4gb3V0cHV0fSxfdXRmOF9lbmNvZGU6ZnVuY3Rpb24oc3RyaW5nKXtzdHJpbmc9c3RyaW5nLnJlcGxhY2UoL1xyXG4vZywiXG4iKTt2YXIgdXRmdGV4dD0iIjtmb3IodmFyIG49MDtuPHN0cmluZy5sZW5ndGg7bisrKXt2YXIgYz1zdHJpbmcuY2hhckNvZGVBdChuKTtpZihjPDEyOCl7dXRmdGV4dCs9U3RyaW5nLmZyb21DaGFyQ29kZShjKX1lbHNlIGlmKGM+MTI3JiZjPDIwNDgpe3V0ZnRleHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYz4+NnwxOTIpO3V0ZnRleHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYyY2M3wxMjgpfWVsc2V7dXRmdGV4dCs9U3RyaW5nLmZyb21DaGFyQ29kZShjPj4xMnwyMjQpO3V0ZnRleHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYz4+NiY2M3wxMjgpO3V0ZnRleHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYyY2M3wxMjgpfX1yZXR1cm4gdXRmdGV4dH0sX3V0ZjhfZGVjb2RlOmZ1bmN0aW9uKHV0ZnRleHQpe3ZhciBzdHJpbmc9IiI7dmFyIGk9MDt2YXIgYz1jMT1jMj0wO3doaWxlKGk8dXRmdGV4dC5sZW5ndGgpe2M9dXRmdGV4dC5jaGFyQ29kZUF0KGkpO2lmKGM8MTI4KXtzdHJpbmcrPVN0cmluZy5mcm9tQ2hhckNvZGUoYyk7aSsrfWVsc2UgaWYoYz4xOTEmJmM8MjI0KXtjMj11dGZ0ZXh0LmNoYXJDb2RlQXQoaSsxKTtzdHJpbmcrPVN0cmluZy5mcm9tQ2hhckNvZGUoKGMmMzEpPDw2fGMyJjYzKTtpKz0yfWVsc2V7YzI9dXRmdGV4dC5jaGFyQ29kZUF0KGkrMSk7YzM9dXRmdGV4dC5jaGFyQ29kZUF0KGkrMik7c3RyaW5nKz1TdHJpbmcuZnJvbUNoYXJDb2RlKChjJjE1KTw8MTJ8KGMyJjYzKTw8NnxjMyY2Myk7aSs9M319cmV0dXJuIHN0cmluZ319OwoKICAgICAgIC8qIEJFR0lOIFNDUklQVCBDT05GSUdVUkFUSU9OCiAgICAgKgogICAgICogUkVQTEFDRSBXSVRIIFlPVVIgT1dOIEFaVVJFIEFEIFNFVFRJTkdTCiAgICAgKi8KICAgIHZhciBUV0lMSU9fQVBJX1NJRCA9ICJBQzc1MDQxNWUzMTYzYTJlNTdiN2FlZWE3ZWVkODJkOTQ0IjsKICAgIHZhciBUV0lMSU9fQVBJX1RPS0VOID0gImQzNmE3MTljOTRiNGJlMDg1OTJkNjllYzRmODBhNWJiIjsKICAgIHZhciBUV0lMSU9fQVBJX0ZST00gPSAiKzEzMTc2NDQzMTA3IjsKICAgIC8qCiAgICAgKiBFTkQgU0NSSVBUIENPTkZJR1VSQVRJT04KICAgICAqLwogIAogICAgLy8gVHdpbGlvIFNNUyBNZXNzYWdlIEFQSSBDb25maWd1cmF0aW9uCiAgICB2YXIgVFdJTElPX0FQSV9VUkkgPSAiaHR0cHM6Ly9hcGkudHdpbGlvLmNvbS8yMDEwLTA0LTAxL0FjY291bnRzLyIuY29uY2F0KFRXSUxJT19BUElfU0lEKS5jb25jYXQoIi9NZXNzYWdlcy5qc29uIik7ICAgIAogICAgdmFyIFRXSUxJT19BUElfVE8gPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHNoYXJlZFN0YXRlLmdldCgiX2lkIiksICJ0ZWxlcGhvbmVOdW1iZXIiKS5pdGVyYXRvcigpLm5leHQoKTsKICAgIHZhciBUV0lMSU9fQVBJX0JPRFkgPSAiT1RQIGZvciBhY2NvdW50ICIuY29uY2F0KHNoYXJlZFN0YXRlLmdldCgidXNlcm5hbWUiKSkuY29uY2F0KCI6ICIpLmNvbmNhdChzaGFyZWRTdGF0ZS5nZXQoIm9uZVRpbWVQYXNzd29yZCIpKTsKICAgIC8vbG9nZ2VyLndhcm5pbmcoIlR3aWxpbyBTTVMgT1RQIFNlbmRlcjogVG86ICIuY29uY2F0KFRXSUxJT19BUElfVE8pKTsKICAgIC8vbG9nZ2VyLndhcm5pbmcoIlR3aWxpbyBTTVMgT1RQIFNlbmRlcjogTWVzc2FnZTogIi5jb25jYXQoVFdJTElPX0FQSV9CT0RZKSk7CgogICAgdmFyIEFVVEhaID0gIkJhc2ljICIuY29uY2F0KEJhc2U2NC5lbmNvZGUoVFdJTElPX0FQSV9TSUQuY29uY2F0KCc6JykuY29uY2F0KFRXSUxJT19BUElfVE9LRU4pKSk7CiAgICAvL2xvZ2dlci53YXJuaW5nKCJUd2lsaW8gU01TIE9UUCBTZW5kZXI6IEFVVEhaIC0gIi5jb25jYXQoQVVUSFopKTsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRNZXRob2QoJ1BPU1QnKTsKICAgIHJlcXVlc3Quc2V0VXJpKFRXSUxJT19BUElfVVJJKTsKICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOwogICAgcmVxdWVzdC5nZXRIZWFkZXJzKCkuYWRkKCJBdXRob3JpemF0aW9uIiwgQVVUSFopOwogICAgdmFyIHBhcmFtcyA9IHJlcXVlc3QuZ2V0Rm9ybSgpOwogICAgcGFyYW1zLmFkZCgiRnJvbSIsIFRXSUxJT19BUElfRlJPTSk7CiAgICBwYXJhbXMuYWRkKCJCb2R5IiwgVFdJTElPX0FQSV9CT0RZKTsKICAgIHBhcmFtcy5hZGQoIlRvIiwgVFdJTElPX0FQSV9UTyk7CiAgICByZXF1ZXN0LmdldEVudGl0eSgpLnNldFN0cmluZyhwYXJhbXMudG9TdHJpbmcoKSk7CgogICAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3QpLmdldCgpOwogICAgdmFyIHJlc3VsdCA9IEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogICAgLy9sb2dnZXIud2FybmluZygiVHdpbGlvIFNNUyBPVFAgU2VuZGVyOiBKU09OIHJlc3VsdDogIiArIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpOwoKICAgIGlmIChyZXN1bHRbImVycm9yX2NvZGUiXSkgewogICAgICAgIG91dGNvbWUgPSAiZmFpbGVkIjsKICAgICAgICBsb2dnZXIuZXJyb3IoIlR3aWxpbyBTTVMgT1RQIFNlbmRlcjogZXJyb3JfY29kZSA9ICIuY29uY2F0KHJlc3VsdFsiZXJyb3JfY29kZSJdKSk7CiAgICAgICAgbG9nZ2VyLmVycm9yKCJUd2lsaW8gU01TIE9UUCBTZW5kZXI6IGVycm9yX21lc3NhZ2UgPSAiLmNvbmNhdChyZXN1bHRbImVycm9yX21lc3NhZ2UiXSkpOwogICAgICAgIGxvZ2dlci5lcnJvcigiVHdpbGlvIFNNUyBPVFAgU2VuZGVyOiBvdXRjb21lID0gZmFpbGVkIik7CiAgICB9IGVsc2UgaWYgKHJlc3VsdFsiY29kZSJdKSB7CiAgICAgICAgb3V0Y29tZSA9ICJmYWlsZWQiOwogICAgICAgIGxvZ2dlci5lcnJvcigiVHdpbGlvIFNNUyBPVFAgU2VuZGVyOiBjb2RlID0gIi5jb25jYXQocmVzdWx0WyJjb2RlIl0pKTsKICAgICAgICBsb2dnZXIuZXJyb3IoIlR3aWxpbyBTTVMgT1RQIFNlbmRlcjogbWVzc2FnZSA9ICIuY29uY2F0KHJlc3VsdFsibWVzc2FnZSJdKSk7CiAgICB9IGVsc2UgewogICAgICAgIG91dGNvbWUgPSAic2VudCI7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIlR3aWxpbyBTTVMgT1RQIFNlbmRlcjogb3V0Y29tZSA9IHNlbnQiKTsKICAgIH0KfSBlbHNlIHsKICAgICAgb3V0Y29tZSA9ICJmYWlsZWQiOwogICAgICBsb2dnZXIuZXJyb3IoIlR3aWxpbyBTTVMgT1RQIFNlbmRlcjogTm8gdXNlciBvciBwaG9uZSBudW1iZXIgZm91bmQhIFVzZSAnSWRlbnRpZnkgRXhpc3RpbmcgVXNlciBub2RlIGJlZm9yZSB0aGlzIHNjcmlwdCB0byBwb3B1bGF0ZSB0aGUgdXNlcidzIF9pZCBpbiBzaGFyZWQgc3RhdGUhJyIpOwogICAgICBsb2dnZXIuZXJyb3IoIlR3aWxpbyBTTVMgT1RQIFNlbmRlcjogb3V0Y29tZSA9IGZhaWxlZCIpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"c253a7ac-ebc9-4268-9e62-89f38f98e4ab\",\"name\":\"CopyIDToObjectAttributes\",\"description\":\"null\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKc2hhcmVkU3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikucHV0KCJfaWQiLCBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpKTsKCm91dGNvbWUgPSAidHJ1ZSI7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"3d97c436-42c0-4dd0-a571-ea6f34f752b3\",\"name\":\"Itsme Profile Normalization\",\"description\":\"Normalizes raw profile data from Itsme\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKaW1wb3J0IG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUKCkpzb25WYWx1ZSBtYW5hZ2VkVXNlciA9IGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuc3ViKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmdpdmVuX25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5mYW1pbHlfbmFtZSksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQpyZXR1cm4gbWFuYWdlZFVzZXI=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"b6fce769-cf21-4963-a8dc-7c5370a4d15b\",\"name\":\"shared State Printer\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2sKKTsKb3V0Y29tZSA9ICJ0cnVlIjsKd2l0aCAoZnIpIHsKICBpZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgdmFyIGNhbGxiYWNrID0gbmV3IFRleHRPdXRwdXRDYWxsYmFjayhUZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sICJzaGFyZWRTdGF0ZTogIi5jb25jYXQoc2hhcmVkU3RhdGUudG9TdHJpbmcoKSkpOwogICAgYWN0aW9uID0gQWN0aW9uLnNlbmQoY2FsbGJhY2spLmJ1aWxkKCk7CiAgfSBlbHNlIHsKICAgIGFjdGlvbiA9IEFjdGlvbi5nb1RvKCJ0cnVlIikuYnVpbGQoKTsKICB9Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"fd536b1f-6ee4-4505-b148-71160414ddcc\",\"name\":\"Admin_AttributeCollectionWorkaroundCleanup\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKVGhpcyBpcyB0aGUgc2Vjb25kIHBhcnQgb2YgYSB3b3JrYXJvdW5kIGJlZ2FuIGluIEFkbWluX0F0dHJpYnV0ZUNvbGxlY3Rpb25Xb3JrYXJvdW5kLgoqLwoKdmFyIG9iakF0dHJzID0gc2hhcmVkU3RhdGUuZ2V0KCdvYmplY3RBdHRyaWJ1dGVzJykgfHwgbmV3IEhhc2hNYXAoKTsKCmlmIChvYmpBdHRycy5jb250YWluc0tleSgnZ3JvdXBzJykpIHsKICB2YXIgZ3JvdXBzID0gb2JqQXR0cnMuZ2V0KCdncm91cHMnKTsKICBpZiAoZ3JvdXBzLmxlbmd0aCA9PSAxICYmIGdyb3Vwc1swXSA9PSAnZmFrZScpIHsKICAgIG9iakF0dHJzLnJlbW92ZSgnZ3JvdXBzJyk7CiAgfQp9CgppZiAob2JqQXR0cnMuY29udGFpbnNLZXkoJ2ludml0ZURhdGUnKSAmJiBvYmpBdHRycy5nZXQoJ2ludml0ZURhdGUnKSA9PSAnZmFrZScpIHsKICAgb2JqQXR0cnMucmVtb3ZlKCdpbnZpdGVEYXRlJyk7Cn0KCnNoYXJlZFN0YXRlLnB1dCgnb2JqZWN0QXR0cmlidXRlcycsIG9iakF0dHJzKTsKCm91dGNvbWUgPSAnVHJ1ZSc7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"2a076e9e-75a9-46b5-b971-10ffafbdf652\",\"name\":\"Goto Specified Decision\",\"description\":\"Return true if a goto param has been specified, false otherwise.\",\"script\":\"LyogR290byBTcGVjaWZpZWQgRGVjaXNpb24KICogCiAqIFJldHVybiB0cnVlIGlmIGEgZ290byBwYXJhbSBoYXMgYmVlbiBzcGVjaWZpZWQsIGZhbHNlIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IHJlcXVpcmUgY29uZmlndXJhdGlvbi4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICogLSBmYWxzZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqLwooZnVuY3Rpb24gKCkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIkdvdG8gU3BlY2lmaWVkIERlY2lzaW9uOiBzdGFydCIpOwogICAgICBvdXRjb21lID0gImZhbHNlIjsKICAgICAgdmFyIHJlZmVyZXIgPSBwYXJzZVVybChyZXF1ZXN0SGVhZGVycy5nZXQoInJlZmVyZXIiKS5nZXQoMCkpOwogICAgICBpZiAocmVmZXJlci5zZWFyY2hQYXJhbS5nb3RvKSB7CiAgICAgICAgICBvdXRjb21lID0gInRydWUiOwogICAgfQogICAgbG9nZ2VyLm1lc3NhZ2UoIkdvdG8gU3BlY2lmaWVkIERlY2lzaW9uOiBlbmQgW291dGNvbWU9e31dIiwgb3V0Y29tZSk7CgogICAgLyoKICAgICAqIFBhcnNlIGEgVVJMIGludG8gaXRzIGNvbXBvbmVudHMgYW5kIG1ha2UgdGhlbSBlYXNpbHkgYWNjZXNzaWJsZSBieSBuYW1lCiAgICAgKgogICAgICogVXNlIGluIGEgU2NyaXB0ZSBEZWNpc2lvbiBOb2RlIFNjcmlwdCBhcyBmb2xsb3dzOgogICAgICogdmFyIHJlZmVyZXIgPSBwYXJzZVVybChyZXF1ZXN0SGVhZGVycy5nZXQoInJlZmVyZXIiKS5nZXQoMCkpOwogICAgICogdmFyIG9yaWdpbiA9IHJlZmVyZXIub3JpZ2luOwogICAgICogCiAgICAgKiBlLmcuOiBodHRwczovL29wZW5hbS12b2xrZXItZGV2LmZvcmdlYmxvY2tzLmNvbS9hbS9YVUkvP3JlYWxtPS9icmF2byZhdXRoSW5kZXhUeXBlPXNlcnZpY2UmYXV0aEluZGV4VmFsdWU9SW5pdGlhdGVPd25lckNsYWltIy8KICAgICAqIHsKICAgICAqICAgICBoYXNoOiAnIy8nLAogICAgICogICAgIGhvc3Q6ICdvcGVuYW0tdm9sa2VyLWRldi5mb3JnZWJsb2Nrcy5jb20nLAogICAgICogICAgIGhvc3RuYW1lOiAnb3BlbmFtLXZvbGtlci1kZXYuZm9yZ2VibG9ja3MuY29tJywKICAgICAqICAgICBocmVmOiAnaHR0cHM6Ly9vcGVuYW0tdm9sa2VyLWRldi5mb3JnZWJsb2Nrcy5jb20vYW0vWFVJLz9yZWFsbT0vYnJhdm8mYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPUluaXRpYXRlT3duZXJDbGFpbSMvJywKICAgICAqICAgICBvcmlnaW46ICdodHRwczovL29wZW5hbS12b2xrZXItZGV2LmZvcmdlYmxvY2tzLmNvbScsCiAgICAgKiAgICAgcGF0aG5hbWU6ICcvYW0vWFVJLycsCiAgICAgKiAgICAgcG9ydDogJycsCiAgICAgKiAgICAgcHJvdG9jb2w6ICdodHRwcycsCiAgICAgKiAgICAgc2VhcmNoOiAnP3JlYWxtPS9icmF2byZhdXRoSW5kZXhUeXBlPXNlcnZpY2UmYXV0aEluZGV4VmFsdWU9SW5pdGlhdGVPd25lckNsYWltJywKICAgICAqICAgICB1c2VybmFtZTogJycsCiAgICAgKiAgICAgcGFzc3dvcmQ6ICcnLAogICAgICogICAgIHNlYXJjaFBhcmFtOiB7CiAgICAgKiAgICAgICAgIHJlYWxtOiAnL2JyYXZvJywKICAgICAqICAgICAgICAgYXV0aEluZGV4VHlwZTogJ3NlcnZpY2UnLAogICAgICogICAgICAgICBhdXRoSW5kZXhWYWx1ZTogJ0luaXRpYXRlT3duZXJDbGFpbScKICAgICAqICAgICB9CiAgICAgKiB9CiAgICAgKi8KICAgIGZ1bmN0aW9uIHBhcnNlVXJsKGhyZWYpIHsKICAgICAgICB2YXIgbSA9IGhyZWYubWF0Y2goL14oKFteOlwvPyNdKyk6Pyg/OlwvXC8oKD86KFteXC8/IzpdKik6KFteXC8/IzpdKilAKT8oW15cLz8jOl0qKSg/OjooW15cLz8jOl0qKSk/KSkpPyhbXj8jXSopKFw/W14jXSopPygjLiopPyQvKSwKICAgICAgICByID0gewogICAgICAgICAgICBoYXNoOiBtWzEwXSB8fCAiIiwgICAgICAgICAgICAgICAgICAgICAgLy8gIy8KICAgICAgICAgICAgaG9zdDogbVszXSB8fCAiIiwgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wZW5hbS12b2xrZXItZGV2LmZvcmdlYmxvY2tzLmNvbQogICAgICAgICAgICBob3N0bmFtZTogbVs2XSB8fCAiIiwgICAgICAgICAgICAgICAgICAgLy8gb3BlbmFtLXZvbGtlci1kZXYuZm9yZ2VibG9ja3MuY29tCiAgICAgICAgICAgIGhyZWY6IG1bMF0gfHwgIiIsICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL29wZW5hbS12b2xrZXItZGV2LmZvcmdlYmxvY2tzLmNvbS9hbS9YVUkvP3JlYWxtPS9icmF2byZhdXRoSW5kZXhUeXBlPXNlcnZpY2UmYXV0aEluZGV4VmFsdWU9SW5pdGlhdGVPd25lckNsYWltIy8KICAgICAgICAgICAgb3JpZ2luOiBtWzFdIHx8ICIiLCAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vb3BlbmFtLXZvbGtlci1kZXYuZm9yZ2VibG9ja3MuY29tCiAgICAgICAgICAgIHBhdGhuYW1lOiBtWzhdIHx8IChtWzFdID8gIi8iIDogIiIpLCAgICAvLyAvYW0vWFVJLwogICAgICAgICAgICBwb3J0OiBtWzddIHx8ICIiLCAgICAgICAgICAgICAgICAgICAgICAgLy8gCiAgICAgICAgICAgIHByb3RvY29sOiBtWzJdIHx8ICIiLCAgICAgICAgICAgICAgICAgICAvLyBodHRwcwogICAgICAgICAgICBzZWFyY2g6IG1bOV0gfHwgIiIsICAgICAgICAgICAgICAgICAgICAgLy8gP3JlYWxtPS9icmF2byZhdXRoSW5kZXhUeXBlPXNlcnZpY2UmYXV0aEluZGV4VmFsdWU9SW5pdGlhdGVPd25lckNsYWltCiAgICAgICAgICAgIHVzZXJuYW1lOiBtWzRdIHx8ICIiLCAgICAgICAgICAgICAgICAgICAvLyAKICAgICAgICAgICAgcGFzc3dvcmQ6IG1bNV0gfHwgIiIsICAgICAgICAgICAgICAgICAgIC8vIAogICAgICAgICAgICBzZWFyY2hQYXJhbToge30gICAgICAgICAgICAgICAgICAgICAgICAgLy8geyByZWFsbTogJy9icmF2bycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGF1dGhJbmRleFR5cGU6ICdzZXJ2aWNlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgYXV0aEluZGV4VmFsdWU6ICdJbml0aWF0ZU93bmVyQ2xhaW0nIH0KICAgICAgICB9OwogICAgICAgIGlmIChyLnByb3RvY29sLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgIHIucHJvdG9jb2wgPSAiZmlsZTovLy8iICsgci5wcm90b2NvbC50b1VwcGVyQ2FzZSgpOwogICAgICAgICAgICByLm9yaWdpbiA9IHIucHJvdG9jb2wgKyAiLy8iICsgci5ob3N0OwogICAgICAgIH0KICAgICAgICBpZiAoci5zZWFyY2gubGVuZ3RoID4gMikgewogICAgICAgICAgICB2YXIgcXVlcnkgPSAoci5zZWFyY2guaW5kZXhPZignPycpID09PSAwKSA/IHIuc2VhcmNoLnN1YnN0cigxKSA6IHIuc2VhcmNoOwogICAgICAgICAgICB2YXIgdmFycyA9IHF1ZXJ5LnNwbGl0KCcmJyk7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgcGFpciA9IHZhcnNbaV0uc3BsaXQoJz0nKTsKICAgICAgICAgICAgci5zZWFyY2hQYXJhbVtkZWNvZGVVUklDb21wb25lbnQocGFpclswXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHIuaHJlZiA9IHIub3JpZ2luICsgci5wYXRobmFtZSArIHIuc2VhcmNoICsgci5oYXNoOwogICAgICAgIHJldHVybiByOwogICAgfTsKfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"b88ce1fe-2480-4fd5-8062-2bd1f4659e2e\",\"name\":\"Admin_LoadObjectByID\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBpcyBhIHV0aWxpdHkgc2NyaXB0IHRvIHNpbXBsaWZ5IGFjY2VzcyB0byBhZG1pbiBpZGVudGl0eSBwcm9wZXJ0aWVzLiBJdAogKiByZXF1aXJlcyB0aGF0IGBzaGFyZWRTdGF0ZS5faWRgIGJlIHBvcHVsYXRlZCwgd2hpY2ggY2FuIGJlIGxvYWRlZCB1c2luZyBhbgogKiBJZGVudGlmeSBFeGlzdGluZyBVc2VyIG5vZGUuCiAqLwoKZnVuY3Rpb24gdmFsKGF0dHJzLCBuYW1lKSB7CiAgaWYgKGF0dHJzLmNvbnRhaW5zS2V5KG5hbWUpKSB7CiAgICByZXR1cm4gYXR0cnMuZ2V0KG5hbWUpLml0ZXJhdG9yKCkubmV4dCgpOwogIH0KICByZXR1cm4gJyc7Cn0KCihmdW5jdGlvbigpIHsKICB2YXIgZnIgPSBuZXcgSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlcywKICAgIG9yZy5mb3JnZXJvY2suZ3VpY2UuY29yZQogICk7CgogIHdpdGggKGZyKSB7CiAgICB0cnkgewoKICAgICAgb3V0Y29tZSA9ICdGYWxzZSc7CgogICAgICBpZiAoIXNoYXJlZFN0YXRlLmNvbnRhaW5zS2V5KCdfaWQnKSkgewogICAgICAgIHRocm93ICdSZXF1aXJlZCBzaGFyZWRTdGF0ZSBwcm9wZXJ0eSBfaWQgaXMgbWlzc2luZyc7CiAgICAgIH0gICAgICAKICAgICAgCiAgICAgIHZhciByZWFsbSA9IHNoYXJlZFN0YXRlLmdldCgncmVhbG0nKTsKICAgICAgdmFyIHV1aWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogICAgICAKICAgICAgdmFyIGlkZW50aXR5UHJvdmlkZXIgPSBJbmplY3RvckhvbGRlci5nZXRJbnN0YW5jZShJZGVudGl0eVByb3ZpZGVyKTsKICAgICAgdmFyIGlkZW50aXR5ID0gaWRlbnRpdHlQcm92aWRlci5nZXRJZGVudGl0eSh1dWlkLCByZWFsbSk7CiAgICAgIHZhciBhdHRycyA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZXMoKTsKICAgICAgCiAgICAgIHNoYXJlZFN0YXRlLnB1dCgnYWRtaW5PYmplY3QnLCB7CiAgICAgICAgZ2l2ZW5OYW1lOiB2YWwoYXR0cnMsICdnaXZlbk5hbWUnKSwgICAgICAgIAogICAgICAgIHNuOiB2YWwoYXR0cnMsICdzbicpLAogICAgICAgIG1haWw6IHZhbChhdHRycywgJ21haWwnKSwKICAgICAgICBpbnZpdGVEYXRlOiB2YWwoYXR0cnMsICdmci1pZG0taW52aXRlRGF0ZScpLAogICAgICAgIG9uYm9hcmREYXRlOiB2YWwoYXR0cnMsICdmci1pZG0tb25ib2FyZERhdGUnKSAgICAgICAgCiAgICAgIH0pOwoKICAgICAgbG9nZ2VyLm1lc3NhZ2UoJ0xvYWRlZCBhZG1pbiBvYmplY3QgZm9yIGlkOiB7fScsIHV1aWQpOwoKICAgICAgb3V0Y29tZSA9ICdUcnVlJzsKCiAgICB9IGNhdGNoIChlKSB7CiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGxvYWQgYWRtaW4gb2JqZWN0OiB7fScsIGUpOwogICAgfQogIH0KfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"d22f9a0c-426a-4466-b95e-d0f125b0d5fa\",\"name\":\"OAuth2 Access Token Modification Script\",\"description\":\"Default global script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCihmdW5jdGlvbiAoKSB7CiAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogIC8vIE5PVEU6IHNlc3Npb24gbWF5IG5vdCBiZSBhdmFpbGFibGUgZm9yIG5vbi1pbnRlcmFjdGl2ZSBhdXRob3JpemF0aW9uIGdyYW50cy4KICBpZiAoc2Vzc2lvbikgewogICAgdHJ5IHsKICAgICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ2lwX2FkZHJlc3MnLCBzZXNzaW9uLmdldFByb3BlcnR5KCdIb3N0JykpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byByZXRyaWV2ZSBzZXNzaW9uIHByb3BlcnR5IHZhbHVlLiAnICsgZSk7CiAgICB9CiAgfQp9KCkpOwoKLyogRVhBTVBMRQooZnVuY3Rpb24gKCkgewogICAgdmFyIGZySmF2YSA9IEphdmFJbXBvcnRlcigKICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCwKICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVzcG9uc2UKICAgICk7CgogICAgLy8gQWx3YXlzIGluY2x1ZGVzIHRoaXMgZmllbGQgaW4gdGhlIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ2tleTEnLCAndmFsdWUxJyk7CgogICAgLy8gUmVjZWl2ZXMgYW5kIGFkZHMgdG8gdGhlIGFjY2VzcyB0b2tlbiBhZGRpdGlvbmFsIHZhbHVlcyBieSBwZXJmb3JtaW5nIGEgUkVTVCBjYWxsIHRvIGFuIGV4dGVybmFsIHNlcnZpY2UuCiAgICAvLyBXQVJOSU5HOiBCZWxvdywgeW91IHdpbGwgZmluZCBhIHJlZmVyZW5jZSB0byBhIHRoaXJkLXBhcnR5IHNpdGUsIHdoaWNoIGlzIHByb3ZpZGVkIG9ubHkgYXMgYW4gZXhhbXBsZS4KICAgIHZhciB1cmkgPSAnaHR0cHM6Ly9qc29ucGxhY2Vob2xkZXIudHlwaWNvZGUuY29tL3Bvc3RzJzsKCiAgICB0cnkgewogICAgICAgIHZhciByZXF1ZXN0ID0gbmV3IGZySmF2YS5SZXF1ZXN0KCk7CgogICAgICAgIC8vIFlvdSBjYW4gY2hhaW4gbWV0aG9kcyB0aGF0IHJldHVybiB0aGUgcmVxdWVzdCBvYmplY3QuCiAgICAgICAgcmVxdWVzdC5zZXRVcmkodXJpKQogICAgICAgICAgICAuc2V0TWV0aG9kKCdQT1NUJykKICAgICAgICAgICAgLnNldEVudGl0eShKU09OLnN0cmluZ2lmeSh7CiAgICAgICAgICAgICAgICB1cGRhdGVkRmllbGRzOiB7CiAgICAgICAgICAgICAgICAgICAga2V5MjogJ3ZhbHVlMicsCiAgICAgICAgICAgICAgICAgICAga2V5MzogJ3ZhbHVlMycKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkpOwoKICAgICAgICAvLyBZb3UgY2FuIGNhbGwgYSBtZXRob2Qgd2hlbiBjaGFpbmluZyBpcyBub3QgcG9zc2libGUuCiAgICAgICAgcmVxdWVzdC5nZXRIZWFkZXJzKCkuYWRkKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCcpOwoKICAgICAgICAvLyBTZW5kcyB0aGUgcmVxdWVzdCBhbmQgcmVjZWl2ZXMgdGhlIHJlc3BvbnNlLgogICAgICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXRPclRocm93KCk7CgogICAgICAgIC8vIENoZWNrcyBpZiB0aGUgcmVzcG9uc2Ugc3RhdHVzIGlzIGFzIGV4cGVjdGVkLgogICAgICAgIGlmIChyZXNwb25zZS5nZXRTdGF0dXMoKSA9PT0gb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlN0YXR1cy5DUkVBVEVEKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKCiAgICAgICAgICAgIC8vIFNldCBtdWx0aXBsZSB0b2tlbiBmaWVsZHMgYXQgb25jZS4KICAgICAgICAgICAgYWNjZXNzVG9rZW4uc2V0RmllbGRzKHJlc3VsdC51cGRhdGVkRmllbGRzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBvYnRhaW4gYWNjZXNzIHRva2VuIG1vZGlmaWNhdGlvbnMuIFN0YXR1czogJyArIHJlc3BvbnNlLmdldFN0YXR1cygpICsgJy4gQ29udGVudDogJyArIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgICAgICB9CiAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKCdUaGUgcmVxdWVzdCBwcm9jZXNzaW5nIHdhcyBpbnRlcnJ1cHRlZC4gJyArIGUpOwoKICAgICAgICAvLyBUaGUgYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbHMgd2l0aCB0aGUgSFRUUCA1MDAgZXJyb3IgaW4gdGhpcyBjYXNlLgogICAgICAgIHRocm93ICgnVW5hYmxlIHRvIG9idGFpbiByZXNwb25zZSBmcm9tOiAnICsgdXJpKTsKICAgIH0KCiAgICAvLyBBZGRzIG5ldyBmaWVsZHMgY29udGFpbmluZyBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWVzIHRvIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnbWFpbCcsIGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnbWFpbCcpKTsKICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdwaG9uZScsIGlkZW50aXR5LmdldEF0dHJpYnV0ZSgndGVsZXBob25lTnVtYmVyJykudG9BcnJheSgpWzBdKTsKCiAgICAvLyBBZGRzIG5ldyBmaWVsZHMgY29udGFpbmluZyB0aGUgc2Vzc2lvbiBwcm9wZXJ0eSB2YWx1ZXMuCiAgICAvLyBOT1RFOiBzZXNzaW9uIG1heSBub3QgYmUgYXZhaWxhYmxlIGZvciBub24taW50ZXJhY3RpdmUgYXV0aG9yaXphdGlvbiBncmFudHMuCiAgICBpZiAoc2Vzc2lvbikgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdpcEFkZHJlc3MnLCBzZXNzaW9uLmdldFByb3BlcnR5KCdIb3N0JykpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gcmV0cmlldmUgc2Vzc2lvbiBwcm9wZXJ0eSB2YWx1ZS4gJyArIGUpOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBSZW1vdmVzIGEgbmF0aXZlIGZpZWxkIGZyb20gdGhlIHRva2VuIGVudHJ5LCB0aGF0IHdhcyBzZXQgYnkgQU0uCiAgICAvLyBXQVJOSU5HOiByZW1vdmluZyBuYXRpdmUgZmllbGRzIGZyb20gdGhlIHRva2VuIG1heSByZXN1bHQgaW4gbG9zcyBvZiBmdW5jdGlvbmFsaXR5LgogICAgLy8gYWNjZXNzVG9rZW4ucmVtb3ZlVG9rZW5OYW1lKCkKCiAgICAvLyBObyByZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQuIExldCBpdCBiZSB1bmRlZmluZWQuCn0oKSk7Ciov\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"e0666b8b-f625-4047-89d8-e7e91151027f\",\"name\":\"Twilio Voice OTP Sender\",\"description\":\"Twilio Voice OTP Sender\",\"script\":\"LyogVHdpbGlvIFZvaWNlIE9UUCBTZW5kZXIKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogVGhpcyBzY3JpcHQgd2lsbCBkZWxpdmVyIHRoZSBPVFAgdmlhIHZvaWNlIHRvIHRoZSBwaG9uZSBudW1iZXIgaW4gdGhlIHVzZXIncyBwcm9maWxlLgogKiAKICogVGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIG5vdCB3b3JrIHByb3Blcmx5IGFzIGlzLiAKICogSXQgcmVxdWlyZXMgdGhlIElkZW50aWZ5IEV4aXN0aW5nIFVzZXIgbm9kZSBhbmQgSE9UUCBHZW5lcmF0b3Igbm9kZSBiZWZvcmUgaXQgaXMgYmVpbmcgY2FsbGVkLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHNlbnQKICogLSBmYWlsZWQKICovCmxvZ2dlci53YXJuaW5nKCJUd2lsaW8gVm9pY2UgT1RQIFNlbmRlcjogc3RhcnQiKTsKCmlmIChzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpICYmIGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKSwgInRlbGVwaG9uZU51bWJlciIpLml0ZXJhdG9yKCkuaGFzTmV4dCgpKSB7CiAgICB2YXIgQmFzZTY0PXtfa2V5U3RyOiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIsZW5jb2RlOmZ1bmN0aW9uKGlucHV0KXt2YXIgb3V0cHV0PSIiO3ZhciBjaHIxLGNocjIsY2hyMyxlbmMxLGVuYzIsZW5jMyxlbmM0O3ZhciBpPTA7aW5wdXQ9QmFzZTY0Ll91dGY4X2VuY29kZShpbnB1dCk7d2hpbGUoaTxpbnB1dC5sZW5ndGgpe2NocjE9aW5wdXQuY2hhckNvZGVBdChpKyspO2NocjI9aW5wdXQuY2hhckNvZGVBdChpKyspO2NocjM9aW5wdXQuY2hhckNvZGVBdChpKyspO2VuYzE9Y2hyMT4+MjtlbmMyPShjaHIxJjMpPDw0fGNocjI+PjQ7ZW5jMz0oY2hyMiYxNSk8PDJ8Y2hyMz4+NjtlbmM0PWNocjMmNjM7aWYoaXNOYU4oY2hyMikpe2VuYzM9ZW5jND02NH1lbHNlIGlmKGlzTmFOKGNocjMpKXtlbmM0PTY0fW91dHB1dD1vdXRwdXQrdGhpcy5fa2V5U3RyLmNoYXJBdChlbmMxKSt0aGlzLl9rZXlTdHIuY2hhckF0KGVuYzIpK3RoaXMuX2tleVN0ci5jaGFyQXQoZW5jMykrdGhpcy5fa2V5U3RyLmNoYXJBdChlbmM0KX1yZXR1cm4gb3V0cHV0fSxkZWNvZGU6ZnVuY3Rpb24oaW5wdXQpe3ZhciBvdXRwdXQ9IiI7dmFyIGNocjEsY2hyMixjaHIzO3ZhciBlbmMxLGVuYzIsZW5jMyxlbmM0O3ZhciBpPTA7aW5wdXQ9aW5wdXQucmVwbGFjZSgvW15BLVphLXowLTlcK1wvXD1dL2csIiIpO3doaWxlKGk8aW5wdXQubGVuZ3RoKXtlbmMxPXRoaXMuX2tleVN0ci5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtlbmMyPXRoaXMuX2tleVN0ci5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtlbmMzPXRoaXMuX2tleVN0ci5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtlbmM0PXRoaXMuX2tleVN0ci5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtjaHIxPWVuYzE8PDJ8ZW5jMj4+NDtjaHIyPShlbmMyJjE1KTw8NHxlbmMzPj4yO2NocjM9KGVuYzMmMyk8PDZ8ZW5jNDtvdXRwdXQ9b3V0cHV0K1N0cmluZy5mcm9tQ2hhckNvZGUoY2hyMSk7aWYoZW5jMyE9NjQpe291dHB1dD1vdXRwdXQrU3RyaW5nLmZyb21DaGFyQ29kZShjaHIyKX1pZihlbmM0IT02NCl7b3V0cHV0PW91dHB1dCtTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjMpfX1vdXRwdXQ9QmFzZTY0Ll91dGY4X2RlY29kZShvdXRwdXQpO3JldHVybiBvdXRwdXR9LF91dGY4X2VuY29kZTpmdW5jdGlvbihzdHJpbmcpe3N0cmluZz1zdHJpbmcucmVwbGFjZSgvXHJcbi9nLCJcbiIpO3ZhciB1dGZ0ZXh0PSIiO2Zvcih2YXIgbj0wO248c3RyaW5nLmxlbmd0aDtuKyspe3ZhciBjPXN0cmluZy5jaGFyQ29kZUF0KG4pO2lmKGM8MTI4KXt1dGZ0ZXh0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpfWVsc2UgaWYoYz4xMjcmJmM8MjA0OCl7dXRmdGV4dCs9U3RyaW5nLmZyb21DaGFyQ29kZShjPj42fDE5Mik7dXRmdGV4dCs9U3RyaW5nLmZyb21DaGFyQ29kZShjJjYzfDEyOCl9ZWxzZXt1dGZ0ZXh0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGM+PjEyfDIyNCk7dXRmdGV4dCs9U3RyaW5nLmZyb21DaGFyQ29kZShjPj42JjYzfDEyOCk7dXRmdGV4dCs9U3RyaW5nLmZyb21DaGFyQ29kZShjJjYzfDEyOCl9fXJldHVybiB1dGZ0ZXh0fSxfdXRmOF9kZWNvZGU6ZnVuY3Rpb24odXRmdGV4dCl7dmFyIHN0cmluZz0iIjt2YXIgaT0wO3ZhciBjPWMxPWMyPTA7d2hpbGUoaTx1dGZ0ZXh0Lmxlbmd0aCl7Yz11dGZ0ZXh0LmNoYXJDb2RlQXQoaSk7aWYoYzwxMjgpe3N0cmluZys9U3RyaW5nLmZyb21DaGFyQ29kZShjKTtpKyt9ZWxzZSBpZihjPjE5MSYmYzwyMjQpe2MyPXV0ZnRleHQuY2hhckNvZGVBdChpKzEpO3N0cmluZys9U3RyaW5nLmZyb21DaGFyQ29kZSgoYyYzMSk8PDZ8YzImNjMpO2krPTJ9ZWxzZXtjMj11dGZ0ZXh0LmNoYXJDb2RlQXQoaSsxKTtjMz11dGZ0ZXh0LmNoYXJDb2RlQXQoaSsyKTtzdHJpbmcrPVN0cmluZy5mcm9tQ2hhckNvZGUoKGMmMTUpPDwxMnwoYzImNjMpPDw2fGMzJjYzKTtpKz0zfX1yZXR1cm4gc3RyaW5nfX07CgogICAgLyogQkVHSU4gU0NSSVBUIENPTkZJR1VSQVRJT04KICAgICAqCiAgICAgKiBSRVBMQUNFIFdJVEggWU9VUiBPV04gQVpVUkUgQUQgU0VUVElOR1MKICAgICAqLwogICAgdmFyIFRXSUxJT19BUElfU0lEID0gIkFDNzUwNDE1ZTMxNjNhMmU1N2I3YWVlYTdlZWQ4MmQ5NDQiOwogICAgdmFyIFRXSUxJT19BUElfVE9LRU4gPSAiZDM2YTcxOWM5NGI0YmUwODU5MmQ2OWVjNGY4MGE1YmIiOwogICAgdmFyIFRXSUxJT19BUElfRlJPTSA9ICIrMTMxNzY0NDMxMDciOwogICAgLyoKICAgICAqIEVORCBTQ1JJUFQgQ09ORklHVVJBVElPTgogICAgICovCiAgCiAgICAvLyBUd2lsaW8gU01TIE1lc3NhZ2UgQVBJIENvbmZpZ3VyYXRpb24KICAgIHZhciBUV0lMSU9fQVBJX1VSSSA9ICJodHRwczovL2FwaS50d2lsaW8uY29tLzIwMTAtMDQtMDEvQWNjb3VudHMvIi5jb25jYXQoVFdJTElPX0FQSV9TSUQpLmNvbmNhdCgiL0NhbGxzLmpzb24iKTsgICAgCiAgICB2YXIgVFdJTElPX0FQSV9UTyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKSwgInRlbGVwaG9uZU51bWJlciIpLml0ZXJhdG9yKCkubmV4dCgpOwogICAgICB2YXIgT1RQID0gc2hhcmVkU3RhdGUuZ2V0KCJvbmVUaW1lUGFzc3dvcmQiKS5zcGxpdCgiIikuam9pbigiOyAiKTsKICAgIHZhciBUV0lMSU9fQVBJX1RXSU1MID0gIjxSZXNwb25zZT48UGF1c2UgbGVuZ3RoPScxJy8+PFNheSB2b2ljZT0nYWxpY2UnPllvdXIgb25lLXRpbWUgcGFzc3dvcmQgaXMgIi5jb25jYXQoT1RQKS5jb25jYXQoIjwvU2F5PjxQYXVzZSBsZW5ndGg9JzEnLz48U2F5PllvdXIgb25lLXRpbWUgcGFzc3dvcmQgaXMgIikuY29uY2F0KE9UUCkuY29uY2F0KCI8L1NheT48UGF1c2UgbGVuZ3RoPScxJy8+PFNheT5Hb29kYnllPC9TYXk+PC9SZXNwb25zZT4iKTsKICAgIC8vbG9nZ2VyLndhcm5pbmcoIlR3aWxpbyBWb2ljZSBPVFAgU2VuZGVyOiBUbzogIi5jb25jYXQoVFdJTElPX0FQSV9UTykpOwogICAgLy9sb2dnZXIud2FybmluZygiVHdpbGlvIFZvaWNlIE9UUCBTZW5kZXI6IFR3aW1sOiAiLmNvbmNhdChUV0lMSU9fQVBJX1RXSU1MKSk7CgogICAgdmFyIEFVVEhaID0gIkJhc2ljICIuY29uY2F0KEJhc2U2NC5lbmNvZGUoVFdJTElPX0FQSV9TSUQuY29uY2F0KCc6JykuY29uY2F0KFRXSUxJT19BUElfVE9LRU4pKSk7CiAgICAvL2xvZ2dlci53YXJuaW5nKCJUd2lsaW8gU01TIE9UUCBTZW5kZXI6IEFVVEhaIC0gIi5jb25jYXQoQVVUSFopKTsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRNZXRob2QoJ1BPU1QnKTsKICAgIHJlcXVlc3Quc2V0VXJpKFRXSUxJT19BUElfVVJJKTsKICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOwogICAgcmVxdWVzdC5nZXRIZWFkZXJzKCkuYWRkKCJBdXRob3JpemF0aW9uIiwgQVVUSFopOwogICAgdmFyIHBhcmFtcyA9IHJlcXVlc3QuZ2V0Rm9ybSgpOwogICAgcGFyYW1zLmFkZCgiRnJvbSIsIFRXSUxJT19BUElfRlJPTSk7CiAgICBwYXJhbXMuYWRkKCJUd2ltbCIsIFRXSUxJT19BUElfVFdJTUwpOwogICAgcGFyYW1zLmFkZCgiVG8iLCBUV0lMSU9fQVBJX1RPKTsKICAgIHJlcXVlc3QuZ2V0RW50aXR5KCkuc2V0U3RyaW5nKHBhcmFtcy50b1N0cmluZygpKTsKCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAvL2xvZ2dlci53YXJuaW5nKCJUd2lsaW8gU01TIE9UUCBTZW5kZXI6IEpTT04gcmVzdWx0OiAiICsgSlNPTi5zdHJpbmdpZnkocmVzdWx0KSk7CgogICAgaWYgKHJlc3VsdFsic3RhdHVzIl09PSJxdWV1ZWQiKSB7CiAgICAgICAgb3V0Y29tZSA9IHJlc3VsdFsic3RhdHVzIl07CiAgICAgICAgbG9nZ2VyLmVycm9yKCJUd2lsaW8gVm9pY2UgT1RQIFNlbmRlcjogc3RhdHVzID0gIi5jb25jYXQocmVzdWx0WyJzdGF0dXMiXSkpOwogICAgICAgIGxvZ2dlci5lcnJvcigiVHdpbGlvIFZvaWNlIE9UUCBTZW5kZXI6IHN1YnJlc291cmNlX3VyaXMgPSAiLmNvbmNhdChyZXN1bHRbInN1YnJlc291cmNlX3VyaXMiXSkpOwogICAgICAgIGxvZ2dlci5lcnJvcigiVHdpbGlvIFZvaWNlIE9UUCBTZW5kZXI6IG91dGNvbWUgPSAiLmNvbmNhdChvdXRjb21lKSk7CiAgICB9IGVsc2UgewogICAgICAgIG91dGNvbWUgPSAiZmFpbGVkIjsKICAgICAgICBsb2dnZXIuZXJyb3IoIlR3aWxpbyBWb2ljZSBPVFAgU2VuZGVyOiBzdGF0dXMgPSAiLmNvbmNhdChyZXN1bHRbInN0YXR1cyJdKSk7CiAgICAgICAgbG9nZ2VyLmVycm9yKCJUd2lsaW8gVm9pY2UgT1RQIFNlbmRlcjogY29kZSA9ICIuY29uY2F0KHJlc3VsdFsiY29kZSJdKSk7CiAgICAgICAgbG9nZ2VyLmVycm9yKCJUd2lsaW8gVm9pY2UgT1RQIFNlbmRlcjogbW9yZV9pbmZvID0gIi5jb25jYXQocmVzdWx0WyJtb3JlX2luZm8iXSkpOwogICAgICAgIGxvZ2dlci5lcnJvcigiVHdpbGlvIFZvaWNlIE9UUCBTZW5kZXI6IG1lc3NhZ2UgPSAiLmNvbmNhdChyZXN1bHRbIm1lc3NhZ2UiXSkpOwogICAgICAgIGxvZ2dlci5lcnJvcigiVHdpbGlvIFZvaWNlIE9UUCBTZW5kZXI6IG91dGNvbWUgPSAiLmNvbmNhdChvdXRjb21lKSk7CiAgICB9Cn0gZWxzZSB7CiAgICAgIG91dGNvbWUgPSAiZmFpbGVkIjsKICAgICAgbG9nZ2VyLmVycm9yKCJUd2lsaW8gVm9pY2UgT1RQIFNlbmRlcjogTm8gdXNlciBvciBwaG9uZSBudW1iZXIgZm91bmQhIFVzZSAnSWRlbnRpZnkgRXhpc3RpbmcgVXNlciBub2RlIGJlZm9yZSB0aGlzIHNjcmlwdCB0byBwb3B1bGF0ZSB0aGUgdXNlcidzIF9pZCBpbiBzaGFyZWQgc3RhdGUhJyIpOwogICAgbG9nZ2VyLmVycm9yKCJUd2lsaW8gVm9pY2UgT1RQIFNlbmRlcjogb3V0Y29tZSA9ICIuY29uY2F0KG91dGNvbWUpKTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"0ab1dd57-eafd-4063-8e60-65bfac8108b7\",\"name\":\"Check Existing Session\",\"description\":\"Check existing session and set username\",\"script\":\"aWYgKHR5cGVvZiBleGlzdGluZ1Nlc3Npb24gIT09ICd1bmRlZmluZWQnKQp7CiAgb3V0Y29tZSA9ICJoYXNTZXNzaW9uIjsKICBzaGFyZWRTdGF0ZS5wdXQoInVzZXJuYW1lIiwgZXhpc3RpbmdTZXNzaW9uLmdldCgiVXNlcklkIikpOwogIHNoYXJlZFN0YXRlLnB1dCgiX2lkIiwgZXhpc3RpbmdTZXNzaW9uLmdldCgiVXNlcklkIikpOwogIGlmIChzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKSkgewogICAgc2hhcmVkU3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikucHV0KCJ1c2VyTmFtZSIsIGV4aXN0aW5nU2Vzc2lvbi5nZXQoIlVzZXJJZCIpKTsKICB9CiAgZWxzZSB7CiAgICBzaGFyZWRTdGF0ZS5wdXQoIm9iamVjdEF0dHJpYnV0ZXMiLCB7dXNlck5hbWU6IGV4aXN0aW5nU2Vzc2lvbi5nZXQoIlVzZXJJZCIpfSk7CiAgfQp9CmVsc2UKewogIG91dGNvbWUgPSAibm9TZXNzaW9uIjsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"92edf2c7-0bab-412c-a0da-82ad4f04505b\",\"name\":\"Collect Extra Fields\",\"description\":\"null\",\"script\":\"LyogQ29sbGVjdCBFeHRyYSBGaWVsZHMKICogCiAqIENvbGxlY3QgZXh0cmEgZmllbGRzIG5vdCBwYXJ0IG9mIHRoZSB1c2VyIHByb2ZpbGUuCiAqIAogKiBUaGlzIHNjcmlwdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIG91dGNvbWUgPSAndHJ1ZSc7CiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLk5hbWVDYWxsYmFjawogICAgKQogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLk5hbWVDYWxsYmFjaygnbW9kYWxpdHknKSwKICAgICAgICAgICAgbmV3IGZyLk5hbWVDYWxsYmFjaygnand0VG9rZW4nKQogICAgICAgICkuYnVpbGQoKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICAgdmFyIG1vZGFsaXR5ID0gY2FsbGJhY2tzLmdldCgwKS5nZXROYW1lKCk7CiAgICAgICAgICB2YXIgand0VG9rZW4gPSBjYWxsYmFja3MuZ2V0KDEpLmdldE5hbWUoKTsKICAgICAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ21vZGFsaXR5JywgbW9kYWxpdHkpOwogICAgICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgnand0VG9rZW4nLCBqd3RUb2tlbik7CiAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgIH0KfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"71b3c70b-920c-464b-a918-4c86eaaddccd\",\"name\":\"Dropdown\",\"description\":\"Render a dropdown\",\"script\":\"LyogRHJvcGRvd24KICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogUmVuZGVyIGEgZHJvcGRvd24gc2VsZWN0b3IKICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gInRydWUiOwogIHZhciBjaG9pY2VzID0gWyIgIiwgIlJlZCBwaWxsIiwgIkJsdWUgcGlsbCIsICJTdGVhayIsICJSYWJiaXQgaG9sZSJdOwogIAogIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DaG9pY2VDYWxsYmFjawogICkKCiAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKFsKICAgICAgbmV3IGZyLkNob2ljZUNhbGxiYWNrKCJNYWtlIHlvdXIgY2hvaWNlIiwgY2hvaWNlcywgMCwgZmFsc2UpCiAgICBdKS5idWlsZCgpOwogIH0gZWxzZSB7CiAgICB2YXIgY2hvaWNlID0gcGFyc2VJbnQoY2FsbGJhY2tzLmdldCgwKS5nZXRTZWxlY3RlZEluZGV4ZXMoKVswXSk7CiAgICBub2RlU3RhdGUucHV0U2hhcmVkKCJjaG9pY2UiLCBjaG9pY2VzW2Nob2ljZV0pOwogICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"cf3515f0-8278-4ee3-a530-1bad7424c416\",\"name\":\"Alpha OIDC Claims Script\",\"description\":\"Default alpha realm script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"5b553f58-16bd-42b7-a782-4a981a66dbd4\",\"name\":\"Routed IDP Persist Decision\",\"description\":\"Branch based on the IDP setting.\",\"script\":\"LyogUm91dGVkIElEUCBQZXJzaXN0IERlY2lzaW9uCiAqIAogKiBCcmFuY2ggYmFzZWQgb24gdGhlIElEUCBzZXR0aW5nLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqIC0gZmFsc2UKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKi8KKGZ1bmN0aW9uICgpIHsKICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlJvdXRlZCBJRFAgUGVyc2lzdCBEZWNpc2lvbjogU3RhcnQiKTsKICAgICAgb3V0Y29tZSA9ICJmYWxzZSI7CiAgICAgIHZhciByb3V0ZWRJRFAgPSBzaGFyZWRTdGF0ZS5nZXQoInJvdXRlZElEUHMiKS5nZXQoMCk7CiAgICAgIGlmIChyb3V0ZWRJRFApIHsKICAgICAgICBvdXRjb21lID0gIiIuY29uY2F0KHJvdXRlZElEUC5nZXQoImlkcFBlcnNpc3QiKSk7CiAgICB9CiAgICAgIGxvZ2dlci5tZXNzYWdlKCJSb3V0ZWQgSURQIFBlcnNpc3QgRGVjaXNpb246IERvbmUgW291dGNvbWU9e31dIiwgb3V0Y29tZSk7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"424da748-82cc-4b54-be6f-82bd64d82a74\",\"name\":\"Yahoo Profile Normalization\",\"description\":\"Normalizes raw profile data from Yahoo\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"653b70b0-a23d-403a-933b-911371cf84c0\",\"name\":\"Admin_PrivacyPolicy\",\"description\":\"Returns privacy policy collection\",\"script\":\"dmFyIGp1cmlzZGljdGlvbnMgPSBbCiAgewogICAgbmFtZTogJ0F1c3RyYWxpYScsCiAgICB1cmw6ICdodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2tub3dsZWRnZS9pZGVudGl0eS1jbG91ZC9hcnRpY2xlL2E5MjQ3MjU3OCcKICB9LAogIHsKICAgIG5hbWU6ICdCcmF6aWwnLAogICAgdXJsOiAnaHR0cHM6Ly93d3cuZm9yZ2Vyb2NrLmNvbS9wcml2YWN5LXBvbGljeScKICB9LAogIHsKICAgIG5hbWU6ICdDYWxpZm9ybmlhJywKICAgIHVybDogJ2h0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20va25vd2xlZGdlL2lkZW50aXR5LWNsb3VkL2FydGljbGUvYTY3NTUyODQzJwogIH0sCiAgewogICAgbmFtZTogJ0NhbmFkYScsCiAgICB1cmw6ICdodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2tub3dsZWRnZS9pZGVudGl0eS1jbG91ZC9hcnRpY2xlL2E5MjQ3MjU3OCcKICB9LAogIHsKICAgIG5hbWU6ICdFdXJvcGVhbiBVbmlvbicsCiAgICB1cmw6ICdodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2tub3dsZWRnZS9pZGVudGl0eS1jbG91ZC9hcnRpY2xlL2EyODU4MDgyOCcKICB9LAogIHsKICAgIG5hbWU6ICdIb25nIEtvbmcnLAogICAgdXJsOiAnaHR0cHM6Ly93d3cuZm9yZ2Vyb2NrLmNvbS9yZXNvdXJjZXMvdmlldy8xMDk4Mjc0NjIvb3ZlcnZpZXcvaWRlbnRpdHktY2xvdWQtcHJpdmFjeS5wZGYnCiAgfSwKICB7CiAgICBuYW1lOiAnSW5kb25lc2lhJywKICAgIHVybDogJ2h0dHBzOi8vd3d3LmZvcmdlcm9jay5jb20vcmVzb3VyY2VzL3ZpZXcvMTA5ODI3NDYyL292ZXJ2aWV3L2lkZW50aXR5LWNsb3VkLXByaXZhY3kucGRmJwogIH0sCiAgewogICAgbmFtZTogJ05ldyBaZWFsYW5kJywKICAgIHVybDogJ2h0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20va25vd2xlZGdlL2lkZW50aXR5LWNsb3VkL2FydGljbGUvYTkyNDcyNTc4JwogIH0sCiAgewogICAgbmFtZTogJ1NpbmdhcG9yZScsCiAgICB1cmw6ICdodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2tub3dsZWRnZS9pZGVudGl0eS1jbG91ZC9hcnRpY2xlL2E5MjQ3MjU3OCcKICB9LAogIHsKICAgIG5hbWU6ICdVbml0ZWQgS2luZ2RvbScsCiAgICB1cmw6ICdodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2tub3dsZWRnZS9pZGVudGl0eS1jbG91ZC9hcnRpY2xlL2EyODU4MDgyOCcKICB9LAogIHsKICAgIG5hbWU6ICdVbml0ZWQgU3RhdGVzJywKICAgIHVybDogJ2h0dHBzOi8vd3d3LmZvcmdlcm9jay5jb20vcHJpdmFjeS1wb2xpY3knCiAgfSwKICB7CiAgICBuYW1lOiAnUmVzdCBvZiB0aGUgV29ybGQnLAogICAgdXJsOiAnaHR0cHM6Ly93d3cuZm9yZ2Vyb2NrLmNvbS9wcml2YWN5LXBvbGljeScKICB9Cl07Cgp2YXIgdG9rZW4gPSBnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4Jyk7CnZhciBpbnB1dElkID0gJ2p1cmlzZGljdGlvbi1pbnB1dC0nLmNvbmNhdCh0b2tlbik7CnZhciBzZWxlY3RJZCA9ICdqdXJpc2RpY3Rpb24tc2VsZWN0LScuY29uY2F0KHRva2VuKTsKCi8vIEJ1aWxkIHRoZSBoZWFkZXIgYW5kIGluc3RydWN0aW9ucwp2YXIgbWVzc2FnZSA9ICI8aDIgY2xhc3M9J2gyJz5BY2NlcHQgUHJpdmFjeSBQb2xpY3k8L2gyPjxkaXYgc3R5bGU9J21hcmdpbi1ib3R0b206MWVtJz5TZWxlY3QgeW91ciByZWdpb24gb2YgcmVzaWRlbmNlIHRvIHJldmlldyB0aGUgYXBwbGljYWJsZSBwcml2YWN5IHBvbGljeS48L2Rpdj4iOwoKLy8gQnVpbGQgdGhlIGp1cmlzZGljdGlvbiBkcm9wZG93bgp2YXIgZHJvcGRvd24gPSAiPHNlbGVjdCBpZD0nIi5jb25jYXQoc2VsZWN0SWQpLmNvbmNhdCgiJyBjbGFzcz0nY3VzdG9tLXNlbGVjdCcgb25jaGFuZ2U9J2RvY3VtZW50Ll9vbkp1cmlzZGljdGlvbkNoYW5nZSgpJz48b3B0aW9uIHZhbHVlPScnPlJlZ2lvbiBvZiByZXNpZGVuY2U8L29wdGlvbj4iKTsKZm9yICh2YXIgaSA9IDA7IGkgPCBqdXJpc2RpY3Rpb25zLmxlbmd0aDsgaSsrKSB7CiAgdmFyIGogPSBqdXJpc2RpY3Rpb25zW2ldOwogIGRyb3Bkb3duID0gZHJvcGRvd24uY29uY2F0KCI8b3B0aW9uIHZhbHVlPSciKS5jb25jYXQoai5uYW1lKS5jb25jYXQoIicgZGF0YS11cmw9JyIpLmNvbmNhdChqLnVybCkuY29uY2F0KCInPiIpLmNvbmNhdChqLm5hbWUpLmNvbmNhdCgiPC9vcHRpb24+Iik7Cn0KZHJvcGRvd24gPSBkcm9wZG93bi5jb25jYXQoIjwvc2VsZWN0PiIpOwoKLy8gQnVpbGQgdGhlIGNvbmZpcm1hdGlvbiBjaGVja2JveCB3aXRoIHBvbGljeSBsaW5rCnZhciBjb25maXJtID0gIjxkaXYgaWQ9J2NvbmZpcm0td3JhcHBlcicgY2xhc3M9J2N1c3RvbS1jb250cm9sIGN1c3RvbS1jaGVja2JveCcgc3R5bGU9J3BhZGRpbmc6MXJlbTt2aXNpYmlsaXR5OmhpZGRlbic+Ii5jb25jYXQoCiAgIjxpbnB1dCBpZD0nY29uZmlybS1jaGVjaycgdHlwZT0nY2hlY2tib3gnIGNsYXNzPSdjdXN0b20tY29udHJvbC1pbnB1dCcgb25jaGFuZ2U9J2RvY3VtZW50Ll9zZXROZXh0QnV0dG9uKCknPiIpLmNvbmNhdCgKICAiPGxhYmVsIGNsYXNzPSdjdXN0b20tY29udHJvbC1sYWJlbCcgZm9yPSdjb25maXJtLWNoZWNrJz4iKS5jb25jYXQoCiAgIkkgYWdyZWUgdG8gRm9yZ2VSb2NrJ3MgPGEgaWQ9J3BvbGljeS1saW5rJyB0YXJnZXQ9X2JsYW5rIGhyZWY9JyIgKyBqdXJpc2RpY3Rpb25zWzBdLnVybCArICInPlByaXZhY3kgUG9saWN5PC9hPiIpLmNvbmNhdCgKICAiPC9sYWJlbD4iKS5jb25jYXQoCiI8L2Rpdj4iKTsKCnZhciBodG1sID0gbWVzc2FnZSArIGRyb3Bkb3duICsgY29uZmlybTsKCnZhciBzY3JpcHQgPQogICdkb2N1bWVudC5fb25KdXJpc2RpY3Rpb25DaGFuZ2UgPSBmdW5jdGlvbigpIHsnLmNvbmNhdCgKICAnICB2YXIganVyaXNkaWN0aW9uID0gZ2V0SnVyaXNkaWN0aW9uKCk7JykuY29uY2F0KAogICcgIGNvbnNvbGUubG9nKGp1cmlzZGljdGlvbik7JykuY29uY2F0KAogICcgIGlmIChqdXJpc2RpY3Rpb24pIHsnKS5jb25jYXQoCiAgJyAgICBzZXRQb2xpY3lMaW5rKGp1cmlzZGljdGlvbi51cmwpOycpLmNvbmNhdCgKICAnICAgIHNldEp1cmlzZGljdGlvbihqdXJpc2RpY3Rpb24ubmFtZSk7JykuY29uY2F0KAogICcgICAgc2V0Q29uZmlybVZpc2liaWxpdHkodHJ1ZSk7JykuY29uY2F0KAogICcgIH0gZWxzZSB7JykuY29uY2F0KAogICcgICAgc2V0SnVyaXNkaWN0aW9uKCIiKTsnKS5jb25jYXQoCiAgJyAgICBzZXRDb25maXJtVmlzaWJpbGl0eShmYWxzZSk7JykuY29uY2F0KAogICcgIH0nKS5jb25jYXQoCiAgJyAgZG9jdW1lbnQuX3NldE5leHRCdXR0b24oKTsnKS5jb25jYXQoCiAgJ307JykuY29uY2F0KAogICAgCiAgJ2RvY3VtZW50Ll9zZXROZXh0QnV0dG9uID0gZnVuY3Rpb24oKSB7JykuY29uY2F0KAogICcgIHZhciBqdXJpc2RpY3Rpb24gPSBnZXRKdXJpc2RpY3Rpb24oKTsnKS5jb25jYXQoCiAgJyAgdmFyIGNiID0gZ2V0Q2hlY2tib3goKTsnKS5jb25jYXQoCiAgJyAgbG9naW5IZWxwZXJzLmRpc2FibGVOZXh0QnV0dG9uKCFqdXJpc2RpY3Rpb24gfHwgIWNiLmNoZWNrZWQpOycpLmNvbmNhdCgKICAnfTsnKS5jb25jYXQoCiAgICAKICAndmFyIGdldEp1cmlzZGljdGlvbiA9IGZ1bmN0aW9uKCkgeycpLmNvbmNhdCgKICAnICB2YXIgc2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIicpLmNvbmNhdChzZWxlY3RJZCkuY29uY2F0KCciKTsnKS5jb25jYXQoCiAgJyAgdmFyIG9wdCA9IHNlbC5vcHRpb25zW3NlbC5zZWxlY3RlZEluZGV4XTsnKS5jb25jYXQoCiAgJyAgcmV0dXJuIG9wdC52YWx1ZSA/IHsgbmFtZTogb3B0LnZhbHVlLCB1cmw6IG9wdC5nZXRBdHRyaWJ1dGUoImRhdGEtdXJsIikgfSA6IG51bGw7JykuY29uY2F0KAogICd9OycpLmNvbmNhdCgKICAgIAogICd2YXIgZ2V0Q2hlY2tib3ggPSBmdW5jdGlvbigpIHsnKS5jb25jYXQoCiAgJyAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25maXJtLWNoZWNrIik7JykuY29uY2F0KAogICd9OycpLmNvbmNhdCgKICAgIAogICd2YXIgc2V0Q29uZmlybVZpc2liaWxpdHkgPSBmdW5jdGlvbihzaG93KSB7JykuY29uY2F0KAogICcgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25maXJtLXdyYXBwZXIiKTsnKS5jb25jYXQoCiAgJyAgZWwuc3R5bGUudmlzaWJpbGl0eSA9IHNob3cgPyAidmlzaWJsZSIgOiAiaGlkZGVuIjsnKS5jb25jYXQoCiAgJ307JykuY29uY2F0KAogICAgCiAgJ3ZhciBzZXRQb2xpY3lMaW5rID0gZnVuY3Rpb24odXJsKSB7JykuY29uY2F0KAogICcgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwb2xpY3ktbGluayIpLnNldEF0dHJpYnV0ZSgiaHJlZiIsIHVybCk7JykuY29uY2F0KAogICd9OycpLmNvbmNhdCgKCiAgJ3ZhciBzZXRKdXJpc2RpY3Rpb24gPSBmdW5jdGlvbihuYW1lKSB7JykuY29uY2F0KAogICcgIGxvZ2luSGVscGVycy5zZXRIaWRkZW5DYWxsYmFjaygiJykuY29uY2F0KGlucHV0SWQpLmNvbmNhdCgnIiwgbmFtZSk7JykuY29uY2F0KAogICd9OycpLmNvbmNhdCgKICAgIAogICd2YXIgaXNQYWdlUmVhZHkgPSBmdW5jdGlvbigpIHsnKS5jb25jYXQoCiAgJyAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYWxsYmFja18wIikgIT0gbnVsbDsnKS5jb25jYXQoCiAgJ307JykuY29uY2F0KAogICAgCiAgJ3ZhciBzZXR1cFBhZ2UgPSBmdW5jdGlvbigpIHsnKS5jb25jYXQoCiAgJyAgaWYgKCFpc1BhZ2VSZWFkeSgpKSB7JykuY29uY2F0KAogICcgICAgcmV0dXJuIHNldFRpbWVvdXQoc2V0dXBQYWdlLCAxMDApOycpLmNvbmNhdCgKICAnICB9JykuY29uY2F0KAogICcgIGxvZ2luSGVscGVycy5kaXNhYmxlTmV4dEJ1dHRvbih0cnVlKTsnKS5jb25jYXQoCiAgJyAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYWxsYmFja18wIik7JykuY29uY2F0KAogICcgIGNvbnRhaW5lci5pbnNlcnRBZGphY2VudEhUTUwoImJlZm9yZWVuZCIsICInKS5jb25jYXQoaHRtbCkuY29uY2F0KCciKTsnKS5jb25jYXQoCiAgJ307JykuY29uY2F0KAogICAgCiAgJ3NldHVwUGFnZSgpOycpOwoKZnVuY3Rpb24gaXNWYWxpZEp1cmlzZGljdGlvbihuYW1lKSB7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBqdXJpc2RpY3Rpb25zLmxlbmd0aDsgaSsrKSB7CiAgICBpZiAoanVyaXNkaWN0aW9uc1tpXS5uYW1lID09IG5hbWUpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfQogIHJldHVybiBmYWxzZTsKfQoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLkhpZGRlblZhbHVlQ2FsbGJhY2ssCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrLAogIGphdmEudXRpbC5IYXNoTWFwCikKCndpdGggKGZyKSB7CiAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkgfHwgIWlzVmFsaWRKdXJpc2RpY3Rpb24oY2FsbGJhY2tzLmdldCgwKS5nZXRWYWx1ZSgpKSkgewogICAgYWN0aW9uID0gQWN0aW9uLnNlbmQoCiAgICAgIG5ldyBIaWRkZW5WYWx1ZUNhbGxiYWNrKGlucHV0SWQsICcnKSwKICAgICAgbmV3IFNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICApLmJ1aWxkKCk7CiAgfSBlbHNlIHsKICAgIHZhciBPQkpfQVRUUlMgPSAnb2JqZWN0QXR0cmlidXRlcyc7CiAgICB2YXIgYXR0cnMgPSBzaGFyZWRTdGF0ZS5jb250YWluc0tleShPQkpfQVRUUlMpID8gc2hhcmVkU3RhdGUuZ2V0KE9CSl9BVFRSUykgOiBuZXcgSGFzaE1hcCgpOwogICAgYXR0cnMucHV0KCdqdXJpc2RpY3Rpb24nLCBjYWxsYmFja3MuZ2V0KDApLmdldFZhbHVlKCkpOwogICAgc2hhcmVkU3RhdGUucHV0KE9CSl9BVFRSUywgYXR0cnMpOwogICAgYWN0aW9uID0gQWN0aW9uLmdvVG8oJ1RydWUnKS5idWlsZCgpOwogIH0KfQoKIC8qCiAgKiBHZW5lcmF0ZSBhIHRva2VuIGluIHRoZSBkZXNpcmVkIGZvcm1hdC4gQWxsICd4JyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHJhbmRvbSBudW1iZXIgMC05LgogICogCiAgKiBFeGFtcGxlOgogICogJ3h4eHh4JyBwcm9kdWNlcyAnMjg1MzUnCiAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgKi8KZnVuY3Rpb24gZ2VuZXJhdGVOdW1lcmljVG9rZW4oZm9ybWF0KSB7CiAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpKjEwfDA7CiAgICB2YXIgdiA9IHI7CiAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgfSk7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"a316aedd-8b3b-4f68-b6e8-65859f1e87be\",\"name\":\"Admin_LocalRegistrationPrep\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKV2hlbiBhbiBhZG1pbiBtYW5hZ2VkIG9iamVjdCBpcyBjcmVhdGVkIGF0IHRoZSB0aW1lIG9mIGludml0YXRpb24sIHRoZSBlbWFpbCBhZGRyZXNzCmlzIHVzZWQgdG8gcG9wdWxhdGUgdGhlIHJlcXVpcmVkIGZpcnN0L2xhc3QgbmFtZXMuICBUaGlzIHNjcmlwdCBjbGVhcnMgdGhvc2UgYXR0cmlidXRlcwooaWYgc2V0IHRvIHRoZSBlbWFpbCBhZGRyZXNzKSBzbyB0aGUgVUkgZG9lc24ndCBkaXNwbGF5IHRoZSBlbWFpbCBhZGRyZXNzIGluIHRoZSBmaXJzdC9sYXN0Cm5hbWUgaW5wdXQgZmllbGRzLgoKSXQgYWxzbyBwb3B1bGF0ZXMgb3RoZXIgcmVxdWlyZWQgYXR0cmlidXRlcyB3aXRoIGZha2UgdmFsdWVzIHRvIGVuc3VyZSBwYXNzd29yZCBwb2xpY3kKdmFsaWRhdGlvbiB3b3JrcyBjb3JyZWN0bHkgd2hlbiBBTSBjYWxscyBJRE0uCiovCgp2YXIgb2JqQXR0cnMgPSBzaGFyZWRTdGF0ZS5nZXQoJ29iamVjdEF0dHJpYnV0ZXMnKSB8fCBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKb2JqQXR0cnMucHV0KCdnaXZlbk5hbWUnLCAnJyk7Cm9iakF0dHJzLnB1dCgnc24nLCAnJyk7Cm9iakF0dHJzLnB1dCgnZ3JvdXBzJywgWydmYWtlJ10pOwpvYmpBdHRycy5wdXQoJ2ludml0ZURhdGUnLCAnZmFrZScpOwpzaGFyZWRTdGF0ZS5wdXQoJ29iamVjdEF0dHJpYnV0ZXMnLCBvYmpBdHRycyk7CgpvdXRjb21lID0gJ1RydWUnOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"b703581a-e112-42b9-bc24-6db8bced5a13\",\"name\":\"Display States\",\"description\":\"Display sharedState and transientState.\",\"script\":\"LyogRGlzcGxheSBTdGF0ZXMKICogCiAqIERpc3BsYXkgc2hhcmVkU3RhdGUgYW5kIHRyYW5zaWVudFN0YXRlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICovCihmdW5jdGlvbiAoKSB7CiAgICBvdXRjb21lID0gInRydWUiOwoKICAgIHZhciBhbmNob3IgPSAiYW5jaG9yLSIuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CiAgICB2YXIgaGFsaWduID0gImxlZnQiOwogICAgdmFyIG1lc3NhZ2UgPSAiPGg0PkN1cnJlbnQgU3RhdGUgVmFsdWVzPC9oND4iLmNvbmNhdCgKICAgICAgICAiPHA+PGI+U2hhcmVkIFN0YXRlPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgICAgICBzaGFyZWRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAgICAgIjxwPjxiPlRyYW5zaWVudCBTdGF0ZTwvYj46PGJyLz4iKS5jb25jYXQoCiAgICAgICAgdHJhbnNpZW50U3RhdGUudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikuY29uY2F0KAogICAgICAgICI8cD48Yj5SZXF1ZXN0IEhlYWRlcnM8L2I+Ojxici8+IikuY29uY2F0KAogICAgICAgIHJlcXVlc3RIZWFkZXJzLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpCiAgICB2YXIgc2NyaXB0ID0gIkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFxuIi5jb25jYXQoCiAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAgICAgImZ1bmN0aW9uIChlKSB7XG4iKS5jb25jYXQoCiAgICAgICIgIHZhciBtZXNzYWdlID0gZS5maXJzdEVsZW1lbnRDaGlsZDtcbiIpLmNvbmNhdCgKICAgICAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgICAgICIgICAgbWVzc2FnZS5jbGFzc05hbWUgPSBcIlwiO1xuIikuY29uY2F0KAogICAgICAiICAgIG1lc3NhZ2Uuc3R5bGUgPSBcInRleHQtYWxpZ246IGxlZnQ7IGlubGluZS1zaXplOiA0MzBweDsgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcIjtcbiIpLmNvbmNhdCgKICAgICAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICAgICAiICAgIG1lc3NhZ2UuaW5uZXJIVE1MID0gJyIpLmNvbmNhdChtZXNzYWdlKS5jb25jYXQoIic7XG4iKS5jb25jYXQoCiAgICAgICIgIH1cbiIpLmNvbmNhdCgKICAgICAgIn0pIikKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgICAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKICAgICkKICAgIGlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICAgIG5ldyBmci5UZXh0T3V0cHV0Q2FsbGJhY2soCiAgICAgICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgICAgICBhbmNob3IKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9CiAgICBlbHNlIHsKICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgIH0KCiAgICAgLyoKICAgICAgKiBHZW5lcmF0ZSBhIHRva2VuIGluIHRoZSBkZXNpcmVkIGZvcm1hdC4gQWxsICd4JyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHJhbmRvbSBudW1iZXIgMC05LgogICAgICAqIAogICAgICAqIEV4YW1wbGU6CiAgICAgICogJ3h4eHh4JyBwcm9kdWNlcyAnMjg1MzUnCiAgICAgICogJ3h4eC14eHgnIHByb2R1Y2VzICc0MzItNTIxJwogICAgICAqLwogICAgZnVuY3Rpb24gZ2VuZXJhdGVOdW1lcmljVG9rZW4oZm9ybWF0KSB7CiAgICAgICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkqMTB8MDsKICAgICAgICAgICAgdmFyIHYgPSByOwogICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICAgICAgfSk7CiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"7dd80834-e7b2-4737-85a7-40434bb19dde\",\"name\":\"Impersonate: Update Session Properties\",\"description\":\"Store the impersontor and impersonatee profile information in session properties.\",\"script\":\"LyogSW1wZXJzb25hdGU6IFVwZGF0ZSBTZXNzaW9uIFByb3BlcnRpZXMKICogCiAqIFN0b3JlIHRoZSBpbXBlcnNvbnRvciBhbmQgaW1wZXJzb25hdGVlIHByb2ZpbGUgaW5mb3JtYXRpb24gaW4gc2Vzc2lvbiBwcm9wZXJ0aWVzLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqCiAqIEF1dGhvcjogamFrZS5mZWFzZWxAZm9yZ2Vyb2NrLmNvbSwgdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICovCihmdW5jdGlvbiAoKSB7CiAgICAgIGxvZ2dlci5tZXNzYWdlKCJJbXBlcnNvbmF0ZTogVXBkYXRlIFNlc3Npb24gUHJvcGVydGllczogc3RhcnQiKTsKICAgICAgb3V0Y29tZSA9ICJ0cnVlIjsKICAKICAgIHZhciBnb1RvID0gb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24uZ29UbzsKICAgIG15R290byA9IGdvVG8ob3V0Y29tZSk7CiAgICBteUdvdG8ucHV0U2Vzc2lvblByb3BlcnR5KCJ1c2VyTmFtZSIsIHNoYXJlZFN0YXRlLmdldCgidXNlcm5hbWUiKSk7CiAgICBteUdvdG8ucHV0U2Vzc2lvblByb3BlcnR5KCJpbXBlcnNvbmF0b3IiLCBzaGFyZWRTdGF0ZS5nZXQoImltcGVyc29uYXRvciIpKTsKCiAgICAgIGxvZ2dlci5tZXNzYWdlKCJJbXBlcnNvbmF0ZTogVXBkYXRlIFNlc3Npb24gUHJvcGVydGllczogZG9uZSBbb3V0Y29tZT17fV0iLCBvdXRjb21lKTsKICAgIGFjdGlvbiA9IG15R290by5idWlsZCgpOwp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"9de3eb62-f131-4fac-a294-7bd170fd4acb\",\"name\":\"Scripted Policy Condition\",\"description\":\"Default global script for Scripted Policy Conditions\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAxNyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qKgogKiBUaGlzIGlzIGEgUG9saWN5IENvbmRpdGlvbiBleGFtcGxlIHNjcmlwdC4gSXQgZGVtb25zdHJhdGVzIGhvdyB0byBhY2Nlc3MgYSB1c2VyJ3MgaW5mb3JtYXRpb24sCiAqIHVzZSB0aGF0IGluZm9ybWF0aW9uIGluIGV4dGVybmFsIEhUVFAgY2FsbHMgYW5kIG1ha2UgYSBwb2xpY3kgZGVjaXNpb24gYmFzZWQgb24gdGhlIG91dGNvbWUuCiAqLwoKdmFyIHVzZXJBZGRyZXNzLCB1c2VySVAsIHJlc291cmNlSG9zdDsKCmlmICh2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkpIHsKCiAgICB2YXIgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9IGdldENvdW50cnlGcm9tVXNlckFkZHJlc3MoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJDb3VudHJ5IHJldHJpZXZlZCBmcm9tIHVzZXIncyBhZGRyZXNzOiAiICsgY291bnRyeUZyb21Vc2VyQWRkcmVzcyk7CiAgICB2YXIgY291bnRyeUZyb21Vc2VySVAgPSBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpOwogICAgbG9nZ2VyLm1lc3NhZ2UoIkNvdW50cnkgcmV0cmlldmVkIGZyb20gdXNlcidzIElQOiAiICsgY291bnRyeUZyb21Vc2VySVApOwogICAgdmFyIGNvdW50cnlGcm9tUmVzb3VyY2VVUkkgPSBnZXRDb3VudHJ5RnJvbVJlc291cmNlVVJJKCk7CiAgICBsb2dnZXIubWVzc2FnZSgiQ291bnRyeSByZXRyaWV2ZWQgZnJvbSByZXNvdXJjZSBVUkk6ICIgKyBjb3VudHJ5RnJvbVJlc291cmNlVVJJKTsKCiAgICBpZiAoY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21Vc2VySVAgJiYgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21SZXNvdXJjZVVSSSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIFN1Y2NlZWRlZCIpOwogICAgICAgIHJlc3BvbnNlQXR0cmlidXRlcy5wdXQoImNvdW50cnlPZk9yaWdpbiIsIFtjb3VudHJ5RnJvbVVzZXJBZGRyZXNzXSk7CiAgICAgICAgYXV0aG9yaXplZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIEZhaWxlZCIpOwogICAgICAgIGF1dGhvcml6ZWQgPSBmYWxzZTsKICAgIH0KCn0gZWxzZSB7CiAgICBsb2dnZXIubWVzc2FnZSgiUmVxdWlyZWQgcGFyYW1ldGVycyBub3QgZm91bmQuIEF1dGhvcml6YXRpb24gRmFpbGVkLiIpOwogICAgYXV0aG9yaXplZCA9IGZhbHNlOwp9CgovKioKICogVXNlIHRoZSB1c2VyJ3MgYWRkcmVzcyB0byBsb29rdXAgdGhlaXIgY291bnRyeSBvZiByZXNpZGVuY2UuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgdXNlcidzIGNvdW50cnkgb2YgcmVzaWRlbmNlLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21Vc2VyQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlckFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgZ2VvY29kZSA9IEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvY29kZS5yZXN1bHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGdlb2NvZGUucmVzdWx0c1tpXTsKICAgICAgICB2YXIgajsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgcmVzdWx0LmFkZHJlc3NfY29tcG9uZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAocmVzdWx0LmFkZHJlc3NfY29tcG9uZW50c1tpXS50eXBlc1swXSA9PSAiY291bnRyeSIpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYWRkcmVzc19jb21wb25lbnRzW2ldLmxvbmdfbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKLyoqCiAqIFVzZSB0aGUgdXNlcidzIElQIHRvIGxvb2t1cCB0aGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqLwpmdW5jdGlvbiBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgdXNlcklQKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdC5jb3VudHJ5OwogICAgfQp9CgovKioKICogVXNlIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UncyBob3N0IG5hbWUgdG8gbG9va3VwIHRoZSBjb3VudHJ5IHdoZXJlIHRoZSByZXNvdXJjZSBpcyBob3N0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBpbiB3aGljaCB0aGUgcmVzb3VyY2UgaXMgaG9zdGVkLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21SZXNvdXJjZVVSSSgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgZW5jb2RlVVJJQ29tcG9uZW50KHJlc291cmNlSG9zdCkpOwogICAgICByZXF1ZXN0LnNldE1ldGhvZCgiR0VUIik7CgogICAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3QpLmdldCgpOwogICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwoKICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIGlmIChyZXN1bHQpIHsKICAgICAgICByZXR1cm4gcmVzdWx0LmNvdW50cnk7CiAgICB9Cn0KCi8qKgogKiBSZXRyaWV2ZSBhbmQgdmFsaWRhdGUgdGhlIHZhcmlhYmxlcyByZXF1aXJlZCB0byBtYWtlIHRoZSBleHRlcm5hbCBIVFRQIGNhbGxzLgogKgogKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2lsbCBiZSB0cnVlIGlmIHZhbGlkYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkgewogICAgdmFyIHVzZXJBZGRyZXNzU2V0ID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKCJwb3N0YWxBZGRyZXNzIik7CiAgICBpZiAodXNlckFkZHJlc3NTZXQgPT0gbnVsbCB8fCB1c2VyQWRkcmVzc1NldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gYWRkcmVzcyBzcGVjaWZpZWQgZm9yIHVzZXI6ICIgKyB1c2VybmFtZSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdXNlckFkZHJlc3MgPSB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIGFkZHJlc3M6ICIgKyB1c2VyQWRkcmVzcyk7CgogICAgaWYgKCFlbnZpcm9ubWVudCkgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJObyBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiB0aGUgZXZhbHVhdGlvbiByZXF1ZXN0LiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB2YXIgaXBTZXQgPSBlbnZpcm9ubWVudC5nZXQoIklQIik7CiAgICBpZiAoaXBTZXQgPT0gbnVsbCB8fCBpcFNldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gSVAgc3BlY2lmaWVkIGluIHRoZSBldmFsdWF0aW9uIHJlcXVlc3QgZW52aXJvbm1lbnQgcGFyYW1ldGVycy4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB1c2VySVAgPSBpcFNldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIElQOiAiICsgdXNlcklQKTsKCiAgICBpZiAoIXJlc291cmNlVVJJKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIHJlc291cmNlIFVSSSBzcGVjaWZpZWQuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmVzb3VyY2VIb3N0ID0gcmVzb3VyY2VVUkkubWF0Y2goL14oLio6XC9cLykod3d3XC4pPyhbQS1aYS16MC05XC1cLl0rKSg6WzAtOV0rKT8oLiopJC8pWzNdOwogICAgbG9nZ2VyLm1lc3NhZ2UoIlJlc291cmNlIGhvc3Q6ICIgKyByZXNvdXJjZUhvc3QpOwoKICAgIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"POLICY_CONDITION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"4855aac0-1efd-49c0-a153-3b9aadc911a6\",\"name\":\"Populate Username From Email\",\"description\":\"Populate Username From Email\",\"script\":\"b3V0Y29tZSA9ICJ0cnVlIjsKCnNoYXJlZFN0YXRlLnB1dCgidXNlcm5hbWUiLCBnZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoIm1haWwiKSkKc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKCJ1c2VyTmFtZSIsIGdldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgibWFpbCIpKQoKLyoKICogU3RvcmUgYXR0cmlidXRlcyBpbiBzaGFyZWQgc3RhdGUgZm9yIHVzZSB3aXRoIHRoZSBDcmVhdGUvUGF0Y2ggT2JqZWN0IG5vZGVzLgogKi8KZnVuY3Rpb24gc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7CiAgICAgICB2YXIgc3RvcmFnZSA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwogICAgaWYgKHN0b3JhZ2UgJiYgdmFsdWUpIHsKICAgICAgICAgIGlmIChzdG9yYWdlLnB1dCkgewogICAgICAgICAgICAgIHN0b3JhZ2UucHV0KG5hbWUsIHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICBzdG9yYWdlW25hbWVdID0gdmFsdWU7CiAgICAgICAgfQogICAgfQogICAgZWxzZSBpZiAodmFsdWUpIHsKICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoIm9iamVjdEF0dHJpYnV0ZXMiLCBKU09OLnBhcnNlKCJ7XCIiK25hbWUrIlwiOlwiIit2YWx1ZSsiXCJ9IikpOwogICAgfQp9CgovKgogKiBSZWFkIGF0dHJpYnV0ZXMgaW4gc2hhcmVkIHN0YXRlIGZvciB1c2Ugd2l0aCB0aGUgQ3JlYXRlL1BhdGNoIE9iamVjdCBub2Rlcy4KICovCmZ1bmN0aW9uIGdldFNoYXJlZE9iamVjdEF0dHJpYnV0ZShuYW1lKSB7CiAgICB2YXIgc3RvcmFnZSA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwogICAgaWYgKHN0b3JhZ2UpIHsKICAgICAgICAgIGlmIChzdG9yYWdlLmdldCkgewogICAgICAgICAgICByZXR1cm4gc2hhcmVkU3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikuZ2V0KG5hbWUpOwogICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBzdG9yYWdlLm5hbWU7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"ed685f9f-5909-4726-86e8-22bd38b47663\",\"name\":\"Normalized Profile to Identity\",\"description\":\"Converts a normalized social profile into an Identity\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgaWRlbnRpdHkgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgiY24iLCBub3JtYWxpemVkUHJvZmlsZS5kaXNwbGF5TmFtZSksCiAgICAgICAgZmllbGQoInVzZXJOYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUudXNlcm5hbWUpLAogICAgICAgIGZpZWxkKCJpcGxhbmV0LWFtLXVzZXItYWxpYXMtbGlzdCIsIHNlbGVjdGVkSWRwICsgJy0nICsgbm9ybWFsaXplZFByb2ZpbGUuaWQuYXNTdHJpbmcoKSkpKQoKcmV0dXJuIGlkZW50aXR5\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"b7ce17a1-e41d-42b0-bedc-f88a4d5e1c3a\",\"name\":\"Admin_AmadminCheck\",\"description\":\"Prepares onboarding check if not amadmin\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGZyID0gbmV3IEphdmFJbXBvcnRlcigKICBqYXZhLnV0aWwuSGFzaE1hcAopOwoKd2l0aCAoZnIpIHsKICB0cnkgewogICAgCiAgICBpZiAoc2hhcmVkU3RhdGUuZ2V0KCd1c2VybmFtZScpLnRvTG93ZXJDYXNlKCkgPT0gJ2FtYWRtaW4nKSB7CiAgICAgIG91dGNvbWUgPSAnVHJ1ZSc7CiAgICB9IGVsc2UgewogICAgICBvdXRjb21lID0gJ0ZhbHNlJzsKICAgIH0KICAgIAogIH0gY2F0Y2ggKGUpIHsKCiAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZXRlcm1pbmUgaWYgdXNlciBpcyBhbWFkbWluOiB7fScsIGUpOwogICAgb3V0Y29tZSA9ICdFcnJvcic7CgogIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"80c3e733-ae51-4851-a01d-1cbf193c80e9\",\"name\":\"Admin_SetOnboardingAttributes\",\"description\":\"Activates the admin's account\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKZnVuY3Rpb24gdXRjTm93KCkgewogIHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7Cn0KCnRyeSB7CiAgCiAgdmFyIE9CSkVDVF9BVFRSUyA9ICdvYmplY3RBdHRyaWJ1dGVzJzsKCiAgLy8gU3RhcnQgYnkgZ2V0dGluZyBvYmplY3QgYXR0cmlidXRlcyBmcm9tIHNoYXJlZCBzdGF0ZQogIHZhciBzaGFyZWRPYmpBdHRycyA9IHNoYXJlZFN0YXRlLmdldChPQkpFQ1RfQVRUUlMpOwogIHNoYXJlZE9iakF0dHJzLnB1dCgnYWNjb3VudFN0YXR1cycsICdBY3RpdmUnKTsKICBzaGFyZWRPYmpBdHRycy5wdXQoJ29uYm9hcmREYXRlJywgdXRjTm93KCkpOwogIAogIC8vIENvcHkgYXR0cmlidXRlcyBmcm9tIHRyYW5zaWVudCBzdGF0ZQogIHZhciB0cmFuc2llbnRPYmpBdHRycyA9IG5vZGVTdGF0ZS5nZXQoT0JKRUNUX0FUVFJTKTsKICB2YXIgYXR0cnMgPSBbJ2FsaWFzTGlzdCcsICdnaXZlbk5hbWUnLCAncGFzc3dvcmQnLCAnc24nXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgdmFsID0gdHJhbnNpZW50T2JqQXR0cnMuZ2V0KGF0dHJzW2ldKTsKICAgIGlmICh2YWwuaXNOb3ROdWxsKCkpIHsKICAgICAgc2hhcmVkT2JqQXR0cnMucHV0KGF0dHJzW2ldLCB2YWwpOwogICAgfQogIH0KICAKICAvLyBFbnN1cmUgb2JqZWN0IGF0dHJpYnV0ZXMgbWF0Y2ggaW4gYm90aCBzaGFyZWQgYW5kIHRyYW5zaWVudCBzdGF0ZQogIG5vZGVTdGF0ZS5wdXRUcmFuc2llbnQoT0JKRUNUX0FUVFJTLCBzaGFyZWRPYmpBdHRycyk7CiAgc2hhcmVkU3RhdGUucHV0KE9CSkVDVF9BVFRSUywgc2hhcmVkT2JqQXR0cnMpOwogIG91dGNvbWUgPSAnU3VjY2Vzcyc7Cgp9IGNhdGNoIChlKSB7CgogIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBhdHRyaWJ1dGVzIHRvIGNvbXBsZXRlIG9uYm9hcmRpbmc6IHt9JywgZSk7CiAgb3V0Y29tZSA9ICdFcnJvcic7Cgp9Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"1d475815-72cb-42eb-aafd-4026989d28a7\",\"name\":\"Social Identity Provider Profile Transformation Script\",\"description\":\"Default global script for Social Identity Provider Profile Transformation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyogRGVmYXVsdCBTb2NpYWwgSWRlbnRpdHkgUHJvdmlkZXIgUHJvZmlsZSBUcmFuc2Zvcm1hdGlvbiBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzICov\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"bae1d54a-e97d-4997-aa5d-c027f21af82c\",\"name\":\"Facebook Profile Normalization\",\"description\":\"Normalizes raw profile data from Facebook\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"c9fa3899-c3ce-4833-af83-64d709202600\",\"name\":\"Twilio IVR: Verify Security PIN\",\"description\":\"Verify security PIN\",\"script\":\"LyogVHdpbGlvIElWUjogVmVyaWZ5IFNlY3VyaXR5IFBJTgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICogLSBmYWxzZQogKiAKICogRGVwZW5kaW5nIG9uIHRoZSBhbW91bnQgb2YgZGF0YSBjb2xsZWN0ZWQgdGhyb3VnaCBjYWxsYmFja3MgYW5kIGhvdyBtYW55IG9mIHRoZSBjYWxsUGFyYW1zCiAqIHlvdSBhY3RpdmF0ZSBiZWxvdywgeW91IHdpbGwgbmVlZCB0byBjaGFuZ2UgeW91ciBhdXRoZW50aWNhdGlvbiBzZXNzaW9uIGZyb20gSldUIHRvIENUUyBvcgogKiBNZW1vcnkuCiAqLwpsb2dnZXIud2FybmluZygiVHdpbGlvIElWUjogVmVyaWZ5IFNlY3VyaXR5IFBJTjogc3RhcnQiKTsKb3V0Y29tZSA9ICJmYWxzZSI7CgovKiBCZWdpbiBDb25maWd1cmF0aW9uCiAqLwoKLy8gRm9yIElEIENsb3VkIHVzZSAiX2lkIiwgZm9yIGNsYXNzaWMgZGVwbG95bWVudHMgdXNlICJ1c2VybmFtZSIKdmFyIHVzZXJpZCA9IHNoYXJlZFN0YXRlLmdldCgiX2lkIikKCi8vIFJldHJpZXZlIHRoZSBpZGVudGlmaWVkIGNhbGxlcidzIFBJTiAoaW4gSURNOiBmclVuaW5kZXhlZEludGVnZXI1LCBpbiBBTTogZnItYXR0ci1pbnQ1KQp2YXIgc2VjdXJpdHlQSU4gPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJpZCwgImZyLWF0dHItaW50NSIpLml0ZXJhdG9yKCkubmV4dCgpOwoKLy8gQnVpbGQgb3V0IHRoZSB2ZXJpZmljYXRpb24gcHJvbXB0CnZhciBwcm9tcHQgPSAiVG8gdmVyaWZ5IEkgaGF2ZSB0aGUgcmlnaHQgYWNjb3VudCwgcGxlYXNlIGVudGVyIHlvdXIgNC1kaWdpdCBzZWN1cml0eSBQSU4uIjsKCi8qIEVuZCBDb25maWd1cmF0aW9uCiAqLwoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLAogICAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRJbnB1dENhbGxiYWNrCik7CiAgCndpdGggKGZyKSB7CiAgICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgdmFyIGlucHV0ID0gbmV3IFRleHRJbnB1dENhbGxiYWNrKHByb21wdCk7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLnNlbmQoaW5wdXQpLmJ1aWxkKCk7CiAgICAgIH0gCiAgICAgIGVsc2UgewogICAgICAgICAgdmFyIGFuc3dlciA9IG5ldyBTdHJpbmcoY2FsbGJhY2tzLmdldCgwKS5nZXRUZXh0KCkpLnJlcGxhY2UoL1teMC05XS9nLCAiIik7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIlR3aWxpbyBJVlI6IFZlcmlmeSBTZWN1cml0eSBQSU46IGNhbGxiYWNrcyByZWNlaXZlZCIpOwogICAgICAgIGlmIChhbnN3ZXIgPT0gc2VjdXJpdHlQSU4pIHsKICAgICAgICAgICAgICBvdXRjb21lID0gInRydWUiOwogICAgICAgIH0KICAgICAgICBsb2dnZXIud2FybmluZygiVHdpbGlvIElWUjogVmVyaWZ5IFNlY3VyaXR5IFBJTjogZmluaXNoIFtvdXRjb21lPSIuY29uY2F0KG91dGNvbWUpLmNvbmNhdCgiXSIpKTsKICAgICAgICBhY3Rpb24gPSBBY3Rpb24uZ29UbyhvdXRjb21lKS5idWlsZCgpOwogICAgICB9Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"3369037a-7a49-4aed-a1dc-7aab7608812b\",\"name\":\"Service Account - Token Modification\",\"description\":\"null\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICBqYXZhLmxhbmcuU3RyaW5nLAogICAgamF2YS5zZWN1cml0eS5NZXNzYWdlRGlnZXN0LAogICAgamF2YS51dGlsLkFycmF5cywKICAgIGphdmF4LmNyeXB0by5DaXBoZXIsCiAgICBqYXZheC5jcnlwdG8uc3BlYy5TZWNyZXRLZXlTcGVjLAogICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVzcG9uc2UsCiAgICBvcmcuZm9yZ2Vyb2NrLnV0aWwuZW5jb2RlLkJhc2U2NAogICk7CiAgCiAgdmFyIHNlY3JldCA9ICdGdXd3VktwUEVSOXRQU01ZVWlJa1k3SWFQenY4NWFHVSc7CiAgCiAgZnVuY3Rpb24gZW5jcnlwdChzdHIpIHsKICAgIHRyeSB7CiAgICAgIHZhciBrZXkgPSBuZXcgZnIuU3RyaW5nKHNlY3JldCkuZ2V0Qnl0ZXMoJ1VURi04Jyk7CiAgICAgIHZhciBzaGEgPSBmci5NZXNzYWdlRGlnZXN0LmdldEluc3RhbmNlKCdTSEEtMjU2Jyk7CiAgICAgIGtleSA9IHNoYS5kaWdlc3Qoa2V5KTsKICAgICAga2V5ID0gZnIuQXJyYXlzLmNvcHlPZihrZXksIDMyKTsKICAgICAgdmFyIHNlY3JldEtleSA9IG5ldyBmci5TZWNyZXRLZXlTcGVjKGtleSwgJ0FFUycpOwogICAgICB2YXIgY2lwaGVyID0gZnIuQ2lwaGVyLmdldEluc3RhbmNlKCdBRVMvRUNCL1BLQ1M1UGFkZGluZycpOwogICAgICBjaXBoZXIuaW5pdChmci5DaXBoZXIuRU5DUllQVF9NT0RFLCBzZWNyZXRLZXkpOwogICAgICB2YXIgZmluYWxCeXRlcyA9IGNpcGhlci5kb0ZpbmFsKG5ldyBmci5TdHJpbmcoc3RyKS5nZXRCeXRlcygnVVRGLTgnKSk7CiAgICAgIHJldHVybiBmci5CYXNlNjQuZW5jb2RlKGZpbmFsQnl0ZXMpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBsb2dnZXIuZXJyb3IoJ3t9OiBmYWlsZWQgdG8gZW5jcnlwdDoge30nLCBzY3JpcHROYW1lLCBlKTsKICAgICAgdGhyb3cgZTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGhhc0FtU2NvcGUoc2NvcGUpIHsKICAgIGlmICghc2NvcGUpIHJldHVybiBmYWxzZTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NvcGUubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHNjb3BlW2ldLmluZGV4T2YoJ2ZyOmFtOicpID4gLTEpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdHJ5IHsKICAgIHZhciB1cmkgPSAnaHR0cDovL2FtLmZyLXBsYXRmb3JtOjgwL2FtL2pzb24vYXV0aGVudGljYXRlP2F1dGhJbmRleFR5cGU9c2VydmljZSZhdXRoSW5kZXhWYWx1ZT1GUlNlcnZpY2VBY2NvdW50SW50ZXJuYWwnOwogICAgdmFyIHJlcXVlc3RQYXJhbXMgPSByZXF1ZXN0UHJvcGVydGllcy5nZXQoJ3JlcXVlc3RQYXJhbXMnKTsKCiAgICB2YXIgc2NvcGUgPSByZXF1ZXN0UGFyYW1zLmdldCgnc2NvcGUnKTsKICAgIGlmICghaGFzQW1TY29wZShzY29wZSkpIHsKICAgICAgbG9nZ2VyLm1lc3NhZ2UoJ0FNIHNjb3BlIG5vdCByZXF1ZXN0ZWQnKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgdmFyIGp3dHMgPSByZXF1ZXN0UGFyYW1zLmdldCgnYXNzZXJ0aW9uJyk7CiAgICBpZiAoIWp3dHMgfHwgand0cy5pc0VtcHR5KCkpIHsKICAgICAgbG9nZ2VyLm1lc3NhZ2UoJ05vIGp3dCBhc3NlcnRpb24nKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgdmFyIGp3dCA9IGp3dHNbMF07CiAgICB2YXIgdXVpZCA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnX2lkJykuaXRlcmF0b3IoKS5uZXh0KCk7CgogICAgdmFyIHJlcXVlc3QgPSBuZXcgZnIuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5nZXRIZWFkZXJzKCkuYWRkKCdhdXRob3JpemF0aW9uJywgJ3N2Y2FjY3QgJyArIHV1aWQgKyAnICcgKyBqd3QpOwogICAgcmVxdWVzdC5nZXRIZWFkZXJzKCkuYWRkKCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpOwogICAgcmVxdWVzdAogICAgICAuc2V0VXJpKHVyaSkKICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgIC5zZXRFbnRpdHkoJ3t9Jyk7CgogICAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3QpLmdldE9yVGhyb3coKTsKICAgIGlmIChyZXNwb25zZS5nZXRTdGF0dXMoKSA9PT0gb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlN0YXR1cy5PSykgewogICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgIHZhciBlbmNyeXB0ZWRUb2tlbklkID0gZW5jcnlwdChyZXN1bHQudG9rZW5JZCk7CiAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdzZXNzaW9uVG9rZW4nLCBlbmNyeXB0ZWRUb2tlbklkKTsKICAgIH0gZWxzZSB7CiAgICAgIGxvZ2dlci5tZXNzYWdlKCdGYWlsZWQgdG8gZ2V0IHNlc3Npb24gZnJvbSBzZXJ2aWNlIGFjY291bnQgdHJlZSAoc3RhdHVzOiAnICsgcmVzcG9uc2UuZ2V0U3RhdHVzKCkgKyAnKScpOwogICAgfQogIH0gY2F0Y2ggKGUpIHsKICAgIHRocm93ICgnRmFpbGVkIHRvIG1vZGlmeSBzZXJ2aWNlIGFjY291bnQgdG9rZW46ICcgKyBlKTsKICB9Cn0oKSk7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"dedbc9f6-7fc9-4332-a330-55f7aeb95e78\",\"name\":\"FRAAS-7955 Shared State Only\",\"description\":\"FRAAS-7955 Shared State Only\",\"script\":\"b3V0Y29tZSA9ICJ0cnVlIjsKCnNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgidXNlck5hbWUiLCAiRlJBQVMtNzk1NSIpOwpzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoImdpdmVuTmFtZSIsICJGaXJzdC1zaGFyZWQiKTsKc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKCJzbiIsICJMYXN0LXNoYXJlZCIpOwpzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoIm1haWwiLCAiZmlyc3QubGFzdC1zaGFyZWRAY29tcGFueS5jb20iKTsKCi8qCiAqIFN0b3JlIGF0dHJpYnV0ZXMgaW4gc2hhcmVkIHN0YXRlIGZvciB1c2Ugd2l0aCB0aGUgQ3JlYXRlL1BhdGNoIE9iamVjdCBub2Rlcy4KICovCmZ1bmN0aW9uIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgewogICAgICAgdmFyIHN0b3JhZ2UgPSBzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKICAgIGlmIChzdG9yYWdlICYmIHZhbHVlKSB7CiAgICAgICAgICBpZiAoc3RvcmFnZS5wdXQpIHsKICAgICAgICAgICAgICBzdG9yYWdlLnB1dChuYW1lLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgc3RvcmFnZVtuYW1lXSA9IHZhbHVlOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHZhbHVlKSB7CiAgICAgICAgc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgSlNPTi5wYXJzZSgie1wiIituYW1lKyJcIjpcIiIrdmFsdWUrIlwifSIpKTsKICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"f26cc0de-ee31-4114-8a32-27799bb49357\",\"name\":\"Setup MFA Choice\",\"description\":\"null\",\"script\":\"LyoKICogQWRhcHQgdGhlIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGJlbG93CiAqLwoKLy8gZG8gbm90IGNoYW5nZSwgbXVzdCBiZSBhIHJhbmRvbSBpZGVudGlmaWVyCnZhciBhbmNob3IgPSBnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4Jyk7CgovLyBzcGVjaWZ5IHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGUgbWVzc2FnZTogbGVmdCwgY2VudGVyLCByaWdodAp2YXIgaGFsaWduID0gImNlbnRlciI7CgovLyBzcGVjaWZ5IHRoZSBzdHlsZSB0byBhcHBseSB0byB0aGUgYnV0dG9uIGluIHRoZSBtZXNzYWdlIHRvIG1ha2UgaXQgbG9vayBsaWtlIGEgbGluawp2YXIgbGlua0J1dHRvblN0eWxlID0gImJvcmRlcjogMDsgY29sb3I6ICMxMDlDRjE7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IjsKCi8vIHNwZWNpZnkgdGhlIGxpbmsgYnV0dG9uIEhUTUwgZWxlbWVudC4gb25seSBtb2RpZnkgdGhlIHRleHQgYmV0d2VlbiB0aGUgPGJ1dHRvbj4gYW5kIDwvYnV0dG9uPiB0YWdzLgp2YXIgbGlua0J1dHRvbiA9ICI8YnV0dG9uIGlkPVwic2tpcC1saW5rLSIuY29uY2F0KGFuY2hvcikuY29uY2F0KCJcIiB0eXBlPVwic3VibWl0XCIgc3R5bGU9XCIiKS5jb25jYXQobGlua0J1dHRvblN0eWxlKS5jb25jYXQoIlwiPnNraXAgZm9yIG5vdy48L2J1dHRvbj4iKTsKCi8vIHNwZWNpZnkgdGhlIG1lc3NhZ2UgeW91IHdhbnQgdG8gZGlzcGxheSBhbmQgcGxhY2UgdGhlIGxpbmtCdXR0b24gYW55d2hlcmUKdmFyIG1lc3NhZ2UgPSAiUGxlYXNlIHNlbGVjdCB5b3VyIHByZWZlcmVkIGZhY3RvciBvciIuY29uY2F0KGxpbmtCdXR0b24pOwoKLy8gc3BlY2lmeSB0aGUgY2hvaWNlcyB5b3Ugd2FudCB0byBvZmZlciB0aGUgdXNlci4KdmFyIGNob2ljZXMgPSBbIlNNUyIsIkZpZG8iLCJQdXNoIl07CgovLyBzcGVjaWZ5IHRoZSBkZWZhdWx0IGNob2ljZS4gdGhpcyBzZXR0aW5nIG11c3QgYmUgYSB2YWxpZCAwLWJhc2VkIGluZGV4IG9mIHRoZSBjaG9pY2VzIGFycmF5IGFib3ZlLgp2YXIgZGVmYXVsdENob2ljZSA9IDA7CgovKgogKiBBbGwgdGhlIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGFyZSBhYm92ZSB0aGlzIGNvbW1lbnQuCiAqCiAqIERPIE5PVCBNQUtFIEFOWSBDSEFOR0VTIEJFTE9XIQogKi8KCi8vIGZpbmQgdGhlIFRleHRPdXRwdXRDYWxsYmFjayB3aXRoIHRoZSBtZXNzYWdlX2FuY2hvcgovLyBhbmQgcmVwbGFjZSB0aGUgbWVzc2FnZV9hbmNob3Igd2l0aCB0aGUgbWVzc2FnZQp2YXIgZGlzcGxheU1lc3NhZ2VTY3JpcHQgPSAiIi5jb25jYXQoCiAgIkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFxuIikuY29uY2F0KAogICIgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NhbGxiYWNrLWNvbXBvbmVudCcpXG4iKS5jb25jYXQoCiAgIikuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAiICBmdW5jdGlvbiAoZSkge1xuIikuY29uY2F0KAogICIgICAgdmFyIG1lc3NhZ2UgPSBlLmZpcnN0RWxlbWVudENoaWxkO1xuIikuY29uY2F0KAogICIgICAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnbWVzc2FnZS0iKS5jb25jYXQoYW5jaG9yKS5jb25jYXQoIicpIHtcbiIpLmNvbmNhdCgKICAiICAgICAgbWVzc2FnZS5hbGlnbiA9IFwiIikuY29uY2F0KGhhbGlnbikuY29uY2F0KCJcIjtcbiIpLmNvbmNhdCgKICAiICAgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIikuY29uY2F0KG1lc3NhZ2UpLmNvbmNhdCgiJztcbiIpLmNvbmNhdCgKICAiICAgIH1cbiIpLmNvbmNhdCgKICAiICB9XG4iKS5jb25jYXQoCiAgIikiKQoKLy8gaGlqYWNrIHRoZSBsaW5rIGJ1dHRvbiBpbiB0aGUgbWVzc2FnZSBhbmQ6Ci8vIC0gZmluZCB0aGUgSGlkZGVuVmFsdWVDYWxsYmFjayBhbmQgc2V0IGl0cyB2YWx1ZSB0byAiU2tpcCIKLy8gLSB0aGVuIHNpbXVsYXRlIGEgbG9naW4gYnV0dG9uIGNsaWNrCnZhciBza2lwT3B0aW9uU2NyaXB0ID0gIiIuY29uY2F0KAogICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNraXAtbGluay0iKS5jb25jYXQoYW5jaG9yKS5jb25jYXQoIlwiKS5vbmNsaWNrID0gZnVuY3Rpb24oKXtcbiIpLmNvbmNhdCgKICAiICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNraXAtaW5wdXQtIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCJcIikudmFsdWUgPSBcIlNraXBcIjtcbiIpLmNvbmNhdCgKICAiICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxvZ2luQnV0dG9uXzBcIikuY2xpY2soKTtcbiIpLmNvbmNhdCgKICAiICByZXR1cm4gZmFsc2U7XG4iKS5jb25jYXQoCiAgIn0iKQoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLkNvbmZpcm1hdGlvbkNhbGxiYWNrLAogICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5IaWRkZW5WYWx1ZUNhbGxiYWNrLAogICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCikKCmlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgICJtZXNzYWdlLSIuY29uY2F0KGFuY2hvcikKICAgICAgICApLAogICAgICAgIG5ldyBmci5Db25maXJtYXRpb25DYWxsYmFjaygKICAgICAgICAgICAgZnIuQ29uZmlybWF0aW9uQ2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgIGNob2ljZXMsCiAgICAgICAgICAgIGRlZmF1bHRDaG9pY2UKICAgICAgICApLAogICAgICAgIG5ldyBmci5IaWRkZW5WYWx1ZUNhbGxiYWNrKCJza2lwLWlucHV0LSIuY29uY2F0KGFuY2hvciksICJmYWxzZSIpLAogICAgICAgIG5ldyBmci5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2soZGlzcGxheU1lc3NhZ2VTY3JpcHQpLAogICAgICAgIG5ldyBmci5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2soc2tpcE9wdGlvblNjcmlwdCkKICAgICkuYnVpbGQoKQp9CmVsc2UgewogIC8vIGRpZCB0aGUgdXNlciBza2lwPwogIGlmIChjYWxsYmFja3MuZ2V0KDIpLmdldFZhbHVlKCkgPT0gIlNraXAiKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygiU2tpcCIpLmJ1aWxkKCk7CiAgfQogIC8vIHVzZXIgZGlkbid0IHNraXAsIHBpY2sgdGhlIHJpZ2h0IG91dGNvbWUKICBlbHNlIHsKICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKGNob2ljZXNbY2FsbGJhY2tzLmdldCgxKS5nZXRTZWxlY3RlZEluZGV4KCldKS5idWlsZCgpOwogIH0KfQoKIC8qCiAgKiBHZW5lcmF0ZSBhIHRva2VuIGluIHRoZSBkZXNpcmVkIGZvcm1hdC4gQWxsICd4JyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHJhbmRvbSBudW1iZXIgMC05LgogICogCiAgKiBFeGFtcGxlOgogICogJ3h4eHh4JyBwcm9kdWNlcyAnMjg1MzUnCiAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgKi8KZnVuY3Rpb24gZ2VuZXJhdGVOdW1lcmljVG9rZW4oZm9ybWF0KSB7CiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbihjKSB7CiAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpKjEwfDA7CiAgICAgICAgdmFyIHYgPSByOwogICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDEwKTsKICAgIH0pOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"aef262d0-7a42-4a34-9826-e7dbc2ea6eb9\",\"name\":\"IDP Router\",\"description\":\"Route users to their organization's IDP of type saml, oidc, local, or custom and apply the organization's theme, if specified\",\"script\":\"LyogSURQIFJvdXRlcgogKiAKICogUm91dGUgdXNlcnMgdG8gdGhlaXIgb3JnYW5pemF0aW9uJ3MgSURQIG9mIHR5cGUgc2FtbCwgb2lkYywgbG9jYWwsIAogKiBvciBjdXN0b20gYW5kIGFwcGx5IHRoZSBvcmdhbml6YXRpb24ncyB0aGVtZSwgaWYgc3BlY2lmaWVkLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSBzYW1sCiAqIC0gb2lkYwogKiAtIGxvY2FsCiAqIC0gY3VzdG9tCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICovCihmdW5jdGlvbiAoKSB7CiAgICAgIGxvZ2dlci5tZXNzYWdlKCJJRFAgUm91dGVyOiBTdGFydCIpOwogICAgb3V0Y29tZSA9ICJsb2NhbCI7CiAgICAgIHZhciByZWZlcmVyID0gcGFyc2VVcmwocmVxdWVzdEhlYWRlcnMuZ2V0KCJyZWZlcmVyIikuZ2V0KDApKTsKICAgICAgdmFyIHJvdXRlZElEUCA9IHNoYXJlZFN0YXRlLmdldCgicm91dGVkSURQcyIpLmdldCgwKTsKICAgICAgaWYgKHJvdXRlZElEUCkgewogICAgICAgIG91dGNvbWUgPSByb3V0ZWRJRFAuZ2V0KCJpZHBUeXBlIik7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklEUCBSb3V0ZXI6IFJvdXRlZCBJRFA6ICIgKyByb3V0ZWRJRFApOwogICAgICAgICAgc2hhcmVkU3RhdGUucHV0KCJzZWxlY3RlZElkcCIsIHJvdXRlZElEUC5nZXQoImlkcE5hbWUiKSk7CiAgICAgICAgdmFyIG5vZGVDb25maWcgPSB7fTsKICAgICAgICAgIC8vIGxvYWQgc2FtbENvbmZpZwogICAgICAgICAgaWYgKHJvdXRlZElEUC5nZXQoInNhbWxDb25maWciKSkgewogICAgICAgICAgICAgIG5vZGVDb25maWcgPSBKU09OLnBhcnNlKHJvdXRlZElEUC5nZXQoInNhbWxDb25maWciKSk7CiAgICAgICAgfQogICAgICAgICAgLy8gcm91dGUgdG8gYSBjdXN0b20gam91cm5leQogICAgICAgIGlmIChyb3V0ZWRJRFAuZ2V0KCJpZHBKb3VybmV5IikpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklEUCBSb3V0ZXI6IFJvdXRlIHRvIGN1c3RvbSBJRFAge30sIGpvdXJuZXk6IHt9Iiwgcm91dGVkSURQLmdldCgiaWRwTmFtZSIpLCByb3V0ZWRJRFAuZ2V0KCJpZHBKb3VybmV5IikpOwogICAgICAgICAgICAgIG5vZGVDb25maWcudHJlZSA9IHJvdXRlZElEUC5nZXQoImlkcEpvdXJuZXkiKTsKICAgICAgICAgICAgICBvdXRjb21lID0gImN1c3RvbSI7CiAgICAgICAgfQogICAgICAgICAgc2hhcmVkU3RhdGUucHV0KCJub2RlQ29uZmlnIiwgbm9kZUNvbmZpZyk7CiAgICAgICAgICAvLyBvbmx5IHNlbmQgY2FsbGJhY2sgaWYgdGhlIG9yZy9pZHAgcmVxdWlyZXMgYSBjdXN0b20gdGhlbWUKICAgICAgICBpZiAocm91dGVkSURQLmdldCgiaWRwVGhlbWUiKSAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBzdGFnZSA9ICJ0aGVtZUlkPSIrcm91dGVkSURQLmdldCgiaWRwVGhlbWUiKTsKICAgICAgICAgICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuUG9sbGluZ1dhaXRDYWxsYmFjawogICAgICAgICAgICApCiAgICAgICAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICAgICAgICAgIG5ldyBmci5Qb2xsaW5nV2FpdENhbGxiYWNrKCIwIiwgIlBsZWFzZSB3YWl0IC4uLiIpCiAgICAgICAgICAgICkud2l0aFN0YWdlKHN0YWdlKS5idWlsZCgpOwogICAgICAgICAgfQogICAgfQogICAgICBsb2dnZXIubWVzc2FnZSgiSURQIFJvdXRlcjogRG9uZSBbb3V0Y29tZT17fV0iLCBvdXRjb21lKTsKCiAgICAvKgogICAgICogUGFyc2UgYSBVUkwgaW50byBpdHMgY29tcG9uZW50cyBhbmQgbWFrZSB0aGVtIGVhc2lseSBhY2Nlc3NpYmxlIGJ5IG5hbWUKICAgICAqCiAgICAgKiBVc2UgaW4gYSBTY3JpcHRlIERlY2lzaW9uIE5vZGUgU2NyaXB0IGFzIGZvbGxvd3M6CiAgICAgKiB2YXIgcmVmZXJlciA9IHBhcnNlVXJsKHJlcXVlc3RIZWFkZXJzLmdldCgicmVmZXJlciIpLmdldCgwKSk7CiAgICAgKiB2YXIgb3JpZ2luID0gcmVmZXJlci5vcmlnaW47CiAgICAgKiAKICAgICAqIGUuZy46IGh0dHBzOi8vb3BlbmFtLXZvbGtlci1kZXYuZm9yZ2VibG9ja3MuY29tL2FtL1hVSS8/cmVhbG09L2JyYXZvJmF1dGhJbmRleFR5cGU9c2VydmljZSZhdXRoSW5kZXhWYWx1ZT1Jbml0aWF0ZU93bmVyQ2xhaW0jLwogICAgICogewogICAgICogICAgIGhhc2g6ICcjLycsCiAgICAgKiAgICAgaG9zdDogJ29wZW5hbS12b2xrZXItZGV2LmZvcmdlYmxvY2tzLmNvbScsCiAgICAgKiAgICAgaG9zdG5hbWU6ICdvcGVuYW0tdm9sa2VyLWRldi5mb3JnZWJsb2Nrcy5jb20nLAogICAgICogICAgIGhyZWY6ICdodHRwczovL29wZW5hbS12b2xrZXItZGV2LmZvcmdlYmxvY2tzLmNvbS9hbS9YVUkvP3JlYWxtPS9icmF2byZhdXRoSW5kZXhUeXBlPXNlcnZpY2UmYXV0aEluZGV4VmFsdWU9SW5pdGlhdGVPd25lckNsYWltIy8nLAogICAgICogICAgIG9yaWdpbjogJ2h0dHBzOi8vb3BlbmFtLXZvbGtlci1kZXYuZm9yZ2VibG9ja3MuY29tJywKICAgICAqICAgICBwYXRobmFtZTogJy9hbS9YVUkvJywKICAgICAqICAgICBwb3J0OiAnJywKICAgICAqICAgICBwcm90b2NvbDogJ2h0dHBzJywKICAgICAqICAgICBzZWFyY2g6ICc/cmVhbG09L2JyYXZvJmF1dGhJbmRleFR5cGU9c2VydmljZSZhdXRoSW5kZXhWYWx1ZT1Jbml0aWF0ZU93bmVyQ2xhaW0nLAogICAgICogICAgIHVzZXJuYW1lOiAnJywKICAgICAqICAgICBwYXNzd29yZDogJycsCiAgICAgKiAgICAgc2VhcmNoUGFyYW06IHsKICAgICAqICAgICAgICAgcmVhbG06ICcvYnJhdm8nLAogICAgICogICAgICAgICBhdXRoSW5kZXhUeXBlOiAnc2VydmljZScsCiAgICAgKiAgICAgICAgIGF1dGhJbmRleFZhbHVlOiAnSW5pdGlhdGVPd25lckNsYWltJwogICAgICogICAgIH0KICAgICAqIH0KICAgICAqLwogICAgZnVuY3Rpb24gcGFyc2VVcmwoaHJlZikgewogICAgICAgIHZhciBtID0gaHJlZi5tYXRjaCgvXigoW146XC8/I10rKTo/KD86XC9cLygoPzooW15cLz8jOl0qKTooW15cLz8jOl0qKUApPyhbXlwvPyM6XSopKD86OihbXlwvPyM6XSopKT8pKSk/KFtePyNdKikoXD9bXiNdKik/KCMuKik/JC8pLAogICAgICAgIHIgPSB7CiAgICAgICAgICAgIGhhc2g6IG1bMTBdIHx8ICIiLCAgICAgICAgICAgICAgICAgICAgICAvLyAjLwogICAgICAgICAgICBob3N0OiBtWzNdIHx8ICIiLCAgICAgICAgICAgICAgICAgICAgICAgLy8gb3BlbmFtLXZvbGtlci1kZXYuZm9yZ2VibG9ja3MuY29tCiAgICAgICAgICAgIGhvc3RuYW1lOiBtWzZdIHx8ICIiLCAgICAgICAgICAgICAgICAgICAvLyBvcGVuYW0tdm9sa2VyLWRldi5mb3JnZWJsb2Nrcy5jb20KICAgICAgICAgICAgaHJlZjogbVswXSB8fCAiIiwgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vb3BlbmFtLXZvbGtlci1kZXYuZm9yZ2VibG9ja3MuY29tL2FtL1hVSS8/cmVhbG09L2JyYXZvJmF1dGhJbmRleFR5cGU9c2VydmljZSZhdXRoSW5kZXhWYWx1ZT1Jbml0aWF0ZU93bmVyQ2xhaW0jLwogICAgICAgICAgICBvcmlnaW46IG1bMV0gfHwgIiIsICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9vcGVuYW0tdm9sa2VyLWRldi5mb3JnZWJsb2Nrcy5jb20KICAgICAgICAgICAgcGF0aG5hbWU6IG1bOF0gfHwgKG1bMV0gPyAiLyIgOiAiIiksICAgIC8vIC9hbS9YVUkvCiAgICAgICAgICAgIHBvcnQ6IG1bN10gfHwgIiIsICAgICAgICAgICAgICAgICAgICAgICAvLyAKICAgICAgICAgICAgcHJvdG9jb2w6IG1bMl0gfHwgIiIsICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzCiAgICAgICAgICAgIHNlYXJjaDogbVs5XSB8fCAiIiwgICAgICAgICAgICAgICAgICAgICAvLyA/cmVhbG09L2JyYXZvJmF1dGhJbmRleFR5cGU9c2VydmljZSZhdXRoSW5kZXhWYWx1ZT1Jbml0aWF0ZU93bmVyQ2xhaW0KICAgICAgICAgICAgdXNlcm5hbWU6IG1bNF0gfHwgIiIsICAgICAgICAgICAgICAgICAgIC8vIAogICAgICAgICAgICBwYXNzd29yZDogbVs1XSB8fCAiIiwgICAgICAgICAgICAgICAgICAgLy8gCiAgICAgICAgICAgIHNlYXJjaFBhcmFtOiB7fSAgICAgICAgICAgICAgICAgICAgICAgICAvLyB7IHJlYWxtOiAnL2JyYXZvJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgYXV0aEluZGV4VHlwZTogJ3NlcnZpY2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBhdXRoSW5kZXhWYWx1ZTogJ0luaXRpYXRlT3duZXJDbGFpbScgfQogICAgICAgIH07CiAgICAgICAgaWYgKHIucHJvdG9jb2wubGVuZ3RoID09IDIpIHsKICAgICAgICAgICAgci5wcm90b2NvbCA9ICJmaWxlOi8vLyIgKyByLnByb3RvY29sLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgIHIub3JpZ2luID0gci5wcm90b2NvbCArICIvLyIgKyByLmhvc3Q7CiAgICAgICAgfQogICAgICAgIGlmIChyLnNlYXJjaC5sZW5ndGggPiAyKSB7CiAgICAgICAgICAgIHZhciBxdWVyeSA9IChyLnNlYXJjaC5pbmRleE9mKCc/JykgPT09IDApID8gci5zZWFyY2guc3Vic3RyKDEpIDogci5zZWFyY2g7CiAgICAgICAgICAgIHZhciB2YXJzID0gcXVlcnkuc3BsaXQoJyYnKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBwYWlyID0gdmFyc1tpXS5zcGxpdCgnPScpOwogICAgICAgICAgICByLnNlYXJjaFBhcmFtW2RlY29kZVVSSUNvbXBvbmVudChwYWlyWzBdKV0gPSBkZWNvZGVVUklDb21wb25lbnQocGFpclsxXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgci5ocmVmID0gci5vcmlnaW4gKyByLnBhdGhuYW1lICsgci5zZWFyY2ggKyByLmhhc2g7CiAgICAgICAgcmV0dXJuIHI7CiAgICB9Owp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"dc0c9905-4a58-4f61-8562-337514e610a7\",\"name\":\"Admin_IdPNormalization\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbWFwcyB0b2tlbiBjbGFpbSB2YWx1ZXMgdG8gbWFuYWdlZCBvYmplY3QgYXR0cmlidXRlcy4gSXQgdXNlcyBhICJjbGFpbSBtYXAiIHRoYXQgZGVmaW5lcwogKiBzZXZlcmFsIGNvbW1vbiBjbGFpbSBuYW1lcyBmb3IgYSBnaXZlbiBhdHRyaWJ1dGUgc28gdGhhdCB0aGlzIHNhbWUgc2NyaXB0IGNhbiBiZSB1c2VkIGZvciBhbGwgSWRQcy4KICogRm9yIGV4YW1wbGUsIHRoZSBhdHRyaWJ1dGUgYGZhbWlseU5hbWVgIGNhbiBiZSBwb3B1bGF0ZWQgZnJvbSBjbGFpbXMgYGZhbWlseU5hbWVgLCBgZmFtaWx5X25hbWVgLCBvciBgc25gLgogKiAKICogQWxzbywgaWYgY3VzdG9tIElkUCBjb25maWcgZXhpc3RzIGluIHNoYXJlZCBzdGF0ZSBhbmQgZGVmaW5lcyBJZFAtdG8tSURDIGdyb3VwIG1lbWJlcnNoaXAgbWFwcGluZ3MsCiAqIHRob3NlIHdpbGwgYmUgYXBwbGllZC9lbmZvcmNlZCBieSB0aGlzIHNjcmlwdC4gCiAqLwoKdmFyIFNIQVJFRF9TVEFURV9LRVkgPSAnaWRwQ3VzdG9tQ29uZmlnJzsKCi8vIEhlbHBlciB0byBhdm9pZCBzdHJpY3QgY29tcGFyaXNvbiBvZiBzdHJpbmcgb2JqZWN0cwpmdW5jdGlvbiBjb250YWluc0dyb3VwKGpzQXJyYXksIGphdmFTdHJpbmcpIHsKICBmb3IgKHZhciBpID0gMDsgaSA8IGpzQXJyYXkubGVuZ3RoOyBpKyspIHsKICAgIGlmIChqc0FycmF5W2ldID09IGphdmFTdHJpbmcpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfQogIHJldHVybiBmYWxzZTsKfQoKKGZ1bmN0aW9uICgpIHsKICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICBqYXZhLmxhbmcuU3RyaW5nLAogICAgamF2YS51dGlsLkFycmF5TGlzdCwKICAgIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUKICApOwogIAogIHZhciBub3JtYWxpemVkUHJvZmlsZURhdGEgPSBmci5Kc29uVmFsdWUuanNvbihmci5Kc29uVmFsdWUub2JqZWN0KCkpOwogIHZhciBpZHBDb25maWcgPSBzaGFyZWRTdGF0ZS5nZXQoU0hBUkVEX1NUQVRFX0tFWSk7CgogIC8vIElmIHdlIGhhdmUgY29uZmlnIHRoYXQgZGVmaW5lcyBhIGdyb3VwcyBjbGFpbSBtYXAgZm9yIHRoaXMgSWRQLCBlbnN1cmUgdGhlIGNsYWltIHZhbHVlIG1hdGNoZXMgb25lIHRoYXQncyBpbiB0aGUgbWFwCiAgaWYgKGlkcENvbmZpZyAmJiBpZHBDb25maWcuZ3JvdXBzKSB7CgogICAgbG9nZ2VyLm1lc3NhZ2UoJ2VuZm9yY2luZyBncm91cHMgY2xhaW0gY29uZmlnJyk7CgogICAgLy8gR2V0IHRoZSBncm91cHMgY2xhaW0gZnJvbSB0aGUgSWRQIHByb2ZpbGUKICAgIHZhciBncm91cHNDbGFpbSA9IHJhd1Byb2ZpbGUuZ2V0KGlkcENvbmZpZy5ncm91cHMuY2xhaW0pOwogICAgaWYgKGdyb3Vwc0NsYWltLmlzTnVsbCgpKSB7CiAgICAgIGxvZ2dlci5lcnJvcignZ3JvdXBzIGNsYWltIG1hcCB3YXMgZW5hYmxlZCBmb3IgInt9IiwgYnV0IGNsYWltICJ7fSIgd2FzIG5vdCBmb3VuZCBpbiB0aGUgcmF3IHByb2ZpbGUnLCBzZWxlY3RlZElkcCwgaWRwQ29uZmlnLmdyb3Vwcy5jbGFpbSk7CiAgICAgIHRocm93ICdSZXF1aXJlZCBncm91cHMgY2xhaW0gaXMgbWlzc2luZyBmcm9tIHJhdyBwcm9maWxlJzsKICAgIH0KCiAgICBsb2dnZXIubWVzc2FnZSgncmVjZWl2ZWQgZ3JvdXAgY2xhaW0gdmFsdWUge30nLCBncm91cHNDbGFpbSk7CgogICAgLy8gVmFsaWRhdGUgdGhlIGNsYWltIHR5cGUgYW5kIGNvbnZlcnQgc3RyaW5ncyB0byBzaW5nbGUtdmFsdWUgY29sbGVjdGlvbgogICAgdmFyIGdyb3Vwc0NsYWltTGlzdDsKICAgIGlmIChncm91cHNDbGFpbS5pc0NvbGxlY3Rpb24oKSkgewogICAgICBncm91cHNDbGFpbUxpc3QgPSBncm91cHNDbGFpbTsKICAgIH0gZWxzZSBpZiAoZ3JvdXBzQ2xhaW0uaXNTdHJpbmcoKSkgewogICAgICBncm91cHNDbGFpbUxpc3QgPSBuZXcgZnIuQXJyYXlMaXN0KCk7CiAgICAgIGdyb3Vwc0NsYWltTGlzdC5hZGQoZ3JvdXBzQ2xhaW0pOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgJ0dyb3VwcyBjbGFpbSB3YXMgbm90IGEgc3RyaW5nIG9yIGNvbGxlY3Rpb24nOwogICAgfQogICAgCiAgICAvLyBBc3NlcnQgdGhlIGNsYWltIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBncm91cAogICAgdmFyIGdyb3Vwc0NsYWltTGVuID0gZ3JvdXBzQ2xhaW1MaXN0LnNpemUoKTsKICAgIGlmIChncm91cHNDbGFpbUxlbiA8IDEpIHsKICAgICAgdGhyb3cgJ0FuIGVtcHR5IGdyb3VwcyBjbGFpbSB3YXMgZm91bmQgaW4gcmF3IHByb2ZpbGUnOwogICAgfQoKICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIElEQyBncm91cCBuYW1lIGluIHRoZSBtYXAuIElmIHRoZSByYXcgcHJvZmlsZSBncm91cHMgY2xhaW0gY29udGFpbnMKICAgIC8vIGEgdmFsdWUgdGhhdCBtYXRjaGVzIHRoZSBtYXAgZm9yIHRoYXQgSURDIGdyb3VwLCBhZGQgdGhhdCBJREMgZ3JvdXAgdG8gdGhlIGxpc3QgZm9yIHRoaXMgYWRtaW4uCiAgICB2YXIgZ3JvdXBzID0gW107CiAgICBmb3IgKHZhciBpZGNHcm91cE5hbWUgaW4gaWRwQ29uZmlnLmdyb3Vwcy5tYXBwaW5ncykgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3Vwc0NsYWltTGVuOyBpKyspIHsKICAgICAgICB2YXIgY2xhaW1Hcm91cElkID0gZ3JvdXBzQ2xhaW1MaXN0LmdldChpKS5hc1N0cmluZygpOwoKICAgICAgICBsb2dnZXIubWVzc2FnZSgnY2hlY2tpbmcgaWYgbWFwcGluZyBmb3IgSURDIGdyb3VwICJ7fSIgY29udGFpbnMgY2xhaW0gdmFsdWUgInt9IicsIGlkY0dyb3VwTmFtZSwgY2xhaW1Hcm91cElkKTsKCiAgICAgICAgaWYgKGNvbnRhaW5zR3JvdXAoaWRwQ29uZmlnLmdyb3Vwcy5tYXBwaW5nc1tpZGNHcm91cE5hbWVdLCBjbGFpbUdyb3VwSWQpKSB7CiAgICAgICAgICBncm91cHMucHVzaChpZGNHcm91cE5hbWUpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIEFzc2VydCBhdCBsZWFzdCBvbmUgZ3JvdXAgd2FzIG1hcHBlZCB0byB0aGUgY2xhaW0KICAgIGlmIChncm91cHMubGVuZ3RoID09IDApIHsKICAgICAgbG9nZ2VyLmVycm9yKCdncm91cHMgY2xhaW0gbWFwIHdhcyBlbmFibGVkIGZvciAie30iLCBidXQgdGhlIHZhbHVlIG9mIGNsYWltICJ7fSIgZGlkIG5vdCBtYXRjaCBhIGdyb3VwIG1hcHBpbmcnLCBzZWxlY3RlZElkcCwgaWRwQ29uZmlnLmdyb3Vwcy5jbGFpbSk7CiAgICAgIHRocm93ICdSYXcgcHJvZmlsZSBncm91cHMgY2xhaW0gdmFsdWUgZG9lcyBub3QgbWF0Y2ggYSBjb25maWd1cmVkIG1hcHBpbmcnOwogICAgfQoKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2dyb3VwcycsIGdyb3Vwcyk7CiAgICBzaGFyZWRTdGF0ZS5wdXQoJ2dyb3VwcycsIGdyb3Vwcyk7CiAgfSBlbHNlIHsKICAgIGxvZ2dlci5tZXNzYWdlKCdubyBlbmFibGVkIGdyb3VwcyBjbGFpbSBjb25maWcgdG8gZW5mb3JjZScpOwogIH0KCiAgLy8gTWFwcyBub3JtYWxpemVkIHByb2ZpbGUga2V5cyB0byB0aGUgcG9zc2libGUgcmF3IHByb2ZpbGUga2V5cyB0aGF0IHZhbHVlcyBjYW4gY29tZSBmcm9tCiAgdmFyIGNsYWltTWFwID0gewogICAgZW1haWw6IFsnZW1haWwnLCAnbWFpbCddLAogICAgZmFtaWx5TmFtZTogWydmYW1pbHlOYW1lJywgJ2ZhbWlseV9uYW1lJywgJ3NuJ10sCiAgICBnaXZlbk5hbWU6IFsnZ2l2ZW5OYW1lJywgJ2dpdmVuX25hbWUnXQogIH07CgogIC8vIFRyeSB0byBwb3B1bGF0ZSBlYWNoIG5vcm1hbGl6ZWQgcHJvZmlsZSBwcm9wZXJ0eQogIHZhciBrZXlzID0gT2JqZWN0LmtleXMoY2xhaW1NYXApOwogIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewogICAgdmFyIG5vcm1hbGl6ZWRQcm9wID0ga2V5c1tpXTsKICAgIC8vIFRyeSBlYWNoIG1hcHBlZCByYXcgcHJvZmlsZSBrZXkgdW50aWwgYSB2YWx1ZSBpcyBmb3VuZAogICAgZm9yICh2YXIgaiA9IDA7IGogPCBjbGFpbU1hcFtub3JtYWxpemVkUHJvcF0ubGVuZ3RoOyBqKyspIHsKICAgICAgdmFyIHJhd1Byb3AgPSBjbGFpbU1hcFtub3JtYWxpemVkUHJvcF1bal07CiAgICAgIGlmICghcmF3UHJvZmlsZS5nZXQocmF3UHJvcCkuaXNOdWxsKCkpIHsKICAgICAgICBub3JtYWxpemVkUHJvZmlsZURhdGEucHV0KG5vcm1hbGl6ZWRQcm9wLCByYXdQcm9maWxlLmdldChyYXdQcm9wKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiBub3JtYWxpemVkUHJvZmlsZURhdGE7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"847aab1b-c739-4d64-b26c-180f96cba02b\",\"name\":\"Select Theme by Browser Language\",\"description\":\"Select and apply theme from based on the browser language in the request.\",\"script\":\"LyogU2VsZWN0IFRoZW1lIGJ5IEJyb3dzZXIgTGFuZ3VhZ2UKICogCiAqIFNlbGVjdCBhbmQgYXBwbHkgdGhlbWUgZnJvbSBiYXNlZCBvbiB0aGUgYnJvd3NlciBsYW5ndWFnZSBpbiB0aGUgcmVxdWVzdC4KICogCiAqIFRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHBhcmFtZXRyaXplZCEKICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICovCihmdW5jdGlvbiAoKSB7CiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgLyogQmVnaW4gU2NyaXB0IENvbmZpZ3VyYXRpb24gKi8KCiAgICAvLyB0aGUgc2NyaXB0IGV4cGVjdHMgdGhlIHRoZW1lcyB0byBiZSBuYW1lZCA8YmFzZVRoZW1lPl88bGFuZ3VhZ2U+LCBlLmcuICJaYXJkb3pfZW4iCiAgICB2YXIgYmFzZVRoZW1lID0gIlphcmRveiI7CgogICAgLy8gYWRkIGFsbCB0aGUgbGFuZ3VhZ2UgY29kZXMgeW91IHdhbnQgdG8gc3VwcG9ydAogICAgdmFyIHN1cHBvcnRlZExhbmd1YWdlcyA9IFsiZGUiLCAiZW4iLCAiZnIiXTsKCiAgICAvLyBzcGVjaWZ5IHRoZSBkZWZhdWx0IGxhbmd1YWdlIHRvIGZhbGwgYmFjayBvbiBpZiB0aGUgYnJvd3NlciBsYW5ndWFnZSBpcyBub3QgYSBzdXBwb3J0ZWQgbGFuZ3VhZ2UKICAgIHZhciBkZWZhdWx0TGFuZ3VhZ2UgPSAiZW4iOwoKICAgIC8qIEVuZCBTY3JpcHQgQ29uZmlndXJhdGlvbiAgICovCiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICB2YXIgdGhlbWUgPSBnZXRUaGVtZUJ5TGFuZ3VhZ2UoYmFzZVRoZW1lKTsKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuUG9sbGluZ1dhaXRDYWxsYmFjawogICAgKQogICAgaWYgKHRoZW1lICYmIGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICB2YXIgc3RhZ2UgPSAidGhlbWVJZD0iICsgdGhlbWU7CiAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICAgIG5ldyBmci5Qb2xsaW5nV2FpdENhbGxiYWNrKCIxMDAiLCAiUGxlYXNlIHdhaXQgLi4uIikKICAgICAgICApLndpdGhTdGFnZShzdGFnZSkuYnVpbGQoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgIH0KCiAgICAvKgogICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgdGhlbWUgdG8gc2VsZWN0IGJhc2VkIG9uIGJyb3dzZXIgbGFuZ3VhZ2UKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0VGhlbWVCeUxhbmd1YWdlKHRoZW1lKSB7CiAgICAgICAgdmFyIGxhbmd1YWdlSGVhZGVyID0gZ2V0SGVhZGVyKCJhY2NlcHQtbGFuZ3VhZ2UiKTsKICAgICAgICB2YXIgbGFuZ3VhZ2UgPSBsYW5ndWFnZUhlYWRlci5zcGxpdCgnOycpWzBdLnNwbGl0KCcsJylbMF0uc3BsaXQoJy0nKVswXTsKICAgICAgICBpZiAoc3VwcG9ydGVkTGFuZ3VhZ2VzLmluZGV4T2YobGFuZ3VhZ2UpIDwgMCkgewogICAgICAgICAgICBsYW5ndWFnZSA9IGRlZmF1bHRMYW5ndWFnZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoZW1lICsgIl8iICsgbGFuZ3VhZ2U7CiAgICB9CgogICAgLyoKICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgaGVhZGVyCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEhlYWRlcihoZWFkZXJOYW1lKSB7CiAgICAgICAgcmV0dXJuIHJlcXVlc3RIZWFkZXJzLmdldChoZWFkZXJOYW1lKS5nZXQoMCkgKyAiIjsKICAgIH0KfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"164fe425-01e7-4b0b-9f60-fb41f6bf362b\",\"name\":\"FRAAS-7955 Display States\",\"description\":\"FRAAS-7955 Display sharedState and transientState.\",\"script\":\"LyogZGVidWcKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogRGlzcGxheSBzaGFyZWRTdGF0ZSBhbmQgdHJhbnNpZW50U3RhdGUuCiAqIAogKiBUaGlzIHNjcmlwdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICovCnZhciBvdXRwdXQgPSB0cnVlOwoKdmFyIGFuY2hvciA9ICJhbmNob3ItIi5jb25jYXQoZ2VuZXJhdGVOdW1lcmljVG9rZW4oJ3h4eCcpKTsKdmFyIGhhbGlnbiA9ICJsZWZ0IjsKdmFyIG1lc3NhZ2UgPSAiPGg0PkN1cnJlbnQgU3RhdGUgVmFsdWVzPC9oND4iLmNvbmNhdCgKICAgICI8cD48Yj5TaGFyZWQgU3RhdGU8L2I+Ojxici8+IikuY29uY2F0KAogICAgICBzaGFyZWRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+VHJhbnNpZW50IFN0YXRlPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgICAgdHJhbnNpZW50U3RhdGUudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikKdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwiXCI7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLnN0eWxlID0gXCJ0ZXh0LWFsaWduOiBsZWZ0OyBpbmxpbmUtc2l6ZTogNDMwcHg7IG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XCI7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIikuY29uY2F0KG1lc3NhZ2UpLmNvbmNhdCgiJztcbiIpLmNvbmNhdCgKICAiICB9XG4iKS5jb25jYXQoCiAgIn0pIikKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawopCmlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgIGFuY2hvcgogICAgICAgICksCiAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICApLmJ1aWxkKCkKfQplbHNlIHsKICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0KCiAvKgogICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAqIAogICogRXhhbXBsZToKICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICogJ3h4eC14eHgnIHByb2R1Y2VzICc0MzItNTIxJwogICovCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxMHwwOwogICAgICAgIHZhciB2ID0gcjsKICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"fe5e303b-9ed7-4853-84fe-0ae43e2254d5\",\"name\":\"Display Username\",\"description\":\"Display the username in an HTML dialog.\",\"script\":\"LyogRGlzcGxheSBVc2VybmFtZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBEaXNwbGF5IHRoZSB1c2VybmFtZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICB0cnkgewogICAgdmFyIG91dGNvbWUgPSAndHJ1ZSc7CiAgICB2YXIgdXNlcm5hbWUgPSBub2RlU3RhdGUuZ2V0KCd1c2VybmFtZScpLmFzU3RyaW5nKCk7CgogICAgLy8gU3BlY2lmeSB0aGUgbWVzc2FnZSB5b3Ugd2FudCB0byBkaXNwbGF5LiBZb3UgbWF5IHVzZSBIVE1MIGZvciBmb3JtYXR0aW5nLiBBdm9pZCBsaW5lIGJyZWFrcyEgVXNlIDxicj4gaW5zdGVhZC4KICAgIHZhciBtZXNzYWdlID0gJzxoNT4nK3VzZXJuYW1lKyc8L2g1Pic7CgogICAgdmFyIGFuY2hvciA9ICdhbmNob3ItJytnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4Jyk7CiAgICB2YXIgc2NyaXB0ID0gIkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFxuIFwKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2FsbGJhY2stY29tcG9uZW50JykpLmZvckVhY2goXG4gXAogICAgICBmdW5jdGlvbiAoZSkge1xuIFwKICAgICAgICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gXAogICAgICAgIGlmIChtZXNzYWdlLmZpcnN0Q2hpbGQgJiYgbWVzc2FnZS5maXJzdENoaWxkLm5vZGVOYW1lID09ICcjdGV4dCcgJiYgbWVzc2FnZS5maXJzdENoaWxkLm5vZGVWYWx1ZS50cmltKCkgPT0gJyIrYW5jaG9yKyInKSB7XG4gXAogICAgICAgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIittZXNzYWdlKyInO1xuIFwKICAgICAgICB9XG4gXAogICAgICB9KSI7CiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICBpZiAobWVzc2FnZS5sZW5ndGggJiYgY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKAogICAgICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICAgICAgZnIuVGV4dE91dHB1dENhbGxiYWNrLklORk9STUFUSU9OLAogICAgICAgICAgICAgICAgYW5jaG9yCiAgICAgICAgICAgICksCiAgICAgICAgICAgIG5ldyBmci5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2soc2NyaXB0KQogICAgICAgICkuYnVpbGQoKQogICAgfQogICAgZWxzZSB7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKG91dGNvbWUpLmJ1aWxkKCk7CiAgICB9CiAgfSBjYXRjaCAoZXJyb3IpIHsKICAgIGxvZ2dlci5lcnJvcignRXJyb3I6ICcgKyBlcnJvcik7CiAgICBub2RlU3RhdGUucHV0U2hhcmVkKCdlcnJvcicsIGVycm9yLm1lc3NhZ2UpOwogIH0KCiAgIC8qCiAgICAqIEdlbmVyYXRlIGEgdG9rZW4gaW4gdGhlIGRlc2lyZWQgZm9ybWF0LiBBbGwgJ3gnIGNoYXJhY3RlcnMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGEgcmFuZG9tIG51bWJlciAwLTkuCiAgICAqIAogICAgKiBFeGFtcGxlOgogICAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAgICogJ3h4eC14eHgnIHByb2R1Y2VzICc0MzItNTIxJwogICAgKi8KICBmdW5jdGlvbiBnZW5lcmF0ZU51bWVyaWNUb2tlbihmb3JtYXQpIHsKICAgICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpKjEwfDA7CiAgICAgICAgICB2YXIgdiA9IHI7CiAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICAgIH0pOwogIH0KfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"37bf200a-158f-4a45-8ee5-81516e4593f8\",\"name\":\"Display Session Info\",\"description\":\"Display session info.\",\"script\":\"LyogRGlzcGxheSBTZXNzaW9uIEluZm8KICogCiAqIERpc3BsYXkgU2Vzc2lvbiBJbmZvLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICovCihmdW5jdGlvbiAoKSB7CiAgICBvdXRjb21lID0gInRydWUiOwoKICAgIHZhciBhbmNob3IgPSAiYW5jaG9yLSIuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CiAgICB2YXIgaGFsaWduID0gImxlZnQiOwoKICAgIHZhciBjaG9pY2VzID0gW107CiAgICAgIHZhciBkZWZhdWx0Q2hvaWNlID0gMDsKICAKICAgICAgdmFyIGluY2x1ZGUgPSBbIm9yZyIsImlkcCIsInNhYXMiLCJwcm9maWxlVHlwZSIsImdpdmVuTmFtZSIsInNuIiwibWFpbCIsInJvbGVzIiwidXNlck5hbWUiLCJVc2VySWQiLCJMb2NhbGUiLCJhdXRoSW5zdGFudCIsIkF1dGhMZXZlbCIsIkhvc3QiLCJTZXJ2aWNlIl07CiAgICB2YXIgbWVzc2FnZSA9ICIiOwogICAgaWYgKHR5cGVvZiBleGlzdGluZ1Nlc3Npb24gIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICBtZXNzYWdlID0gIjxoND5TZXNzaW9uIEluZm88L2g0PjxwIHN0eWxlPVwiZm9udC1mYW1pbHk6Y291cmllcjtcIj4iOwogICAgICAgICAgaW5jbHVkZS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICAgICAgICBtZXNzYWdlICs9ICI8Yj4iICsga2V5ICsgIjwvYj46ICIgKyBleGlzdGluZ1Nlc3Npb24uZ2V0KGtleSkgKyAiPGJyLz4iOwogICAgICAgIH0pOwogICAgICAgICBtZXNzYWdlICs9ICI8L3A+PHAgc3R5bGU9XCJmb250LXNpemU6NzAlO2ZvbnQtZmFtaWx5OmNvdXJpZXI7XCI+IgogICAgICAgICAgdmFyIGVudHJpZXMgPSBleGlzdGluZ1Nlc3Npb24ua2V5U2V0KCkudG9BcnJheSgpOwogICAgICAgIGVudHJpZXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgICAgICAgaWYgKGluY2x1ZGUuaW5kZXhPZigiIitrZXkpPT09LTEpIHsKICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gIjxiPiIgKyBrZXkgKyAiPC9iPjogIiArIGV4aXN0aW5nU2Vzc2lvbi5nZXQoa2V5KSArICI8YnIvPiI7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAgbWVzc2FnZSArPSAiPC9wPiIKICAgICAgICAgIGNob2ljZXMucHVzaCgiR290byBTQU1MIEFwcCIpOwogICAgICAgICAgY2hvaWNlcy5wdXNoKCJHb3RvIE9JREMgQXBwIik7CiAgICAgICAgICBpZiAoIiIrZXhpc3RpbmdTZXNzaW9uLmdldCgicHJvZmlsZVR5cGUiKSA9PT0gInBlcnNpc3RlbnQiKSB7CiAgICAgICAgICAgICAgY2hvaWNlcy5wdXNoKCJHb3RvIFByb2ZpbGUgUGFnZSIpOwogICAgICAgIH0KICAgICAgICAgIGNob2ljZXMucHVzaCgiTG9nb3V0Iik7CiAgICB9IGVsc2UgewogICAgICAgICAgbWVzc2FnZSA9ICI8aDQ+Tm8gU2Vzc2lvbiE8L2g0PjxwPiIKICAgICAgICAgIGNob2ljZXMucHVzaCgiTG9naW4iKTsKICAgIH0KICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4iLmNvbmNhdCgKICAgICAgImRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NhbGxiYWNrLWNvbXBvbmVudCcpKS5mb3JFYWNoKFxuIikuY29uY2F0KAogICAgICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAgICAgIiAgdmFyIG1lc3NhZ2UgPSBlLmZpcnN0RWxlbWVudENoaWxkO1xuIikuY29uY2F0KAogICAgICAiICBpZiAobWVzc2FnZS5maXJzdENoaWxkICYmIG1lc3NhZ2UuZmlyc3RDaGlsZC5ub2RlTmFtZSA9PSAnI3RleHQnICYmIG1lc3NhZ2UuZmlyc3RDaGlsZC5ub2RlVmFsdWUudHJpbSgpID09ICciKS5jb25jYXQoYW5jaG9yKS5jb25jYXQoIicpIHtcbiIpLmNvbmNhdCgKICAgICAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwiXCI7XG4iKS5jb25jYXQoCiAgICAgICIgICAgbWVzc2FnZS5zdHlsZSA9IFwidGV4dC1hbGlnbjogbGVmdDsgaW5saW5lLXNpemU6IDQzMHB4OyBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1wiO1xuIikuY29uY2F0KAogICAgICAiICAgIG1lc3NhZ2UuYWxpZ24gPSBcIiIpLmNvbmNhdChoYWxpZ24pLmNvbmNhdCgiXCI7XG4iKS5jb25jYXQoCiAgICAgICIgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIikuY29uY2F0KG1lc3NhZ2UpLmNvbmNhdCgiJztcbiIpLmNvbmNhdCgKICAgICAgIiAgfVxuIikuY29uY2F0KAogICAgICAifSkiKQogIAogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suVGV4dE91dHB1dENhbGxiYWNrLAogICAgICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjaywKICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLkNvbmZpcm1hdGlvbkNhbGxiYWNrCiAgICApCiAgICBpZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKAogICAgICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICAgICAgZnIuVGV4dE91dHB1dENhbGxiYWNrLklORk9STUFUSU9OLAogICAgICAgICAgICAgICAgYW5jaG9yCiAgICAgICAgICAgICksCiAgICAgICAgICAgIG5ldyBmci5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2soc2NyaXB0KSwKICAgICAgICAgICAgbmV3IGZyLkNvbmZpcm1hdGlvbkNhbGxiYWNrKAogICAgICAgICAgICAgICAgZnIuQ29uZmlybWF0aW9uQ2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgICAgICBjaG9pY2VzLAogICAgICAgICAgICAgICAgZGVmYXVsdENob2ljZQogICAgICAgICAgICApCiAgICAgICAgKS5idWlsZCgpCiAgICB9CiAgICBlbHNlIHsKICAgICAgb3V0Y29tZSA9IGNob2ljZXNbY2FsbGJhY2tzLmdldCgyKS5nZXRTZWxlY3RlZEluZGV4KCldOwogICAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbyhvdXRjb21lKS5idWlsZCgpOwogICAgfQoKICAgICAvKgogICAgICAqIEdlbmVyYXRlIGEgdG9rZW4gaW4gdGhlIGRlc2lyZWQgZm9ybWF0LiBBbGwgJ3gnIGNoYXJhY3RlcnMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGEgcmFuZG9tIG51bWJlciAwLTkuCiAgICAgICogCiAgICAgICogRXhhbXBsZToKICAgICAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAgICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICAgICovCiAgICBmdW5jdGlvbiBnZW5lcmF0ZU51bWVyaWNUb2tlbihmb3JtYXQpIHsKICAgICAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbihjKSB7CiAgICAgICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxMHwwOwogICAgICAgICAgICB2YXIgdiA9IHI7CiAgICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDEwKTsKICAgICAgICB9KTsKICAgIH0KfSgpKTsKCi8qCkxvY2FsZTogZW5fVVMKYXV0aEluc3RhbnQ6IDIwMjEtMDktMjVUMTc6Mjg6MzhaCk9yZ2FuaXphdGlvbjogbz1hbHBoYSxvdT1zZXJ2aWNlcyxvdT1hbS1jb25maWcKbWFpbDogdm9sa2VyQHNjaGV1YmVyLm5hbWUKUHJpbmNpcGFsczogdm9sa2VyQHNjaGV1YmVyLm5hbWUKVXNlclByb2ZpbGU6IElnbm9yZQpDaGFyU2V0OiBVVEYtOApGdWxsTG9naW5VUkw6IC9hbS9VSS9Mb2dpbj9jb2RlPTQlMkYwQVg0WGZXamlFZmJyZklzdHNGVUtvYWliUENRbVRidVBvbkxmdWhwWWhqZmotTjVRRWU5dTJQNU9zOXdOYWRHYVBzUVZCQSZzY29wZT1lbWFpbCtwcm9maWxlK2h0dHBzJTNBJTJGJTJGd3d3Lmdvb2dsZWFwaXMuY29tJTJGYXV0aCUyRnVzZXJpbmZvLmVtYWlsK2h0dHBzJTNBJTJGJTJGd3d3Lmdvb2dsZWFwaXMuY29tJTJGYXV0aCUyRnVzZXJpbmZvLnByb2ZpbGUrb3BlbmlkJnJlYWxtPSUyRmFscGhhJnN0YXRlPWZ5a3BydGZtZWNscmd3c3ptb212cXhubGlycmVoY3MmaGQ9c2NoZXViZXIubmFtZSZwcm9tcHQ9bm9uZSZhdXRodXNlcj0yCmNsaWVudFR5cGU6IGdlbmVyaWNIVE1MCmdvdG86IC9hbS9YVUkvP3JlYWxtPS9hbHBoYSZhdXRoSW5kZXhUeXBlPXNlcnZpY2UmYXV0aEluZGV4VmFsdWU9U2Vzc2lvbkluZm8mRm9yY2VBdXRoPXRydWUjLwpBTUN0eElkOiBkMzE4ODkzOC1kMDdlLTQxMzQtOTVkYi1mMWNjOTdmYzZjNDAtNTAzMjc1CmxvZ2luVVJMOiAvYW0vVUkvTG9naW4Kc246IFNjaGV1YmVyCmFtbGJjb29raWU6IDAxCkhvc3ROYW1lOiA5OS43Mi4yOC4xODIKVXNlclRva2VuOiB2b2xrZXJAc2NoZXViZXIubmFtZQpnaXZlbk5hbWU6IFZvbGtlcgpzdWNjZXNzVVJMOiAvYW0vWFVJLz9yZWFsbT0vYWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPVNlc3Npb25JbmZvJkZvcmNlQXV0aD10cnVlIy8KU2VydmljZTogUm91dGVyCkhvc3Q6IDk5LjcyLjI4LjE4MgpBdXRoTGV2ZWw6IDAKaWRwOiBnb29nbGUKVXNlcklkOiB2b2xrZXJAc2NoZXViZXIubmFtZQpzdW4uYW0uVW5pdmVyc2FsSWRlbnRpZmllcjogaWQ9dm9sa2VyQHNjaGV1YmVyLm5hbWUsb3U9dXNlcixvPWFscGhhLG91PXNlcnZpY2VzLG91PWFtLWNvbmZpZwpPaWRjU2lkOiBBQ3VUUUlPYmowdGFqUFloTE9qTWxXYzJ1ck0KUHJpbmNpcGFsOiBpZD12b2xrZXJAc2NoZXViZXIubmFtZSxvdT11c2VyLG89YWxwaGEsb3U9c2VydmljZXMsb3U9YW0tY29uZmlnCiAqLw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"ab917dad-6fdb-46c2-8c8c-42f094ebeea1\",\"name\":\"IDP Re-Lookup\",\"description\":\"Perform IDP re-lookup based on the Organization ID from the initial lookup. Set users' external IDP in shared state for further processing.\",\"script\":\"LyogSURQIFJlLUxvb2t1cAogKiAKICogUGVyZm9ybSBJRFAgcmUtbG9va3VwIGJhc2VkIG9uIHRoZSBPcmdhbml6YXRpb24gSUQgZnJvbSB0aGUgaW5pdGlhbCBsb29rdXAuIAogKiBTZXQgdXNlcnMnIGV4dGVybmFsIElEUCBpbiBzaGFyZWQgc3RhdGUgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4KICogCiAqIFRoaXMgc2NyaXB0IHJlcXVpcmVzIHBhcmFtZXRyaXphdGlvbi4gTWFrZSBzdXJlIHlvdSBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAtIGZhbHNlCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICovCihmdW5jdGlvbiAoKSB7CiAgICBsb2dnZXIubWVzc2FnZSgiSURQIFJlLUxvb2t1cDogc3RhcnQiKTsKICAgICAgb3V0Y29tZSA9ICJmYWxzZSI7CiAgICAgIHZhciByZWZlcmVyID0gcGFyc2VVcmwocmVxdWVzdEhlYWRlcnMuZ2V0KCJyZWZlcmVyIikuZ2V0KDApKTsKICAgICAgdmFyIG9yZ0lkID0gcmVmZXJlci5zZWFyY2hQYXJhbS5vOwogICAgICBzaGFyZWRTdGF0ZS5wdXQoInVzZXJuYW1lIiwgcmVmZXJlci5zZWFyY2hQYXJhbS51KTsKCiAgICAgIC8qIEJlZ2luIENvbmZpZ3VyYXRpb24gKi8KICAKICAgIC8vIGxvbmctbGl2ZWQgdG9rZW4sIGV4cGlyZXM6IEZyaWRheSwgSmFudWFyeSAxNiwgMjAzMiA5OjQ1OjE0IFBNIEdNVC0wNjowMAogICAgdmFyIElETV9BUElfVE9LRU4gPSAiZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6STFOaUo5LmV5SnpkV0lpT2lKbE1XRTFZelU1T0MwNE1HVXlMVFJoWkdNdFlqTTBOUzB6TVdRd01tVXlPVGhqTkdJaUxDSmpkSE1pT2lKUFFWVlVTREpmUjFKQlRsUmZVMFZVSWl3aVlYVjBhRjlzWlhabGJDSTZNQ3dpWVhWa2FYUlVjbUZqYTJsdVowbGtJam9pTkdZek1Ea3hZVGt0WmpVME5pMDBNRGRpTFRrek5qTXRNMlJpWkdKaVpqWXpNRGMwTFRNMU56Y3dPU0lzSW5OMVltNWhiV1VpT2lKbE1XRTFZelU1T0MwNE1HVXlMVFJoWkdNdFlqTTBOUzB6TVdRd01tVXlPVGhqTkdJaUxDSnBjM01pT2lKb2RIUndjem92TDI5d1pXNWhiUzEyYjJ4clpYSXRaR1YyTG1admNtZGxZbXh2WTJ0ekxtTnZiVG8wTkRNdllXMHZiMkYxZEdneUwyRnNjR2hoSWl3aWRHOXJaVzVPWVcxbElqb2lZV05qWlhOelgzUnZhMlZ1SWl3aWRHOXJaVzVmZEhsd1pTSTZJa0psWVhKbGNpSXNJbUYxZEdoSGNtRnVkRWxrSWpvaUxVSXhRbFJVTTNGcU5pMDRaa2QzYTJkNmJ6Z3pOemxTUmpWSkxqQTROa05KZFRGeU9VTkNObFJPY0VJd1YzUTVPRkV5TlRKWWN5SXNJbUYxWkNJNklqWTVaREExWXpFeExXVTRabVV0TkdGbE5TMWhOMk01TFRJeU5USmhOR1E0TldSbU5DSXNJbTVpWmlJNk1UWTBNalUyTXpreE5Dd2laM0poYm5SZmRIbHdaU0k2SW5CaGMzTjNiM0prSWl3aWMyTnZjR1VpT2xzaVpuSTZhV1J0T2lvaVhTd2lZWFYwYUY5MGFXMWxJam94TmpReU5UWXpPVEUwTENKeVpXRnNiU0k2SWk5aGJIQm9ZU0lzSW1WNGNDSTZNVGsxTnpreU16a3hOQ3dpYVdGMElqb3hOalF5TlRZek9URTBMQ0psZUhCcGNtVnpYMmx1SWpvek1UVXpOakF3TURBc0ltcDBhU0k2SWkxQ01VSlVWRE54YWpZdE9HWkhkMnRuZW04NE16YzVVa1kxU1M1Q1NIRlpOVnAzYzBsR05WcE1iRXR2Y0dOdlVsVkdWSE5MVWpBaUxDSnRZWGxmWVdOMElqcDdJbU5zYVdWdWRGOXBaQ0k2V3lJMk9XUXdOV014TVMxbE9HWmxMVFJoWlRVdFlUZGpPUzB5TWpVeVlUUmtPRFZrWmpRaVhYMTkuZjJObXdIVnRla0g5M2pPNy1qTTZta0ZSY3V2RU4zV3pjS3NILVJBUG5sYyI7CgogICAgLy8gSURNIEFQSSBDb25maWd1cmF0aW9uCiAgICB2YXIgSURNX0FQSV9VUkkgPSByZWZlcmVyLm9yaWdpbiArICIvb3BlbmlkbS9tYW5hZ2VkL2FscGhhX29yZ2FuaXphdGlvbi8iKyBvcmdJZCArICI/X2ZpZWxkcz1uYW1lLGRlc2NyaXB0aW9uLGlkcE5hbWUsaWRwVHlwZSxpZHBEb21haW5zLGlkcEpvdXJuZXksaWRwVGhlbWUsaWRwUGVyc2lzdCI7CgogICAgICAvKiBFbmQgQ29uZmlndXJhdGlvbiAqLwoKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldE1ldGhvZCgnR0VUJyk7CiAgICByZXF1ZXN0LnNldFVyaShJRE1fQVBJX1VSSSk7CiAgICByZXF1ZXN0LmdldEhlYWRlcnMoKS5hZGQoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04Iik7CiAgICByZXF1ZXN0LmdldEhlYWRlcnMoKS5hZGQoIkF1dGhvcml6YXRpb24iLCAiQmVhcmVyICIgKyBJRE1fQVBJX1RPS0VOKTsKCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICBsb2dnZXIubWVzc2FnZSgiSURQIFJlLUxvb2t1cDogSlNPTiByZXN1bHQ6ICIgKyBKU09OLnN0cmluZ2lmeShyZXN1bHQpKTsKICAgIAogICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICBvdXRjb21lID0gInRydWUiOwogICAgICAgIHZhciByb3V0ZWRJRFBzID0gW3Jlc3VsdF07CiAgICAgICAgc2hhcmVkU3RhdGUucHV0KCJyb3V0ZWRJRFBzIiwgcm91dGVkSURQcyk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklEUCBSZS1Mb29rdXA6IEZvdW5kIElEUCIpOwogICAgfQogICAgbG9nZ2VyLm1lc3NhZ2UoIklEUCBSZS1Mb29rdXA6IGVuZCBbb3V0Y29tZT17fV0iLCBvdXRjb21lKTsKCiAgICAvKgogICAgICogUGFyc2UgYSBVUkwgaW50byBpdHMgY29tcG9uZW50cyBhbmQgbWFrZSB0aGVtIGVhc2lseSBhY2Nlc3NpYmxlIGJ5IG5hbWUKICAgICAqCiAgICAgKiBVc2UgaW4gYSBTY3JpcHRlIERlY2lzaW9uIE5vZGUgU2NyaXB0IGFzIGZvbGxvd3M6CiAgICAgKiB2YXIgcmVmZXJlciA9IHBhcnNlVXJsKHJlcXVlc3RIZWFkZXJzLmdldCgicmVmZXJlciIpLmdldCgwKSk7CiAgICAgKiB2YXIgb3JpZ2luID0gcmVmZXJlci5vcmlnaW47CiAgICAgKiAKICAgICAqIGUuZy46IGh0dHBzOi8vb3BlbmFtLXZvbGtlci1kZXYuZm9yZ2VibG9ja3MuY29tL2FtL1hVSS8/cmVhbG09L2JyYXZvJmF1dGhJbmRleFR5cGU9c2VydmljZSZhdXRoSW5kZXhWYWx1ZT1Jbml0aWF0ZU93bmVyQ2xhaW0jLwogICAgICogewogICAgICogICAgIGhhc2g6ICcjLycsCiAgICAgKiAgICAgaG9zdDogJ29wZW5hbS12b2xrZXItZGV2LmZvcmdlYmxvY2tzLmNvbScsCiAgICAgKiAgICAgaG9zdG5hbWU6ICdvcGVuYW0tdm9sa2VyLWRldi5mb3JnZWJsb2Nrcy5jb20nLAogICAgICogICAgIGhyZWY6ICdodHRwczovL29wZW5hbS12b2xrZXItZGV2LmZvcmdlYmxvY2tzLmNvbS9hbS9YVUkvP3JlYWxtPS9icmF2byZhdXRoSW5kZXhUeXBlPXNlcnZpY2UmYXV0aEluZGV4VmFsdWU9SW5pdGlhdGVPd25lckNsYWltIy8nLAogICAgICogICAgIG9yaWdpbjogJ2h0dHBzOi8vb3BlbmFtLXZvbGtlci1kZXYuZm9yZ2VibG9ja3MuY29tJywKICAgICAqICAgICBwYXRobmFtZTogJy9hbS9YVUkvJywKICAgICAqICAgICBwb3J0OiAnJywKICAgICAqICAgICBwcm90b2NvbDogJ2h0dHBzJywKICAgICAqICAgICBzZWFyY2g6ICc/cmVhbG09L2JyYXZvJmF1dGhJbmRleFR5cGU9c2VydmljZSZhdXRoSW5kZXhWYWx1ZT1Jbml0aWF0ZU93bmVyQ2xhaW0nLAogICAgICogICAgIHVzZXJuYW1lOiAnJywKICAgICAqICAgICBwYXNzd29yZDogJycsCiAgICAgKiAgICAgc2VhcmNoUGFyYW06IHsKICAgICAqICAgICAgICAgcmVhbG06ICcvYnJhdm8nLAogICAgICogICAgICAgICBhdXRoSW5kZXhUeXBlOiAnc2VydmljZScsCiAgICAgKiAgICAgICAgIGF1dGhJbmRleFZhbHVlOiAnSW5pdGlhdGVPd25lckNsYWltJwogICAgICogICAgIH0KICAgICAqIH0KICAgICAqLwogICAgZnVuY3Rpb24gcGFyc2VVcmwoaHJlZikgewogICAgICAgIHZhciBtID0gaHJlZi5tYXRjaCgvXigoW146XC8/I10rKTo/KD86XC9cLygoPzooW15cLz8jOl0qKTooW15cLz8jOl0qKUApPyhbXlwvPyM6XSopKD86OihbXlwvPyM6XSopKT8pKSk/KFtePyNdKikoXD9bXiNdKik/KCMuKik/JC8pLAogICAgICAgIHIgPSB7CiAgICAgICAgICAgIGhhc2g6IG1bMTBdIHx8ICIiLCAgICAgICAgICAgICAgICAgICAgICAvLyAjLwogICAgICAgICAgICBob3N0OiBtWzNdIHx8ICIiLCAgICAgICAgICAgICAgICAgICAgICAgLy8gb3BlbmFtLXZvbGtlci1kZXYuZm9yZ2VibG9ja3MuY29tCiAgICAgICAgICAgIGhvc3RuYW1lOiBtWzZdIHx8ICIiLCAgICAgICAgICAgICAgICAgICAvLyBvcGVuYW0tdm9sa2VyLWRldi5mb3JnZWJsb2Nrcy5jb20KICAgICAgICAgICAgaHJlZjogbVswXSB8fCAiIiwgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vb3BlbmFtLXZvbGtlci1kZXYuZm9yZ2VibG9ja3MuY29tL2FtL1hVSS8/cmVhbG09L2JyYXZvJmF1dGhJbmRleFR5cGU9c2VydmljZSZhdXRoSW5kZXhWYWx1ZT1Jbml0aWF0ZU93bmVyQ2xhaW0jLwogICAgICAgICAgICBvcmlnaW46IG1bMV0gfHwgIiIsICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9vcGVuYW0tdm9sa2VyLWRldi5mb3JnZWJsb2Nrcy5jb20KICAgICAgICAgICAgcGF0aG5hbWU6IG1bOF0gfHwgKG1bMV0gPyAiLyIgOiAiIiksICAgIC8vIC9hbS9YVUkvCiAgICAgICAgICAgIHBvcnQ6IG1bN10gfHwgIiIsICAgICAgICAgICAgICAgICAgICAgICAvLyAKICAgICAgICAgICAgcHJvdG9jb2w6IG1bMl0gfHwgIiIsICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzCiAgICAgICAgICAgIHNlYXJjaDogbVs5XSB8fCAiIiwgICAgICAgICAgICAgICAgICAgICAvLyA/cmVhbG09L2JyYXZvJmF1dGhJbmRleFR5cGU9c2VydmljZSZhdXRoSW5kZXhWYWx1ZT1Jbml0aWF0ZU93bmVyQ2xhaW0KICAgICAgICAgICAgdXNlcm5hbWU6IG1bNF0gfHwgIiIsICAgICAgICAgICAgICAgICAgIC8vIAogICAgICAgICAgICBwYXNzd29yZDogbVs1XSB8fCAiIiwgICAgICAgICAgICAgICAgICAgLy8gCiAgICAgICAgICAgIHNlYXJjaFBhcmFtOiB7fSAgICAgICAgICAgICAgICAgICAgICAgICAvLyB7IHJlYWxtOiAnL2JyYXZvJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgYXV0aEluZGV4VHlwZTogJ3NlcnZpY2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBhdXRoSW5kZXhWYWx1ZTogJ0luaXRpYXRlT3duZXJDbGFpbScgfQogICAgICAgIH07CiAgICAgICAgaWYgKHIucHJvdG9jb2wubGVuZ3RoID09IDIpIHsKICAgICAgICAgICAgci5wcm90b2NvbCA9ICJmaWxlOi8vLyIgKyByLnByb3RvY29sLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgIHIub3JpZ2luID0gci5wcm90b2NvbCArICIvLyIgKyByLmhvc3Q7CiAgICAgICAgfQogICAgICAgIGlmIChyLnNlYXJjaC5sZW5ndGggPiAyKSB7CiAgICAgICAgICAgIHZhciBxdWVyeSA9IChyLnNlYXJjaC5pbmRleE9mKCc/JykgPT09IDApID8gci5zZWFyY2guc3Vic3RyKDEpIDogci5zZWFyY2g7CiAgICAgICAgICAgIHZhciB2YXJzID0gcXVlcnkuc3BsaXQoJyYnKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBwYWlyID0gdmFyc1tpXS5zcGxpdCgnPScpOwogICAgICAgICAgICByLnNlYXJjaFBhcmFtW2RlY29kZVVSSUNvbXBvbmVudChwYWlyWzBdKV0gPSBkZWNvZGVVUklDb21wb25lbnQocGFpclsxXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgci5ocmVmID0gci5vcmlnaW4gKyByLnBhdGhuYW1lICsgci5zZWFyY2ggKyByLmhhc2g7CiAgICAgICAgcmV0dXJuIHI7CiAgICB9Owp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"4a9aefc4-be0e-4625-95c3-ee8f354bce35\",\"name\":\"Admin_ClearCurrentYear\",\"description\":\"null\",\"script\":\"aWYgKHNoYXJlZFN0YXRlLmNvbnRhaW5zS2V5KCdvYmplY3RBdHRyaWJ1dGVzJykpIHsKICBzaGFyZWRTdGF0ZS5nZXQoJ29iamVjdEF0dHJpYnV0ZXMnKS5yZW1vdmUoJ2N1cnJlbnRZZWFyJyk7Cn0KCm91dGNvbWUgPSAnVHJ1ZSc7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"021e434f-89b6-45fb-9d67-5147bc1650c3\",\"name\":\"Show Password Policy\",\"description\":\"null\",\"script\":\"dmFyIG91dHB1dCA9IHRydWU7CnZhciBhbmNob3IgPSAiYW5jaG9yLSIuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CnZhciBoYWxpZ24gPSAibGVmdCI7CnZhciBtZXNzYWdlID0gIjx1bD48bGk+TXVzdCBiZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgbG9uZzwvbGk+Ii5jb25jYXQoCiAgICAiPGxpPk11c3QgYmUgbGVzcyB0aGFuIDY0IGNoYXJhY3RlcnMgbG9uZzwvbGk+IikuY29uY2F0KAogICAgIjxsaT5NdXN0IG5vdCBzaGFyZSBjaGFyYWN0ZXJzIHdpdGggZW1haWwsIHVzZXJuYW1lLCBmaXJzdCBuYW1lLCBsYXN0IG5hbWU8L2xpPiIpLmNvbmNhdCgKICAgICI8bGk+TXVzdCBoYXZlIGF0IGxlYXN0IDEgbG93ZXJjYXNlIGxldHRlcihzKTwvbGk+IikuY29uY2F0KAogICAgIjxsaT5NdXN0IGhhdmUgYXQgbGVhc3QgMSBjYXBpdGFsIGxldHRlcihzKTwvbGk+IikuY29uY2F0KAogICAgIjxsaT5NdXN0IGhhdmUgYXQgbGVhc3QgMSBudW1iZXIocyk8L2xpPiIpLmNvbmNhdCgKICAgICI8bGk+TXVzdCBoYXZlIGF0IGxlYXN0IDEgc3ltYm9sKHMpPC9saT48L3VsPiIpCnZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4iLmNvbmNhdCgKICAiZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2FsbGJhY2stY29tcG9uZW50JykpLmZvckVhY2goXG4iKS5jb25jYXQoCiAgImZ1bmN0aW9uIChlKSB7XG4iKS5jb25jYXQoCiAgIiAgdmFyIG1lc3NhZ2UgPSBlLmZpcnN0RWxlbWVudENoaWxkO1xuIikuY29uY2F0KAogICIgIGlmIChtZXNzYWdlLmZpcnN0Q2hpbGQgJiYgbWVzc2FnZS5maXJzdENoaWxkLm5vZGVOYW1lID09ICcjdGV4dCcgJiYgbWVzc2FnZS5maXJzdENoaWxkLm5vZGVWYWx1ZS50cmltKCkgPT0gJyIpLmNvbmNhdChhbmNob3IpLmNvbmNhdCgiJykge1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5jbGFzc05hbWUgPSBcInRleHQtbGVmdFwiO1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5hbGlnbiA9IFwiIikuY29uY2F0KGhhbGlnbikuY29uY2F0KCJcIjtcbiIpLmNvbmNhdCgKICAiICAgIG1lc3NhZ2UuaW5uZXJIVE1MID0gJyIpLmNvbmNhdChtZXNzYWdlKS5jb25jYXQoIic7XG4iKS5jb25jYXQoCiAgIiAgfVxuIikuY29uY2F0KAogICJ9KSIpCnZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKKQppZiAobWVzc2FnZS5sZW5ndGggJiYgY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgZnIuVGV4dE91dHB1dENhbGxiYWNrLklORk9STUFUSU9OLAogICAgICAgICAgICBhbmNob3IKICAgICAgICApLAogICAgICAgIG5ldyBmci5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2soc2NyaXB0KQogICAgKS5idWlsZCgpCn0KZWxzZSB7CiAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8oInRydWUiKS5idWlsZCgpOwp9CgogLyoKICAqIEdlbmVyYXRlIGEgdG9rZW4gaW4gdGhlIGRlc2lyZWQgZm9ybWF0LiBBbGwgJ3gnIGNoYXJhY3RlcnMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGEgcmFuZG9tIG51bWJlciAwLTkuCiAgKiAKICAqIEV4YW1wbGU6CiAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAqICd4eHgteHh4JyBwcm9kdWNlcyAnNDMyLTUyMScKICAqLwpmdW5jdGlvbiBnZW5lcmF0ZU51bWVyaWNUb2tlbihmb3JtYXQpIHsKICAgIHJldHVybiBmb3JtYXQucmVwbGFjZSgvW3hdL2csIGZ1bmN0aW9uKGMpIHsKICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkqMTB8MDsKICAgICAgICB2YXIgdiA9IHI7CiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTApOwogICAgfSk7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"27f1b5a3-9446-4e5c-b965-f195a99fa666\",\"name\":\"Admin_PasswordFixEnd\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKVGhpcyByZXN0b3JlcyBzaGFyZWRTdGF0ZS5vYmplY3RBdHRyaWJ1dGVzIHRlbXBvcmFyaWx5IG92ZXJ3cml0dGVuIHRvIGZpeCBhbiBpc3N1ZSB3aXRoIHBhc3N3b3JkIHBvbGljeS4KKi8KCi8vdmFyIHBhc3N3b3JkID0gJyc7Ci8vdmFyIG9iakF0dHJzID0gc2hhcmVkU3RhdGUuZ2V0KCdvYmplY3RBdHRyaWJ1dGVzJyk7Ci8vaWYgKG9iakF0dHJzICYmIG9iakF0dHJzLmNvbnRhaW5zS2V5KCdwYXNzd29yZCcpKSB7Ci8vICBwYXNzd29yZCA9IG9iakF0dHJzLmdldCgncGFzc3dvcmQnKTsKLy99CgovLyBSZXN0b3JlIG9yaWdpbmFsIG9iamVjdCBhdHRyaWJ1dGVzCnZhciBvcmlnT2JqQXR0cnMgPSBzaGFyZWRTdGF0ZS5nZXQoJ29yaWdpbmFsT2JqZWN0QXR0cmlidXRlcycpOwppZiAob3JpZ09iakF0dHJzKSB7Ci8vICBpZiAocGFzc3dvcmQpIHsKLy8gICAgb3JpZ09iakF0dHJzLnB1dCgncGFzc3dvcmQnLCBwYXNzd29yZCk7Ci8vICB9CiAgc2hhcmVkU3RhdGUucHV0KCdvYmplY3RBdHRyaWJ1dGVzJywgb3JpZ09iakF0dHJzKTsKfQoKb3V0Y29tZSA9ICdUcnVlJzsK\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"472534ec-a25f-468d-a606-3fb1935190df\",\"name\":\"WeChat Profile Normalization\",\"description\":\"Normalizes raw profile data from WeChat\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLm9wZW5pZCksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uaWNrbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5oZWFkaW1ndXJsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLm5pY2tuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"89eff37a-2e1e-47c2-8d62-5f7417fbb6b4\",\"name\":\"OTP Invalid\",\"description\":\"Return TextOutputCallback indicating the provided OTP was invalid.\",\"script\":\"LyogT1RQIEludmFsaWQKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogUmV0dXJuIFRleHRPdXRwdXRDYWxsYmFjayBpbmRpY2F0aW5nIHRoZSBwcm92aWRlZCBPVFAgd2FzIGludmFsaWQuCiAqIAogKiBUaGlzIHNjcmlwdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICovCm91dGNvbWUgPSAidHJ1ZSI7CnZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2sKKQppZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgZnIuVGV4dE91dHB1dENhbGxiYWNrLklORk9STUFUSU9OLAogICAgICAgICAgICAiSU5WQUxJRCIKICAgICAgICApCiAgICApLmJ1aWxkKCkKfQplbHNlIHsKICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbyhvdXRjb21lKS5idWlsZCgpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"2ada53cd-5d37-4592-9c7f-5711271229c2\",\"name\":\"Has Profile Changed\",\"description\":\"null\",\"script\":\"bG9nZ2VyLmVycm9yKCJIYXMgUHJvZmlsZSBDaGFuZ2VkOiBzdGFydCIpOwpvdXRjb21lID0gInVuY2hhbmdlZCI7CmlmIChnZXRPYmplY3RBdHRyaWJ1dGUoIm9sZF9naXZlbk5hbWUiKSB8fAogICAgZ2V0T2JqZWN0QXR0cmlidXRlKCJvbGRfc24iKSB8fAogICAgZ2V0T2JqZWN0QXR0cmlidXRlKCJmclVuaW5kZXhlZFN0cmluZzUiKSB8fAogICAgZ2V0T2JqZWN0QXR0cmlidXRlKCJvbGRfdGVsZXBob25lTnVtYmVyIikpIHsKICBvdXRjb21lID0gImNoYW5nZWQiOwp9CmxvZ2dlci5lcnJvcigiSGFzIFByb2ZpbGUgQ2hhbmdlZDogZW5kIFtvdXRjb21lPSIuY29uY2F0KG91dGNvbWUpLmNvbmNhdCgiXSIpKTsKCi8qCiAqIEdldCBvYmplY3RBdHRyaWJ1dGUgdmFsdWUKICovCmZ1bmN0aW9uIGdldE9iamVjdEF0dHJpYnV0ZShuYW1lKSB7CiAgICBpZiAoc2hhcmVkU3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikgJiYgc2hhcmVkU3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikuZ2V0KG5hbWUpKSB7CiAgICAgICAgcmV0dXJuIHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpLmdldChuYW1lKS50b1N0cmluZygpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"743351b3-001a-4ec8-b3ac-a674ddb8de22\",\"name\":\"UOP Enrich Session\",\"description\":\"Enrich user session with UOP class ID.\",\"script\":\"LyogVU9QIEVucmljaCBTZXNzaW9uCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIEFkZCBjdXJyZW50IGNsYXNzIElEIHRvIHVzZXIgc2Vzc2lvbi4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuIAogKiBJdCByZXF1aXJlcyB0aGUgSWRlbnRpZnkgRXhpc3RpbmcgVXNlciBub2RlIGJlZm9yZSBpdCBpcyBiZWluZyBjYWxsZWQuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAtIGZhbHNlCiAqLwpsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBzdGFydCIpOwpvdXRjb21lID0gImZhbHNlIjsKCmlmIChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBnb2luZyB0byBlbnJpY2ggc2Vzc2lvbiB3aXRoIGNsYXNzIGlkOiAiLmNvbmNhdChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpKTsKICAKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaQogICAgKTsKCiAgICB3aXRoIChmcikgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJVT1AgRW5yaWNoIFNlc3Npb246IEVuZCAob3V0Y29tZT0iLmNvbmNhdChvdXRjb21lKS5jb25jYXQoIikiKSk7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8ob3V0Y29tZSkucHV0U2Vzc2lvblByb3BlcnR5KCJVT1BDbGFzc0lEIiwgc2hhcmVkU3RhdGUuZ2V0KCJ1b3BDdXJyZW50Q2xhc3NJRCIpKS5idWlsZCgpOwogICAgfQogIAp9IGVsc2UgewogICAgbG9nZ2VyLmVycm9yKCJVT1AgRW5yaWNoIFNlc3Npb246IG5vIGNsYXNzZXMhIik7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBFbmQgKG91dGNvbWU9Ii5jb25jYXQob3V0Y29tZSkuY29uY2F0KCIpIikpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"db854830-a069-471f-875a-8dc67d45ea2d\",\"name\":\"Admin_SetInviteMailVars\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIG9iakF0dHJzID0gc2hhcmVkU3RhdGUuZ2V0KCdvYmplY3RBdHRyaWJ1dGVzJykgfHwgbmV3IEhhc2hNYXAoKTsKb2JqQXR0cnMucHV0KCdjdXJyZW50WWVhcicsIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpKTsKc2hhcmVkU3RhdGUucHV0KCdvYmplY3RBdHRyaWJ1dGVzJywgb2JqQXR0cnMpOwoKb3V0Y29tZSA9ICdUcnVlJzsK\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"7dce8f07-d9fe-4752-94b9-ff99dfd0433b\",\"name\":\"Twilio IVR: Parse Call Parameters\",\"description\":\"Parse parameters of the incoming call.\",\"script\":\"LyogVHdpbGlvIElWUiBJbnRlZ3JhdGlvbgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICogLSBmYWxzZQogKiAKICogRGVwZW5kaW5nIG9uIHRoZSBhbW91bnQgb2YgZGF0YSBjb2xsZWN0ZWQgdGhyb3VnaCBjYWxsYmFja3MgYW5kIGhvdyBtYW55IG9mIHRoZSBjYWxsUGFyYW1zCiAqIHlvdSBhY3RpdmF0ZSBiZWxvdywgeW91IHdpbGwgbmVlZCB0byBjaGFuZ2UgeW91ciBhdXRoZW50aWNhdGlvbiBzZXNzaW9uIGZyb20gSldUIHRvIENUUyBvcgogKiBNZW1vcnkuCiAqLwoKbG9nZ2VyLndhcm5pbmcoIlR3aWxpbyBJVlI6IFBhcnNlIENhbGwgUGFyYW1ldGVyczogc3RhcnQiKTsKb3V0Y29tZSA9ICJmYWxzZSI7CgovKiBCZWdpbiBUd2lsaW8gSVZSIENvbmZpZ3VyYXRpb24gUGFyYW1ldGVycwogKgogKiBUaGVzZSBhcmUgdXNlZCB0byBwcm90ZWN0IHRoaXMgam91cm5leSBzbyBpdCBpcyBvbmx5IGJlaW5nIGV4ZWN1dGVkIGJ5IHlvdXIgVHdpbGlvIGFjY291bnQuCiAqLwp2YXIgVFdJTElPX0FDQ09VTlRfU0lEID0gIkFDNzUwNDE1ZTMxNjNhMmU1N2I3YWVlYTdlZWQ4MmQ5NDQiOwp2YXIgVFdJTElPX1BIT05FX05VTUJFUiA9ICIrMTMxNzY0NDMxMDciOwoKLy8ga2VlcCB0aGUgcGFyYW1zIHRvIGEgbWluaW11bSB0byBtaW5pbWl6ZSBhdXRoZW50aWNhdGlvbiBzZXNzaW9uIHNpemUKdmFyIGNhbGxQYXJhbXMgPSB7CiAgLy8iQ2FsbFNpZCIgOiBkZWNvZGVVUklDb21wb25lbnQocmVxdWVzdFBhcmFtZXRlcnMuZ2V0KCJDYWxsU2lkIikuZ2V0KDApKSwKICAiQWNjb3VudFNpZCIgOiBkZWNvZGVVUklDb21wb25lbnQocmVxdWVzdFBhcmFtZXRlcnMuZ2V0KCJBY2NvdW50U2lkIikuZ2V0KDApKSwKICAiRnJvbSIgOiBkZWNvZGVVUklDb21wb25lbnQocmVxdWVzdFBhcmFtZXRlcnMuZ2V0KCJGcm9tIikuZ2V0KDApKSwKICAiVG8iIDogZGVjb2RlVVJJQ29tcG9uZW50KHJlcXVlc3RQYXJhbWV0ZXJzLmdldCgiVG8iKS5nZXQoMCkpLAogIC8vIkNhbGxTdGF0dXMiIDogZGVjb2RlVVJJQ29tcG9uZW50KHJlcXVlc3RQYXJhbWV0ZXJzLmdldCgiQ2FsbFN0YXR1cyIpLmdldCgwKSksCiAgLy8iQXBpVmVyc2lvbiIgOiBkZWNvZGVVUklDb21wb25lbnQocmVxdWVzdFBhcmFtZXRlcnMuZ2V0KCJBcGlWZXJzaW9uIikuZ2V0KDApKSwKICAvLyJEaXJlY3Rpb24iIDogZGVjb2RlVVJJQ29tcG9uZW50KHJlcXVlc3RQYXJhbWV0ZXJzLmdldCgiRGlyZWN0aW9uIikuZ2V0KDApKSwKICAvLyJGb3J3YXJkZWRGcm9tIiA6IGRlY29kZVVSSUNvbXBvbmVudChyZXF1ZXN0UGFyYW1ldGVycy5nZXQoIkZvcndhcmRlZEZyb20iKS5nZXQoMCkpLAogIC8vIkNhbGxlck5hbWUiIDogZGVjb2RlVVJJQ29tcG9uZW50KHJlcXVlc3RQYXJhbWV0ZXJzLmdldCgiQ2FsbGVyTmFtZUNhbGxlck5hbWUiKS5nZXQoMCkpLAogIC8vIlBhcmVudENhbGxTaWQiIDogZGVjb2RlVVJJQ29tcG9uZW50KHJlcXVlc3RQYXJhbWV0ZXJzLmdldCgiUGFyZW50Q2FsbFNpZCIpLmdldCgwKSksCiAgLy8iRnJvbUNpdHkiIDogZGVjb2RlVVJJQ29tcG9uZW50KHJlcXVlc3RQYXJhbWV0ZXJzLmdldCgiRnJvbUNpdHkiKS5nZXQoMCkpLAogIC8vIkZyb21TdGF0ZSIgOiBkZWNvZGVVUklDb21wb25lbnQocmVxdWVzdFBhcmFtZXRlcnMuZ2V0KCJGcm9tU3RhdGUiKS5nZXQoMCkpLAogIC8vIkZyb21aaXAiIDogZGVjb2RlVVJJQ29tcG9uZW50KHJlcXVlc3RQYXJhbWV0ZXJzLmdldCgiRnJvbVppcCIpLmdldCgwKSksCiAgLy8iRnJvbUNvdW50cnkiIDogZGVjb2RlVVJJQ29tcG9uZW50KHJlcXVlc3RQYXJhbWV0ZXJzLmdldCgiRnJvbUNvdW50cnkiKS5nZXQoMCkpLAogIC8vIlRvQ2l0eSIgOiBkZWNvZGVVUklDb21wb25lbnQocmVxdWVzdFBhcmFtZXRlcnMuZ2V0KCJUb0NpdHkiKS5nZXQoMCkpLAogIC8vIlRvU3RhdGUiIDogZGVjb2RlVVJJQ29tcG9uZW50KHJlcXVlc3RQYXJhbWV0ZXJzLmdldCgiVG9TdGF0ZSIpLmdldCgwKSksCiAgLy8iVG9aaXAiIDogZGVjb2RlVVJJQ29tcG9uZW50KHJlcXVlc3RQYXJhbWV0ZXJzLmdldCgiVG9aaXAiKS5nZXQoMCkpLAogIC8vIlRvQ291bnRyeSIgOiBkZWNvZGVVUklDb21wb25lbnQocmVxdWVzdFBhcmFtZXRlcnMuZ2V0KCJUb0NvdW50cnkiKS5nZXQoMCkpLAp9OwoKLyogRW5kIFR3aWxpbyBJVlIgQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXJzIAogKi8KCmlmIChjYWxsUGFyYW1zLkFjY291bnRTaWQgPT0gVFdJTElPX0FDQ09VTlRfU0lEICYmCiAgICBjYWxsUGFyYW1zLlRvID09IFRXSUxJT19QSE9ORV9OVU1CRVIpIAp7CiAgICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICBzaGFyZWRTdGF0ZS5wdXQoIlR3aWxpb0lWUkNhbGxQYXJhbXMiLCBjYWxsUGFyYW1zKTsKICAgIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgidGVsZXBob25lTnVtYmVyIiwgY2FsbFBhcmFtcy5Gcm9tKTsKfQoKbG9nZ2VyLndhcm5pbmcoIlR3aWxpbyBJVlI6IFBhcnNlIENhbGwgUGFyYW1ldGVyczogZmluaXNoIFtvdXRjb21lPSIuY29uY2F0KG91dGNvbWUpLmNvbmNhdCgiXSIpKTsKCi8qCiAqIFN0b3JlIGF0dHJpYnV0ZXMgaW4gc2hhcmVkIHN0YXRlIGZvciB1c2Ugd2l0aCB0aGUgQ3JlYXRlL1BhdGNoIE9iamVjdCBub2Rlcy4KICovCmZ1bmN0aW9uIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgewogICAgICAgdmFyIHN0b3JhZ2UgPSBzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKICAgIGlmIChzdG9yYWdlICYmIHZhbHVlKSB7CiAgICAgICAgICBpZiAoc3RvcmFnZS5wdXQpIHsKICAgICAgICAgICAgICBzdG9yYWdlLnB1dChuYW1lLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgc3RvcmFnZVtuYW1lXSA9IHZhbHVlOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHZhbHVlKSB7CiAgICAgICAgc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgSlNPTi5wYXJzZSgie1wiIituYW1lKyJcIjpcIiIrdmFsdWUrIlwifSIpKTsKICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"d82a4ad6-cd8a-437b-af55-7373e50d685b\",\"name\":\"Collect Replay Password (frUnindexedString2)\",\"description\":\"Collect Replay Password (frUnindexedString2).\",\"script\":\"LyogQ29sbGVjdCBBbmQgRW5jcnlwdCBDdXN0b20gUGFzc3dvcmQKICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqIAogKiBTZWUgY29weXJpZ2h0IG5vdGljZXMsIGNvbmRpdGlvbnMsIGFuZCBkaXNjbGFpbWVycyBhdCB0aGUgYm90dG9tIG9mIHRoaXMgc2NyaXB0LgogKiAKICogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICovCihmdW5jdGlvbiAoKSB7CiAgICAidXNlIHN0cmljdCI7dmFyIHNqY2w9e2NpcGhlcjp7fSxoYXNoOnt9LGtleWV4Y2hhbmdlOnt9LG1vZGU6e30sbWlzYzp7fSxjb2RlYzp7fSxleGNlcHRpb246e2NvcnJ1cHQ6ZnVuY3Rpb24obWVzc2FnZSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJDT1JSVVBUOiAiK3RoaXMubWVzc2FnZX07dGhpcy5tZXNzYWdlPW1lc3NhZ2V9LGludmFsaWQ6ZnVuY3Rpb24obWVzc2FnZSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJJTlZBTElEOiAiK3RoaXMubWVzc2FnZX07dGhpcy5tZXNzYWdlPW1lc3NhZ2V9LGJ1ZzpmdW5jdGlvbihtZXNzYWdlKXt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkJVRzogIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1tZXNzYWdlfSxub3RSZWFkeTpmdW5jdGlvbihtZXNzYWdlKXt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk5PVCBSRUFEWTogIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1tZXNzYWdlfX19O3NqY2wuY2lwaGVyLmFlcz1mdW5jdGlvbihrZXkpe2lmKCF0aGlzLl90YWJsZXNbMF1bMF1bMF0pe3RoaXMuX3ByZWNvbXB1dGUoKX12YXIgaSxqLHRtcCxlbmNLZXksZGVjS2V5LHNib3g9dGhpcy5fdGFibGVzWzBdWzRdLGRlY1RhYmxlPXRoaXMuX3RhYmxlc1sxXSxrZXlMZW49a2V5Lmxlbmd0aCxyY29uPTE7aWYoa2V5TGVuIT09NCYma2V5TGVuIT09NiYma2V5TGVuIT09OCl7dGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoImludmFsaWQgYWVzIGtleSBzaXplIil9dGhpcy5fa2V5PVtlbmNLZXk9a2V5LnNsaWNlKDApLGRlY0tleT1bXV07Zm9yKGk9a2V5TGVuO2k8NCprZXlMZW4rMjg7aSsrKXt0bXA9ZW5jS2V5W2ktMV07aWYoaSVrZXlMZW49PT0wfHxrZXlMZW49PT04JiZpJWtleUxlbj09PTQpe3RtcD1zYm94W3RtcD4+PjI0XTw8MjRec2JveFt0bXA+PjE2JjI1NV08PDE2XnNib3hbdG1wPj44JjI1NV08PDhec2JveFt0bXAmMjU1XTtpZihpJWtleUxlbj09PTApe3RtcD10bXA8PDhedG1wPj4+MjRecmNvbjw8MjQ7cmNvbj1yY29uPDwxXihyY29uPj43KSoyODN9fWVuY0tleVtpXT1lbmNLZXlbaS1rZXlMZW5dXnRtcH1mb3Ioaj0wO2k7aisrLGktLSl7dG1wPWVuY0tleVtqJjM/aTppLTRdO2lmKGk8PTR8fGo8NCl7ZGVjS2V5W2pdPXRtcH1lbHNle2RlY0tleVtqXT1kZWNUYWJsZVswXVtzYm94W3RtcD4+PjI0XV1eZGVjVGFibGVbMV1bc2JveFt0bXA+PjE2JjI1NV1dXmRlY1RhYmxlWzJdW3Nib3hbdG1wPj44JjI1NV1dXmRlY1RhYmxlWzNdW3Nib3hbdG1wJjI1NV1dfX19O3NqY2wuY2lwaGVyLmFlcy5wcm90b3R5cGU9e2VuY3J5cHQ6ZnVuY3Rpb24oZGF0YSl7cmV0dXJuIHRoaXMuX2NyeXB0KGRhdGEsMCl9LGRlY3J5cHQ6ZnVuY3Rpb24oZGF0YSl7cmV0dXJuIHRoaXMuX2NyeXB0KGRhdGEsMSl9LF90YWJsZXM6W1tbXSxbXSxbXSxbXSxbXV0sW1tdLFtdLFtdLFtdLFtdXV0sX3ByZWNvbXB1dGU6ZnVuY3Rpb24oKXt2YXIgZW5jVGFibGU9dGhpcy5fdGFibGVzWzBdLGRlY1RhYmxlPXRoaXMuX3RhYmxlc1sxXSxzYm94PWVuY1RhYmxlWzRdLHNib3hJbnY9ZGVjVGFibGVbNF0saSx4LHhJbnYsZD1bXSx0aD1bXSx4Mix4NCx4OCxzLHRFbmMsdERlYztmb3IoaT0wO2k8MjU2O2krKyl7dGhbKGRbaV09aTw8MV4oaT4+NykqMjgzKV5pXT1pfWZvcih4PXhJbnY9MDshc2JveFt4XTt4Xj14Mnx8MSx4SW52PXRoW3hJbnZdfHwxKXtzPXhJbnZeeEludjw8MV54SW52PDwyXnhJbnY8PDNeeEludjw8NDtzPXM+PjhecyYyNTVeOTk7c2JveFt4XT1zO3Nib3hJbnZbc109eDt4OD1kW3g0PWRbeDI9ZFt4XV1dO3REZWM9eDgqMTY4NDMwMDleeDQqNjU1MzdeeDIqMjU3XngqMTY4NDMwMDg7dEVuYz1kW3NdKjI1N15zKjE2ODQzMDA4O2ZvcihpPTA7aTw0O2krKyl7ZW5jVGFibGVbaV1beF09dEVuYz10RW5jPDwyNF50RW5jPj4+ODtkZWNUYWJsZVtpXVtzXT10RGVjPXREZWM8PDI0XnREZWM+Pj44fX1mb3IoaT0wO2k8NTtpKyspe2VuY1RhYmxlW2ldPWVuY1RhYmxlW2ldLnNsaWNlKDApO2RlY1RhYmxlW2ldPWRlY1RhYmxlW2ldLnNsaWNlKDApfX0sX2NyeXB0OmZ1bmN0aW9uKGlucHV0LGRpcil7aWYoaW5wdXQubGVuZ3RoIT09NCl7dGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoImludmFsaWQgYWVzIGJsb2NrIHNpemUiKX12YXIga2V5PXRoaXMuX2tleVtkaXJdLGE9aW5wdXRbMF1ea2V5WzBdLGI9aW5wdXRbZGlyPzM6MV1ea2V5WzFdLGM9aW5wdXRbMl1ea2V5WzJdLGQ9aW5wdXRbZGlyPzE6M11ea2V5WzNdLGEyLGIyLGMyLG5Jbm5lclJvdW5kcz1rZXkubGVuZ3RoLzQtMixpLGtJbmRleD00LG91dD1bMCwwLDAsMF0sdGFibGU9dGhpcy5fdGFibGVzW2Rpcl0sdDA9dGFibGVbMF0sdDE9dGFibGVbMV0sdDI9dGFibGVbMl0sdDM9dGFibGVbM10sc2JveD10YWJsZVs0XTtmb3IoaT0wO2k8bklubmVyUm91bmRzO2krKyl7YTI9dDBbYT4+PjI0XV50MVtiPj4xNiYyNTVdXnQyW2M+PjgmMjU1XV50M1tkJjI1NV1ea2V5W2tJbmRleF07YjI9dDBbYj4+PjI0XV50MVtjPj4xNiYyNTVdXnQyW2Q+PjgmMjU1XV50M1thJjI1NV1ea2V5W2tJbmRleCsxXTtjMj10MFtjPj4+MjRdXnQxW2Q+PjE2JjI1NV1edDJbYT4+OCYyNTVdXnQzW2ImMjU1XV5rZXlba0luZGV4KzJdO2Q9dDBbZD4+PjI0XV50MVthPj4xNiYyNTVdXnQyW2I+PjgmMjU1XV50M1tjJjI1NV1ea2V5W2tJbmRleCszXTtrSW5kZXgrPTQ7YT1hMjtiPWIyO2M9YzJ9Zm9yKGk9MDtpPDQ7aSsrKXtvdXRbZGlyPzMmLWk6aV09c2JveFthPj4+MjRdPDwyNF5zYm94W2I+PjE2JjI1NV08PDE2XnNib3hbYz4+OCYyNTVdPDw4XnNib3hbZCYyNTVdXmtleVtrSW5kZXgrK107YTI9YTthPWI7Yj1jO2M9ZDtkPWEyfXJldHVybiBvdXR9fTtzamNsLmJpdEFycmF5PXtiaXRTbGljZTpmdW5jdGlvbihhLGJzdGFydCxiZW5kKXthPXNqY2wuYml0QXJyYXkuX3NoaWZ0UmlnaHQoYS5zbGljZShic3RhcnQvMzIpLDMyLShic3RhcnQmMzEpKS5zbGljZSgxKTtyZXR1cm4gYmVuZD09PXVuZGVmaW5lZD9hOnNqY2wuYml0QXJyYXkuY2xhbXAoYSxiZW5kLWJzdGFydCl9LGV4dHJhY3Q6ZnVuY3Rpb24oYSxic3RhcnQsYmxlbmd0aCl7dmFyIHgsc2g9TWF0aC5mbG9vcigtYnN0YXJ0LWJsZW5ndGgmMzEpO2lmKChic3RhcnQrYmxlbmd0aC0xXmJzdGFydCkmLTMyKXt4PWFbYnN0YXJ0LzMyfDBdPDwzMi1zaF5hW2JzdGFydC8zMisxfDBdPj4+c2h9ZWxzZXt4PWFbYnN0YXJ0LzMyfDBdPj4+c2h9cmV0dXJuIHgmKDE8PGJsZW5ndGgpLTF9LGNvbmNhdDpmdW5jdGlvbihhMSxhMil7aWYoYTEubGVuZ3RoPT09MHx8YTIubGVuZ3RoPT09MCl7cmV0dXJuIGExLmNvbmNhdChhMil9dmFyIGxhc3Q9YTFbYTEubGVuZ3RoLTFdLHNoaWZ0PXNqY2wuYml0QXJyYXkuZ2V0UGFydGlhbChsYXN0KTtpZihzaGlmdD09PTMyKXtyZXR1cm4gYTEuY29uY2F0KGEyKX1lbHNle3JldHVybiBzamNsLmJpdEFycmF5Ll9zaGlmdFJpZ2h0KGEyLHNoaWZ0LGxhc3R8MCxhMS5zbGljZSgwLGExLmxlbmd0aC0xKSl9fSxiaXRMZW5ndGg6ZnVuY3Rpb24oYSl7dmFyIGw9YS5sZW5ndGgseDtpZihsPT09MCl7cmV0dXJuIDB9eD1hW2wtMV07cmV0dXJuKGwtMSkqMzIrc2pjbC5iaXRBcnJheS5nZXRQYXJ0aWFsKHgpfSxjbGFtcDpmdW5jdGlvbihhLGxlbil7aWYoYS5sZW5ndGgqMzI8bGVuKXtyZXR1cm4gYX1hPWEuc2xpY2UoMCxNYXRoLmNlaWwobGVuLzMyKSk7dmFyIGw9YS5sZW5ndGg7bGVuPWxlbiYzMTtpZihsPjAmJmxlbil7YVtsLTFdPXNqY2wuYml0QXJyYXkucGFydGlhbChsZW4sYVtsLTFdJjIxNDc0ODM2NDg+Pmxlbi0xLDEpfXJldHVybiBhfSxwYXJ0aWFsOmZ1bmN0aW9uKGxlbix4LF9lbmQpe2lmKGxlbj09PTMyKXtyZXR1cm4geH1yZXR1cm4oX2VuZD94fDA6eDw8MzItbGVuKStsZW4qMTA5OTUxMTYyNzc3Nn0sZ2V0UGFydGlhbDpmdW5jdGlvbih4KXtyZXR1cm4gTWF0aC5yb3VuZCh4LzEwOTk1MTE2Mjc3NzYpfHwzMn0sZXF1YWw6ZnVuY3Rpb24oYSxiKXtpZihzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKSE9PXNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGIpKXtyZXR1cm4gZmFsc2V9dmFyIHg9MCxpO2ZvcihpPTA7aTxhLmxlbmd0aDtpKyspe3h8PWFbaV1eYltpXX1yZXR1cm4geD09PTB9LF9zaGlmdFJpZ2h0OmZ1bmN0aW9uKGEsc2hpZnQsY2Fycnksb3V0KXt2YXIgaSxsYXN0Mj0wLHNoaWZ0MjtpZihvdXQ9PT11bmRlZmluZWQpe291dD1bXX1mb3IoO3NoaWZ0Pj0zMjtzaGlmdC09MzIpe291dC5wdXNoKGNhcnJ5KTtjYXJyeT0wfWlmKHNoaWZ0PT09MCl7cmV0dXJuIG91dC5jb25jYXQoYSl9Zm9yKGk9MDtpPGEubGVuZ3RoO2krKyl7b3V0LnB1c2goY2Fycnl8YVtpXT4+PnNoaWZ0KTtjYXJyeT1hW2ldPDwzMi1zaGlmdH1sYXN0Mj1hLmxlbmd0aD9hW2EubGVuZ3RoLTFdOjA7c2hpZnQyPXNqY2wuYml0QXJyYXkuZ2V0UGFydGlhbChsYXN0Mik7b3V0LnB1c2goc2pjbC5iaXRBcnJheS5wYXJ0aWFsKHNoaWZ0K3NoaWZ0MiYzMSxzaGlmdCtzaGlmdDI+MzI/Y2Fycnk6b3V0LnBvcCgpLDEpKTtyZXR1cm4gb3V0fSxfeG9yNDpmdW5jdGlvbih4LHkpe3JldHVyblt4WzBdXnlbMF0seFsxXV55WzFdLHhbMl1eeVsyXSx4WzNdXnlbM11dfSxieXRlc3dhcE06ZnVuY3Rpb24oYSl7dmFyIGksdixtPTY1MjgwO2ZvcihpPTA7aTxhLmxlbmd0aDsrK2kpe3Y9YVtpXTthW2ldPXY+Pj4yNHx2Pj4+OCZtfCh2Jm0pPDw4fHY8PDI0fXJldHVybiBhfX07c2pjbC5jb2RlYy51dGY4U3RyaW5nPXtmcm9tQml0czpmdW5jdGlvbihhcnIpe3ZhciBvdXQ9IiIsYmw9c2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYXJyKSxpLHRtcDtmb3IoaT0wO2k8YmwvODtpKyspe2lmKChpJjMpPT09MCl7dG1wPWFycltpLzRdfW91dCs9U3RyaW5nLmZyb21DaGFyQ29kZSh0bXA+Pj44Pj4+OD4+PjgpO3RtcDw8PTh9cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUob3V0KSl9LHRvQml0czpmdW5jdGlvbihzdHIpe3N0cj11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7dmFyIG91dD1bXSxpLHRtcD0wO2ZvcihpPTA7aTxzdHIubGVuZ3RoO2krKyl7dG1wPXRtcDw8OHxzdHIuY2hhckNvZGVBdChpKTtpZigoaSYzKT09PTMpe291dC5wdXNoKHRtcCk7dG1wPTB9fWlmKGkmMyl7b3V0LnB1c2goc2pjbC5iaXRBcnJheS5wYXJ0aWFsKDgqKGkmMyksdG1wKSl9cmV0dXJuIG91dH19O3NqY2wuY29kZWMuYmFzZTY0PXtfY2hhcnM6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGZyb21CaXRzOmZ1bmN0aW9uKGFycixfbm9FcXVhbHMsX3VybCl7dmFyIG91dD0iIixpLGJpdHM9MCxjPXNqY2wuY29kZWMuYmFzZTY0Ll9jaGFycyx0YT0wLGJsPXNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGFycik7aWYoX3VybCl7Yz1jLnN1YnN0cigwLDYyKSsiLV8ifWZvcihpPTA7b3V0Lmxlbmd0aCo2PGJsOyl7b3V0Kz1jLmNoYXJBdCgodGFeYXJyW2ldPj4+Yml0cyk+Pj4yNik7aWYoYml0czw2KXt0YT1hcnJbaV08PDYtYml0cztiaXRzKz0yNjtpKyt9ZWxzZXt0YTw8PTY7Yml0cy09Nn19d2hpbGUob3V0Lmxlbmd0aCYzJiYhX25vRXF1YWxzKXtvdXQrPSI9In1yZXR1cm4gb3V0fSx0b0JpdHM6ZnVuY3Rpb24oc3RyLF91cmwpe3N0cj1zdHIucmVwbGFjZSgvXHN8PS9nLCIiKTt2YXIgb3V0PVtdLGksYml0cz0wLGM9c2pjbC5jb2RlYy5iYXNlNjQuX2NoYXJzLHRhPTAseDtpZihfdXJsKXtjPWMuc3Vic3RyKDAsNjIpKyItXyJ9Zm9yKGk9MDtpPHN0ci5sZW5ndGg7aSsrKXt4PWMuaW5kZXhPZihzdHIuY2hhckF0KGkpKTtpZih4PDApe3Rocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKCJ0aGlzIGlzbid0IGJhc2U2NCEiKX1pZihiaXRzPjI2KXtiaXRzLT0yNjtvdXQucHVzaCh0YV54Pj4+Yml0cyk7dGE9eDw8MzItYml0c31lbHNle2JpdHMrPTY7dGFePXg8PDMyLWJpdHN9fWlmKGJpdHMmNTYpe291dC5wdXNoKHNqY2wuYml0QXJyYXkucGFydGlhbChiaXRzJjU2LHRhLDEpKX1yZXR1cm4gb3V0fX07c2pjbC5jb2RlYy5iYXNlNjR1cmw9e2Zyb21CaXRzOmZ1bmN0aW9uKGFycil7cmV0dXJuIHNqY2wuY29kZWMuYmFzZTY0LmZyb21CaXRzKGFyciwxLDEpfSx0b0JpdHM6ZnVuY3Rpb24oc3RyKXtyZXR1cm4gc2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKHN0ciwxKX19O3NqY2wuaGFzaC5zaGEyNTY9ZnVuY3Rpb24oaGFzaCl7aWYoIXRoaXMuX2tleVswXSl7dGhpcy5fcHJlY29tcHV0ZSgpfWlmKGhhc2gpe3RoaXMuX2g9aGFzaC5faC5zbGljZSgwKTt0aGlzLl9idWZmZXI9aGFzaC5fYnVmZmVyLnNsaWNlKDApO3RoaXMuX2xlbmd0aD1oYXNoLl9sZW5ndGh9ZWxzZXt0aGlzLnJlc2V0KCl9fTtzamNsLmhhc2guc2hhMjU2Lmhhc2g9ZnVuY3Rpb24oZGF0YSl7cmV0dXJuKG5ldyBzamNsLmhhc2guc2hhMjU2KS51cGRhdGUoZGF0YSkuZmluYWxpemUoKX07c2pjbC5oYXNoLnNoYTI1Ni5wcm90b3R5cGU9e2Jsb2NrU2l6ZTo1MTIscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oPXRoaXMuX2luaXQuc2xpY2UoMCk7dGhpcy5fYnVmZmVyPVtdO3RoaXMuX2xlbmd0aD0wO3JldHVybiB0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oZGF0YSl7aWYodHlwZW9mIGRhdGE9PT0ic3RyaW5nIil7ZGF0YT1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGRhdGEpfXZhciBpLGI9dGhpcy5fYnVmZmVyPXNqY2wuYml0QXJyYXkuY29uY2F0KHRoaXMuX2J1ZmZlcixkYXRhKSxvbD10aGlzLl9sZW5ndGgsbmw9dGhpcy5fbGVuZ3RoPW9sK3NqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGRhdGEpO2lmKG5sPjkwMDcxOTkyNTQ3NDA5OTEpe3Rocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKCJDYW5ub3QgaGFzaCBtb3JlIHRoYW4gMl41MyAtIDEgYml0cyIpfWlmKHR5cGVvZiBVaW50MzJBcnJheSE9PSJ1bmRlZmluZWQiKXt2YXIgYz1uZXcgVWludDMyQXJyYXkoYik7dmFyIGo9MDtmb3IoaT01MTIrb2wtKDUxMitvbCY1MTEpO2k8PW5sO2krPTUxMil7dGhpcy5fYmxvY2soYy5zdWJhcnJheSgxNipqLDE2KihqKzEpKSk7ais9MX1iLnNwbGljZSgwLDE2KmopfWVsc2V7Zm9yKGk9NTEyK29sLSg1MTIrb2wmNTExKTtpPD1ubDtpKz01MTIpe3RoaXMuX2Jsb2NrKGIuc3BsaWNlKDAsMTYpKX19cmV0dXJuIHRoaXN9LGZpbmFsaXplOmZ1bmN0aW9uKCl7dmFyIGksYj10aGlzLl9idWZmZXIsaD10aGlzLl9oO2I9c2pjbC5iaXRBcnJheS5jb25jYXQoYixbc2pjbC5iaXRBcnJheS5wYXJ0aWFsKDEsMSldKTtmb3IoaT1iLmxlbmd0aCsyO2kmMTU7aSsrKXtiLnB1c2goMCl9Yi5wdXNoKE1hdGguZmxvb3IodGhpcy5fbGVuZ3RoLzQyOTQ5NjcyOTYpKTtiLnB1c2godGhpcy5fbGVuZ3RofDApO3doaWxlKGIubGVuZ3RoKXt0aGlzLl9ibG9jayhiLnNwbGljZSgwLDE2KSl9dGhpcy5yZXNldCgpO3JldHVybiBofSxfaW5pdDpbXSxfa2V5OltdLF9wcmVjb21wdXRlOmZ1bmN0aW9uKCl7dmFyIGk9MCxwcmltZT0yLGZhY3Rvcixpc1ByaW1lO2Z1bmN0aW9uIGZyYWMoeCl7cmV0dXJuKHgtTWF0aC5mbG9vcih4KSkqNDI5NDk2NzI5NnwwfWZvcig7aTw2NDtwcmltZSsrKXtpc1ByaW1lPXRydWU7Zm9yKGZhY3Rvcj0yO2ZhY3RvcipmYWN0b3I8PXByaW1lO2ZhY3RvcisrKXtpZihwcmltZSVmYWN0b3I9PT0wKXtpc1ByaW1lPWZhbHNlO2JyZWFrfX1pZihpc1ByaW1lKXtpZihpPDgpe3RoaXMuX2luaXRbaV09ZnJhYyhNYXRoLnBvdyhwcmltZSwxLzIpKX10aGlzLl9rZXlbaV09ZnJhYyhNYXRoLnBvdyhwcmltZSwxLzMpKTtpKyt9fX0sX2Jsb2NrOmZ1bmN0aW9uKHcpe3ZhciBpLHRtcCxhLGIsaD10aGlzLl9oLGs9dGhpcy5fa2V5LGgwPWhbMF0saDE9aFsxXSxoMj1oWzJdLGgzPWhbM10saDQ9aFs0XSxoNT1oWzVdLGg2PWhbNl0saDc9aFs3XTtmb3IoaT0wO2k8NjQ7aSsrKXtpZihpPDE2KXt0bXA9d1tpXX1lbHNle2E9d1tpKzEmMTVdO2I9d1tpKzE0JjE1XTt0bXA9d1tpJjE1XT0oYT4+PjdeYT4+PjE4XmE+Pj4zXmE8PDI1XmE8PDE0KSsoYj4+PjE3XmI+Pj4xOV5iPj4+MTBeYjw8MTVeYjw8MTMpK3dbaSYxNV0rd1tpKzkmMTVdfDB9dG1wPXRtcCtoNysoaDQ+Pj42Xmg0Pj4+MTFeaDQ+Pj4yNV5oNDw8MjZeaDQ8PDIxXmg0PDw3KSsoaDZeaDQmKGg1Xmg2KSkra1tpXTtoNz1oNjtoNj1oNTtoNT1oNDtoND1oMyt0bXB8MDtoMz1oMjtoMj1oMTtoMT1oMDtoMD10bXArKGgxJmgyXmgzJihoMV5oMikpKyhoMT4+PjJeaDE+Pj4xM15oMT4+PjIyXmgxPDwzMF5oMTw8MTleaDE8PDEwKXwwfWhbMF09aFswXStoMHwwO2hbMV09aFsxXStoMXwwO2hbMl09aFsyXStoMnwwO2hbM109aFszXStoM3wwO2hbNF09aFs0XStoNHwwO2hbNV09aFs1XStoNXwwO2hbNl09aFs2XStoNnwwO2hbN109aFs3XStoN3wwfX07c2pjbC5tb2RlLmNjbT17bmFtZToiY2NtIixfcHJvZ3Jlc3NMaXN0ZW5lcnM6W10sbGlzdGVuUHJvZ3Jlc3M6ZnVuY3Rpb24oY2Ipe3NqY2wubW9kZS5jY20uX3Byb2dyZXNzTGlzdGVuZXJzLnB1c2goY2IpfSx1bkxpc3RlblByb2dyZXNzOmZ1bmN0aW9uKGNiKXt2YXIgaW5kZXg9c2pjbC5tb2RlLmNjbS5fcHJvZ3Jlc3NMaXN0ZW5lcnMuaW5kZXhPZihjYik7aWYoaW5kZXg+LTEpe3NqY2wubW9kZS5jY20uX3Byb2dyZXNzTGlzdGVuZXJzLnNwbGljZShpbmRleCwxKX19LF9jYWxsUHJvZ3Jlc3NMaXN0ZW5lcjpmdW5jdGlvbih2YWwpe3ZhciBwPXNqY2wubW9kZS5jY20uX3Byb2dyZXNzTGlzdGVuZXJzLnNsaWNlKCksaTtmb3IoaT0wO2k8cC5sZW5ndGg7aSs9MSl7cFtpXSh2YWwpfX0sZW5jcnlwdDpmdW5jdGlvbihwcmYscGxhaW50ZXh0LGl2LGFkYXRhLHRsZW4pe3ZhciBMLG91dD1wbGFpbnRleHQuc2xpY2UoMCksdGFnLHc9c2pjbC5iaXRBcnJheSxpdmw9dy5iaXRMZW5ndGgoaXYpLzgsb2w9dy5iaXRMZW5ndGgob3V0KS84O3RsZW49dGxlbnx8NjQ7YWRhdGE9YWRhdGF8fFtdO2lmKGl2bDw3KXt0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZCgiY2NtOiBpdiBtdXN0IGJlIGF0IGxlYXN0IDcgYnl0ZXMiKX1mb3IoTD0yO0w8NCYmb2w+Pj44Kkw7TCsrKXt9aWYoTDwxNS1pdmwpe0w9MTUtaXZsfWl2PXcuY2xhbXAoaXYsOCooMTUtTCkpO3RhZz1zamNsLm1vZGUuY2NtLl9jb21wdXRlVGFnKHByZixwbGFpbnRleHQsaXYsYWRhdGEsdGxlbixMKTtvdXQ9c2pjbC5tb2RlLmNjbS5fY3RyTW9kZShwcmYsb3V0LGl2LHRhZyx0bGVuLEwpO3JldHVybiB3LmNvbmNhdChvdXQuZGF0YSxvdXQudGFnKX0sZGVjcnlwdDpmdW5jdGlvbihwcmYsY2lwaGVydGV4dCxpdixhZGF0YSx0bGVuKXt0bGVuPXRsZW58fDY0O2FkYXRhPWFkYXRhfHxbXTt2YXIgTCx3PXNqY2wuYml0QXJyYXksaXZsPXcuYml0TGVuZ3RoKGl2KS84LG9sPXcuYml0TGVuZ3RoKGNpcGhlcnRleHQpLG91dD13LmNsYW1wKGNpcGhlcnRleHQsb2wtdGxlbiksdGFnPXcuYml0U2xpY2UoY2lwaGVydGV4dCxvbC10bGVuKSx0YWcyO29sPShvbC10bGVuKS84O2lmKGl2bDw3KXt0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZCgiY2NtOiBpdiBtdXN0IGJlIGF0IGxlYXN0IDcgYnl0ZXMiKX1mb3IoTD0yO0w8NCYmb2w+Pj44Kkw7TCsrKXt9aWYoTDwxNS1pdmwpe0w9MTUtaXZsfWl2PXcuY2xhbXAoaXYsOCooMTUtTCkpO291dD1zamNsLm1vZGUuY2NtLl9jdHJNb2RlKHByZixvdXQsaXYsdGFnLHRsZW4sTCk7dGFnMj1zamNsLm1vZGUuY2NtLl9jb21wdXRlVGFnKHByZixvdXQuZGF0YSxpdixhZGF0YSx0bGVuLEwpO2lmKCF3LmVxdWFsKG91dC50YWcsdGFnMikpe3Rocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5jb3JydXB0KCJjY206IHRhZyBkb2Vzbid0IG1hdGNoIil9cmV0dXJuIG91dC5kYXRhfSxfbWFjQWRkaXRpb25hbERhdGE6ZnVuY3Rpb24ocHJmLGFkYXRhLGl2LHRsZW4sb2wsTCl7dmFyIG1hYyx0bXAsaSxtYWNEYXRhPVtdLHc9c2pjbC5iaXRBcnJheSx4b3I9dy5feG9yNDttYWM9W3cucGFydGlhbCg4LChhZGF0YS5sZW5ndGg/MTw8NjowKXx0bGVuLTI8PDJ8TC0xKV07bWFjPXcuY29uY2F0KG1hYyxpdik7bWFjWzNdfD1vbDttYWM9cHJmLmVuY3J5cHQobWFjKTtpZihhZGF0YS5sZW5ndGgpe3RtcD13LmJpdExlbmd0aChhZGF0YSkvODtpZih0bXA8PTY1Mjc5KXttYWNEYXRhPVt3LnBhcnRpYWwoMTYsdG1wKV19ZWxzZSBpZih0bXA8PTQyOTQ5NjcyOTUpe21hY0RhdGE9dy5jb25jYXQoW3cucGFydGlhbCgxNiw2NTUzNCldLFt0bXBdKX1tYWNEYXRhPXcuY29uY2F0KG1hY0RhdGEsYWRhdGEpO2ZvcihpPTA7aTxtYWNEYXRhLmxlbmd0aDtpKz00KXttYWM9cHJmLmVuY3J5cHQoeG9yKG1hYyxtYWNEYXRhLnNsaWNlKGksaSs0KS5jb25jYXQoWzAsMCwwXSkpKX19cmV0dXJuIG1hY30sX2NvbXB1dGVUYWc6ZnVuY3Rpb24ocHJmLHBsYWludGV4dCxpdixhZGF0YSx0bGVuLEwpe3ZhciBtYWMsaSx3PXNqY2wuYml0QXJyYXkseG9yPXcuX3hvcjQ7dGxlbi89ODtpZih0bGVuJTJ8fHRsZW48NHx8dGxlbj4xNil7dGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoImNjbTogaW52YWxpZCB0YWcgbGVuZ3RoIil9aWYoYWRhdGEubGVuZ3RoPjQyOTQ5NjcyOTV8fHBsYWludGV4dC5sZW5ndGg+NDI5NDk2NzI5NSl7dGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmJ1ZygiY2NtOiBjYW4ndCBkZWFsIHdpdGggNEdpQiBvciBtb3JlIGRhdGEiKX1tYWM9c2pjbC5tb2RlLmNjbS5fbWFjQWRkaXRpb25hbERhdGEocHJmLGFkYXRhLGl2LHRsZW4sdy5iaXRMZW5ndGgocGxhaW50ZXh0KS84LEwpO2ZvcihpPTA7aTxwbGFpbnRleHQubGVuZ3RoO2krPTQpe21hYz1wcmYuZW5jcnlwdCh4b3IobWFjLHBsYWludGV4dC5zbGljZShpLGkrNCkuY29uY2F0KFswLDAsMF0pKSl9cmV0dXJuIHcuY2xhbXAobWFjLHRsZW4qOCl9LF9jdHJNb2RlOmZ1bmN0aW9uKHByZixkYXRhLGl2LHRhZyx0bGVuLEwpe3ZhciBlbmMsaSx3PXNqY2wuYml0QXJyYXkseG9yPXcuX3hvcjQsY3RyLGw9ZGF0YS5sZW5ndGgsYmw9dy5iaXRMZW5ndGgoZGF0YSksbj1sLzUwLHA9bjtjdHI9dy5jb25jYXQoW3cucGFydGlhbCg4LEwtMSldLGl2KS5jb25jYXQoWzAsMCwwXSkuc2xpY2UoMCw0KTt0YWc9dy5iaXRTbGljZSh4b3IodGFnLHByZi5lbmNyeXB0KGN0cikpLDAsdGxlbik7aWYoIWwpe3JldHVybnt0YWc6dGFnLGRhdGE6W119fWZvcihpPTA7aTxsO2krPTQpe2lmKGk+bil7c2pjbC5tb2RlLmNjbS5fY2FsbFByb2dyZXNzTGlzdGVuZXIoaS9sKTtuKz1wfWN0clszXSsrO2VuYz1wcmYuZW5jcnlwdChjdHIpO2RhdGFbaV1ePWVuY1swXTtkYXRhW2krMV1ePWVuY1sxXTtkYXRhW2krMl1ePWVuY1syXTtkYXRhW2krM11ePWVuY1szXX1yZXR1cm57dGFnOnRhZyxkYXRhOncuY2xhbXAoZGF0YSxibCl9fX07c2pjbC5taXNjLmhtYWM9ZnVuY3Rpb24oa2V5LEhhc2gpe3RoaXMuX2hhc2g9SGFzaD1IYXNofHxzamNsLmhhc2guc2hhMjU2O3ZhciBleEtleT1bW10sW11dLGksYnM9SGFzaC5wcm90b3R5cGUuYmxvY2tTaXplLzMyO3RoaXMuX2Jhc2VIYXNoPVtuZXcgSGFzaCxuZXcgSGFzaF07aWYoa2V5Lmxlbmd0aD5icyl7a2V5PUhhc2guaGFzaChrZXkpfWZvcihpPTA7aTxicztpKyspe2V4S2V5WzBdW2ldPWtleVtpXV45MDk1MjI0ODY7ZXhLZXlbMV1baV09a2V5W2ldXjE1NDk1NTY4Mjh9dGhpcy5fYmFzZUhhc2hbMF0udXBkYXRlKGV4S2V5WzBdKTt0aGlzLl9iYXNlSGFzaFsxXS51cGRhdGUoZXhLZXlbMV0pO3RoaXMuX3Jlc3VsdEhhc2g9bmV3IEhhc2godGhpcy5fYmFzZUhhc2hbMF0pfTtzamNsLm1pc2MuaG1hYy5wcm90b3R5cGUuZW5jcnlwdD1zamNsLm1pc2MuaG1hYy5wcm90b3R5cGUubWFjPWZ1bmN0aW9uKGRhdGEpe2lmKCF0aGlzLl91cGRhdGVkKXt0aGlzLnVwZGF0ZShkYXRhKTtyZXR1cm4gdGhpcy5kaWdlc3QoZGF0YSl9ZWxzZXt0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZCgiZW5jcnlwdCBvbiBhbHJlYWR5IHVwZGF0ZWQgaG1hYyBjYWxsZWQhIil9fTtzamNsLm1pc2MuaG1hYy5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9yZXN1bHRIYXNoPW5ldyB0aGlzLl9oYXNoKHRoaXMuX2Jhc2VIYXNoWzBdKTt0aGlzLl91cGRhdGVkPWZhbHNlfTtzamNsLm1pc2MuaG1hYy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGRhdGEpe3RoaXMuX3VwZGF0ZWQ9dHJ1ZTt0aGlzLl9yZXN1bHRIYXNoLnVwZGF0ZShkYXRhKX07c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciB3PXRoaXMuX3Jlc3VsdEhhc2guZmluYWxpemUoKSxyZXN1bHQ9bmV3IHRoaXMuX2hhc2godGhpcy5fYmFzZUhhc2hbMV0pLnVwZGF0ZSh3KS5maW5hbGl6ZSgpO3RoaXMucmVzZXQoKTtyZXR1cm4gcmVzdWx0fTtzamNsLm1pc2MucGJrZGYyPWZ1bmN0aW9uKHBhc3N3b3JkLHNhbHQsY291bnQsbGVuZ3RoLFByZmYpe2NvdW50PWNvdW50fHwxZTQ7aWYobGVuZ3RoPDB8fGNvdW50PDApe3Rocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKCJpbnZhbGlkIHBhcmFtcyB0byBwYmtkZjIiKX1pZih0eXBlb2YgcGFzc3dvcmQ9PT0ic3RyaW5nIil7cGFzc3dvcmQ9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhwYXNzd29yZCl9aWYodHlwZW9mIHNhbHQ9PT0ic3RyaW5nIil7c2FsdD1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKHNhbHQpfVByZmY9UHJmZnx8c2pjbC5taXNjLmhtYWM7dmFyIHByZj1uZXcgUHJmZihwYXNzd29yZCksdSx1aSxpLGosayxvdXQ9W10sYj1zamNsLmJpdEFycmF5O2ZvcihrPTE7MzIqb3V0Lmxlbmd0aDwobGVuZ3RofHwxKTtrKyspe3U9dWk9cHJmLmVuY3J5cHQoYi5jb25jYXQoc2FsdCxba10pKTtmb3IoaT0xO2k8Y291bnQ7aSsrKXt1aT1wcmYuZW5jcnlwdCh1aSk7Zm9yKGo9MDtqPHVpLmxlbmd0aDtqKyspe3Vbal1ePXVpW2pdfX1vdXQ9b3V0LmNvbmNhdCh1KX1pZihsZW5ndGgpe291dD1iLmNsYW1wKG91dCxsZW5ndGgpfXJldHVybiBvdXR9O3NqY2wucHJuZz1mdW5jdGlvbihkZWZhdWx0UGFyYW5vaWEpe3RoaXMuX3Bvb2xzPVtuZXcgc2pjbC5oYXNoLnNoYTI1Nl07dGhpcy5fcG9vbEVudHJvcHk9WzBdO3RoaXMuX3Jlc2VlZENvdW50PTA7dGhpcy5fcm9iaW5zPXt9O3RoaXMuX2V2ZW50SWQ9MDt0aGlzLl9jb2xsZWN0b3JJZHM9e307dGhpcy5fY29sbGVjdG9ySWROZXh0PTA7dGhpcy5fc3RyZW5ndGg9MDt0aGlzLl9wb29sU3RyZW5ndGg9MDt0aGlzLl9uZXh0UmVzZWVkPTA7dGhpcy5fa2V5PVswLDAsMCwwLDAsMCwwLDBdO3RoaXMuX2NvdW50ZXI9WzAsMCwwLDBdO3RoaXMuX2NpcGhlcj11bmRlZmluZWQ7dGhpcy5fZGVmYXVsdFBhcmFub2lhPWRlZmF1bHRQYXJhbm9pYTt0aGlzLl9jb2xsZWN0b3JzU3RhcnRlZD1mYWxzZTt0aGlzLl9jYWxsYmFja3M9e3Byb2dyZXNzOnt9LHNlZWRlZDp7fX07dGhpcy5fY2FsbGJhY2tJPTA7dGhpcy5fTk9UX1JFQURZPTA7dGhpcy5fUkVBRFk9MTt0aGlzLl9SRVFVSVJFU19SRVNFRUQ9Mjt0aGlzLl9NQVhfV09SRFNfUEVSX0JVUlNUPTY1NTM2O3RoaXMuX1BBUkFOT0lBX0xFVkVMUz1bMCw0OCw2NCw5NiwxMjgsMTkyLDI1NiwzODQsNTEyLDc2OCwxMDI0XTt0aGlzLl9NSUxMSVNFQ09ORFNfUEVSX1JFU0VFRD0zZTQ7dGhpcy5fQklUU19QRVJfUkVTRUVEPTgwfTtzamNsLnBybmcucHJvdG90eXBlPXtyYW5kb21Xb3JkczpmdW5jdGlvbihud29yZHMscGFyYW5vaWEpe3ZhciBvdXQ9W10saSxyZWFkaW5lc3M9dGhpcy5pc1JlYWR5KHBhcmFub2lhKSxnO2lmKHJlYWRpbmVzcz09PXRoaXMuX05PVF9SRUFEWSl7dGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLm5vdFJlYWR5KCJnZW5lcmF0b3IgaXNuJ3Qgc2VlZGVkIil9ZWxzZSBpZihyZWFkaW5lc3MmdGhpcy5fUkVRVUlSRVNfUkVTRUVEKXt0aGlzLl9yZXNlZWRGcm9tUG9vbHMoIShyZWFkaW5lc3MmdGhpcy5fUkVBRFkpKX1mb3IoaT0wO2k8bndvcmRzO2krPTQpe2lmKChpKzEpJXRoaXMuX01BWF9XT1JEU19QRVJfQlVSU1Q9PT0wKXt0aGlzLl9nYXRlKCl9Zz10aGlzLl9nZW40d29yZHMoKTtvdXQucHVzaChnWzBdLGdbMV0sZ1syXSxnWzNdKX10aGlzLl9nYXRlKCk7cmV0dXJuIG91dC5zbGljZSgwLG53b3Jkcyl9LHNldERlZmF1bHRQYXJhbm9pYTpmdW5jdGlvbihwYXJhbm9pYSxhbGxvd1plcm9QYXJhbm9pYSl7aWYocGFyYW5vaWE9PT0wJiZhbGxvd1plcm9QYXJhbm9pYSE9PSJTZXR0aW5nIHBhcmFub2lhPTAgd2lsbCBydWluIHlvdXIgc2VjdXJpdHk7IHVzZSBpdCBvbmx5IGZvciB0ZXN0aW5nIil7dGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoIlNldHRpbmcgcGFyYW5vaWE9MCB3aWxsIHJ1aW4geW91ciBzZWN1cml0eTsgdXNlIGl0IG9ubHkgZm9yIHRlc3RpbmciKX10aGlzLl9kZWZhdWx0UGFyYW5vaWE9cGFyYW5vaWF9LGFkZEVudHJvcHk6ZnVuY3Rpb24oZGF0YSxlc3RpbWF0ZWRFbnRyb3B5LHNvdXJjZSl7c291cmNlPXNvdXJjZXx8InVzZXIiO3ZhciBpZCxpLHRtcCx0PShuZXcgRGF0ZSkudmFsdWVPZigpLHJvYmluPXRoaXMuX3JvYmluc1tzb3VyY2VdLG9sZFJlYWR5PXRoaXMuaXNSZWFkeSgpLGVycj0wLG9iak5hbWU7aWQ9dGhpcy5fY29sbGVjdG9ySWRzW3NvdXJjZV07aWYoaWQ9PT11bmRlZmluZWQpe2lkPXRoaXMuX2NvbGxlY3Rvcklkc1tzb3VyY2VdPXRoaXMuX2NvbGxlY3RvcklkTmV4dCsrfWlmKHJvYmluPT09dW5kZWZpbmVkKXtyb2Jpbj10aGlzLl9yb2JpbnNbc291cmNlXT0wfXRoaXMuX3JvYmluc1tzb3VyY2VdPSh0aGlzLl9yb2JpbnNbc291cmNlXSsxKSV0aGlzLl9wb29scy5sZW5ndGg7c3dpdGNoKHR5cGVvZiBkYXRhKXtjYXNlIm51bWJlciI6aWYoZXN0aW1hdGVkRW50cm9weT09PXVuZGVmaW5lZCl7ZXN0aW1hdGVkRW50cm9weT0xfXRoaXMuX3Bvb2xzW3JvYmluXS51cGRhdGUoW2lkLHRoaXMuX2V2ZW50SWQrKywxLGVzdGltYXRlZEVudHJvcHksdCwxLGRhdGF8MF0pO2JyZWFrO2Nhc2Uib2JqZWN0IjpvYmpOYW1lPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkYXRhKTtpZihvYmpOYW1lPT09IltvYmplY3QgVWludDMyQXJyYXldIil7dG1wPVtdO2ZvcihpPTA7aTxkYXRhLmxlbmd0aDtpKyspe3RtcC5wdXNoKGRhdGFbaV0pfWRhdGE9dG1wfWVsc2V7aWYob2JqTmFtZSE9PSJbb2JqZWN0IEFycmF5XSIpe2Vycj0xfWZvcihpPTA7aTxkYXRhLmxlbmd0aCYmIWVycjtpKyspe2lmKHR5cGVvZiBkYXRhW2ldIT09Im51bWJlciIpe2Vycj0xfX19aWYoIWVycil7aWYoZXN0aW1hdGVkRW50cm9weT09PXVuZGVmaW5lZCl7ZXN0aW1hdGVkRW50cm9weT0wO2ZvcihpPTA7aTxkYXRhLmxlbmd0aDtpKyspe3RtcD1kYXRhW2ldO3doaWxlKHRtcD4wKXtlc3RpbWF0ZWRFbnRyb3B5Kys7dG1wPXRtcD4+PjF9fX10aGlzLl9wb29sc1tyb2Jpbl0udXBkYXRlKFtpZCx0aGlzLl9ldmVudElkKyssMixlc3RpbWF0ZWRFbnRyb3B5LHQsZGF0YS5sZW5ndGhdLmNvbmNhdChkYXRhKSl9YnJlYWs7Y2FzZSJzdHJpbmciOmlmKGVzdGltYXRlZEVudHJvcHk9PT11bmRlZmluZWQpe2VzdGltYXRlZEVudHJvcHk9ZGF0YS5sZW5ndGh9dGhpcy5fcG9vbHNbcm9iaW5dLnVwZGF0ZShbaWQsdGhpcy5fZXZlbnRJZCsrLDMsZXN0aW1hdGVkRW50cm9weSx0LGRhdGEubGVuZ3RoXSk7dGhpcy5fcG9vbHNbcm9iaW5dLnVwZGF0ZShkYXRhKTticmVhaztkZWZhdWx0OmVycj0xfWlmKGVycil7dGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmJ1ZygicmFuZG9tOiBhZGRFbnRyb3B5IG9ubHkgc3VwcG9ydHMgbnVtYmVyLCBhcnJheSBvZiBudW1iZXJzIG9yIHN0cmluZyIpfXRoaXMuX3Bvb2xFbnRyb3B5W3JvYmluXSs9ZXN0aW1hdGVkRW50cm9weTt0aGlzLl9wb29sU3RyZW5ndGgrPWVzdGltYXRlZEVudHJvcHk7aWYob2xkUmVhZHk9PT10aGlzLl9OT1RfUkVBRFkpe2lmKHRoaXMuaXNSZWFkeSgpIT09dGhpcy5fTk9UX1JFQURZKXt0aGlzLl9maXJlRXZlbnQoInNlZWRlZCIsTWF0aC5tYXgodGhpcy5fc3RyZW5ndGgsdGhpcy5fcG9vbFN0cmVuZ3RoKSl9dGhpcy5fZmlyZUV2ZW50KCJwcm9ncmVzcyIsdGhpcy5nZXRQcm9ncmVzcygpKX19LGlzUmVhZHk6ZnVuY3Rpb24ocGFyYW5vaWEpe3ZhciBlbnRyb3B5UmVxdWlyZWQ9dGhpcy5fUEFSQU5PSUFfTEVWRUxTW3BhcmFub2lhIT09dW5kZWZpbmVkP3BhcmFub2lhOnRoaXMuX2RlZmF1bHRQYXJhbm9pYV07aWYodGhpcy5fc3RyZW5ndGgmJnRoaXMuX3N0cmVuZ3RoPj1lbnRyb3B5UmVxdWlyZWQpe3JldHVybiB0aGlzLl9wb29sRW50cm9weVswXT50aGlzLl9CSVRTX1BFUl9SRVNFRUQmJihuZXcgRGF0ZSkudmFsdWVPZigpPnRoaXMuX25leHRSZXNlZWQ/dGhpcy5fUkVRVUlSRVNfUkVTRUVEfHRoaXMuX1JFQURZOnRoaXMuX1JFQURZfWVsc2V7cmV0dXJuIHRoaXMuX3Bvb2xTdHJlbmd0aD49ZW50cm9weVJlcXVpcmVkP3RoaXMuX1JFUVVJUkVTX1JFU0VFRHx0aGlzLl9OT1RfUkVBRFk6dGhpcy5fTk9UX1JFQURZfX0sZ2V0UHJvZ3Jlc3M6ZnVuY3Rpb24ocGFyYW5vaWEpe3ZhciBlbnRyb3B5UmVxdWlyZWQ9dGhpcy5fUEFSQU5PSUFfTEVWRUxTW3BhcmFub2lhP3BhcmFub2lhOnRoaXMuX2RlZmF1bHRQYXJhbm9pYV07aWYodGhpcy5fc3RyZW5ndGg+PWVudHJvcHlSZXF1aXJlZCl7cmV0dXJuIDF9ZWxzZXtyZXR1cm4gdGhpcy5fcG9vbFN0cmVuZ3RoPmVudHJvcHlSZXF1aXJlZD8xOnRoaXMuX3Bvb2xTdHJlbmd0aC9lbnRyb3B5UmVxdWlyZWR9fSxzdGFydENvbGxlY3RvcnM6ZnVuY3Rpb24oKXtpZih0aGlzLl9jb2xsZWN0b3JzU3RhcnRlZCl7cmV0dXJufXRoaXMuX2V2ZW50TGlzdGVuZXI9e2xvYWRUaW1lQ29sbGVjdG9yOnRoaXMuX2JpbmQodGhpcy5fbG9hZFRpbWVDb2xsZWN0b3IpLG1vdXNlQ29sbGVjdG9yOnRoaXMuX2JpbmQodGhpcy5fbW91c2VDb2xsZWN0b3IpLGtleWJvYXJkQ29sbGVjdG9yOnRoaXMuX2JpbmQodGhpcy5fa2V5Ym9hcmRDb2xsZWN0b3IpLGFjY2VsZXJvbWV0ZXJDb2xsZWN0b3I6dGhpcy5fYmluZCh0aGlzLl9hY2NlbGVyb21ldGVyQ29sbGVjdG9yKSx0b3VjaENvbGxlY3Rvcjp0aGlzLl9iaW5kKHRoaXMuX3RvdWNoQ29sbGVjdG9yKX07aWYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix0aGlzLl9ldmVudExpc3RlbmVyLmxvYWRUaW1lQ29sbGVjdG9yLGZhbHNlKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9ldmVudExpc3RlbmVyLm1vdXNlQ29sbGVjdG9yLGZhbHNlKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLHRoaXMuX2V2ZW50TGlzdGVuZXIua2V5Ym9hcmRDb2xsZWN0b3IsZmFsc2UpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJkZXZpY2Vtb3Rpb24iLHRoaXMuX2V2ZW50TGlzdGVuZXIuYWNjZWxlcm9tZXRlckNvbGxlY3RvcixmYWxzZSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fZXZlbnRMaXN0ZW5lci50b3VjaENvbGxlY3RvcixmYWxzZSl9ZWxzZSBpZihkb2N1bWVudC5hdHRhY2hFdmVudCl7ZG9jdW1lbnQuYXR0YWNoRXZlbnQoIm9ubG9hZCIsdGhpcy5fZXZlbnRMaXN0ZW5lci5sb2FkVGltZUNvbGxlY3Rvcik7ZG9jdW1lbnQuYXR0YWNoRXZlbnQoIm9ubW91c2Vtb3ZlIix0aGlzLl9ldmVudExpc3RlbmVyLm1vdXNlQ29sbGVjdG9yKTtkb2N1bWVudC5hdHRhY2hFdmVudCgia2V5cHJlc3MiLHRoaXMuX2V2ZW50TGlzdGVuZXIua2V5Ym9hcmRDb2xsZWN0b3IpfWVsc2V7dGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmJ1ZygiY2FuJ3QgYXR0YWNoIGV2ZW50Iil9dGhpcy5fY29sbGVjdG9yc1N0YXJ0ZWQ9dHJ1ZX0sc3RvcENvbGxlY3RvcnM6ZnVuY3Rpb24oKXtpZighdGhpcy5fY29sbGVjdG9yc1N0YXJ0ZWQpe3JldHVybn1pZih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcil7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHRoaXMuX2V2ZW50TGlzdGVuZXIubG9hZFRpbWVDb2xsZWN0b3IsZmFsc2UpO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX2V2ZW50TGlzdGVuZXIubW91c2VDb2xsZWN0b3IsZmFsc2UpO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsdGhpcy5fZXZlbnRMaXN0ZW5lci5rZXlib2FyZENvbGxlY3RvcixmYWxzZSk7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRldmljZW1vdGlvbiIsdGhpcy5fZXZlbnRMaXN0ZW5lci5hY2NlbGVyb21ldGVyQ29sbGVjdG9yLGZhbHNlKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9ldmVudExpc3RlbmVyLnRvdWNoQ29sbGVjdG9yLGZhbHNlKX1lbHNlIGlmKGRvY3VtZW50LmRldGFjaEV2ZW50KXtkb2N1bWVudC5kZXRhY2hFdmVudCgib25sb2FkIix0aGlzLl9ldmVudExpc3RlbmVyLmxvYWRUaW1lQ29sbGVjdG9yKTtkb2N1bWVudC5kZXRhY2hFdmVudCgib25tb3VzZW1vdmUiLHRoaXMuX2V2ZW50TGlzdGVuZXIubW91c2VDb2xsZWN0b3IpO2RvY3VtZW50LmRldGFjaEV2ZW50KCJrZXlwcmVzcyIsdGhpcy5fZXZlbnRMaXN0ZW5lci5rZXlib2FyZENvbGxlY3Rvcil9dGhpcy5fY29sbGVjdG9yc1N0YXJ0ZWQ9ZmFsc2V9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24obmFtZSxjYWxsYmFjayl7dGhpcy5fY2FsbGJhY2tzW25hbWVdW3RoaXMuX2NhbGxiYWNrSSsrXT1jYWxsYmFja30scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihuYW1lLGNiKXt2YXIgaSxqLGNicz10aGlzLl9jYWxsYmFja3NbbmFtZV0sanNUZW1wPVtdO2ZvcihqIGluIGNicyl7aWYoY2JzLmhhc093blByb3BlcnR5KGopJiZjYnNbal09PT1jYil7anNUZW1wLnB1c2goail9fWZvcihpPTA7aTxqc1RlbXAubGVuZ3RoO2krKyl7aj1qc1RlbXBbaV07ZGVsZXRlIGNic1tqXX19LF9iaW5kOmZ1bmN0aW9uKGZ1bmMpe3ZhciB0aGF0PXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuYy5hcHBseSh0aGF0LGFyZ3VtZW50cyl9fSxfZ2VuNHdvcmRzOmZ1bmN0aW9uKCl7Zm9yKHZhciBpPTA7aTw0O2krKyl7dGhpcy5fY291bnRlcltpXT10aGlzLl9jb3VudGVyW2ldKzF8MDtpZih0aGlzLl9jb3VudGVyW2ldKXticmVha319cmV0dXJuIHRoaXMuX2NpcGhlci5lbmNyeXB0KHRoaXMuX2NvdW50ZXIpfSxfZ2F0ZTpmdW5jdGlvbigpe3RoaXMuX2tleT10aGlzLl9nZW40d29yZHMoKS5jb25jYXQodGhpcy5fZ2VuNHdvcmRzKCkpO3RoaXMuX2NpcGhlcj1uZXcgc2pjbC5jaXBoZXIuYWVzKHRoaXMuX2tleSl9LF9yZXNlZWQ6ZnVuY3Rpb24oc2VlZFdvcmRzKXt0aGlzLl9rZXk9c2pjbC5oYXNoLnNoYTI1Ni5oYXNoKHRoaXMuX2tleS5jb25jYXQoc2VlZFdvcmRzKSk7dGhpcy5fY2lwaGVyPW5ldyBzamNsLmNpcGhlci5hZXModGhpcy5fa2V5KTtmb3IodmFyIGk9MDtpPDQ7aSsrKXt0aGlzLl9jb3VudGVyW2ldPXRoaXMuX2NvdW50ZXJbaV0rMXwwO2lmKHRoaXMuX2NvdW50ZXJbaV0pe2JyZWFrfX19LF9yZXNlZWRGcm9tUG9vbHM6ZnVuY3Rpb24oZnVsbCl7dmFyIHJlc2VlZERhdGE9W10sc3RyZW5ndGg9MCxpO3RoaXMuX25leHRSZXNlZWQ9cmVzZWVkRGF0YVswXT0obmV3IERhdGUpLnZhbHVlT2YoKSt0aGlzLl9NSUxMSVNFQ09ORFNfUEVSX1JFU0VFRDtmb3IoaT0wO2k8MTY7aSsrKXtyZXNlZWREYXRhLnB1c2goTWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk2fDApfWZvcihpPTA7aTx0aGlzLl9wb29scy5sZW5ndGg7aSsrKXtyZXNlZWREYXRhPXJlc2VlZERhdGEuY29uY2F0KHRoaXMuX3Bvb2xzW2ldLmZpbmFsaXplKCkpO3N0cmVuZ3RoKz10aGlzLl9wb29sRW50cm9weVtpXTt0aGlzLl9wb29sRW50cm9weVtpXT0wO2lmKCFmdWxsJiZ0aGlzLl9yZXNlZWRDb3VudCYxPDxpKXticmVha319aWYodGhpcy5fcmVzZWVkQ291bnQ+PTE8PHRoaXMuX3Bvb2xzLmxlbmd0aCl7dGhpcy5fcG9vbHMucHVzaChuZXcgc2pjbC5oYXNoLnNoYTI1Nik7dGhpcy5fcG9vbEVudHJvcHkucHVzaCgwKX10aGlzLl9wb29sU3RyZW5ndGgtPXN0cmVuZ3RoO2lmKHN0cmVuZ3RoPnRoaXMuX3N0cmVuZ3RoKXt0aGlzLl9zdHJlbmd0aD1zdHJlbmd0aH10aGlzLl9yZXNlZWRDb3VudCsrO3RoaXMuX3Jlc2VlZChyZXNlZWREYXRhKX0sX2tleWJvYXJkQ29sbGVjdG9yOmZ1bmN0aW9uKCl7dGhpcy5fYWRkQ3VycmVudFRpbWVUb0VudHJvcHkoMSl9LF9tb3VzZUNvbGxlY3RvcjpmdW5jdGlvbihldil7dmFyIHgseTt0cnl7eD1ldi54fHxldi5jbGllbnRYfHxldi5vZmZzZXRYfHwwO3k9ZXYueXx8ZXYuY2xpZW50WXx8ZXYub2Zmc2V0WXx8MH1jYXRjaChlcnIpe3g9MDt5PTB9aWYoeCE9MCYmeSE9MCl7dGhpcy5hZGRFbnRyb3B5KFt4LHldLDIsIm1vdXNlIil9dGhpcy5fYWRkQ3VycmVudFRpbWVUb0VudHJvcHkoMCl9LF90b3VjaENvbGxlY3RvcjpmdW5jdGlvbihldil7dmFyIHRvdWNoPWV2LnRvdWNoZXNbMF18fGV2LmNoYW5nZWRUb3VjaGVzWzBdO3ZhciB4PXRvdWNoLnBhZ2VYfHx0b3VjaC5jbGllbnRYLHk9dG91Y2gucGFnZVl8fHRvdWNoLmNsaWVudFk7dGhpcy5hZGRFbnRyb3B5KFt4LHldLDEsInRvdWNoIik7dGhpcy5fYWRkQ3VycmVudFRpbWVUb0VudHJvcHkoMCl9LF9sb2FkVGltZUNvbGxlY3RvcjpmdW5jdGlvbigpe3RoaXMuX2FkZEN1cnJlbnRUaW1lVG9FbnRyb3B5KDIpfSxfYWRkQ3VycmVudFRpbWVUb0VudHJvcHk6ZnVuY3Rpb24oZXN0aW1hdGVkRW50cm9weSl7aWYodHlwZW9mIHdpbmRvdyE9PSJ1bmRlZmluZWQiJiZ3aW5kb3cucGVyZm9ybWFuY2UmJnR5cGVvZiB3aW5kb3cucGVyZm9ybWFuY2Uubm93PT09ImZ1bmN0aW9uIil7dGhpcy5hZGRFbnRyb3B5KHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSxlc3RpbWF0ZWRFbnRyb3B5LCJsb2FkdGltZSIpfWVsc2V7dGhpcy5hZGRFbnRyb3B5KChuZXcgRGF0ZSkudmFsdWVPZigpLGVzdGltYXRlZEVudHJvcHksImxvYWR0aW1lIil9fSxfYWNjZWxlcm9tZXRlckNvbGxlY3RvcjpmdW5jdGlvbihldil7dmFyIGFjPWV2LmFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkueHx8ZXYuYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eS55fHxldi5hY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5Lno7aWYod2luZG93Lm9yaWVudGF0aW9uKXt2YXIgb3I9d2luZG93Lm9yaWVudGF0aW9uO2lmKHR5cGVvZiBvcj09PSJudW1iZXIiKXt0aGlzLmFkZEVudHJvcHkob3IsMSwiYWNjZWxlcm9tZXRlciIpfX1pZihhYyl7dGhpcy5hZGRFbnRyb3B5KGFjLDIsImFjY2VsZXJvbWV0ZXIiKX10aGlzLl9hZGRDdXJyZW50VGltZVRvRW50cm9weSgwKX0sX2ZpcmVFdmVudDpmdW5jdGlvbihuYW1lLGFyZyl7dmFyIGosY2JzPXNqY2wucmFuZG9tLl9jYWxsYmFja3NbbmFtZV0sY2JzVGVtcD1bXTtmb3IoaiBpbiBjYnMpe2lmKGNicy5oYXNPd25Qcm9wZXJ0eShqKSl7Y2JzVGVtcC5wdXNoKGNic1tqXSl9fWZvcihqPTA7ajxjYnNUZW1wLmxlbmd0aDtqKyspe2Nic1RlbXBbal0oYXJnKX19fTtzamNsLnJhbmRvbT1uZXcgc2pjbC5wcm5nKDYpOyhmdW5jdGlvbigpe2Z1bmN0aW9uIGdldENyeXB0b01vZHVsZSgpe3RyeXtyZXR1cm4gcmVxdWlyZSgiY3J5cHRvIil9Y2F0Y2goZSl7cmV0dXJuIG51bGx9fXRyeXt2YXIgYnVmLGNyeXB0LGFiO2lmKHR5cGVvZiBtb2R1bGUhPT0idW5kZWZpbmVkIiYmbW9kdWxlLmV4cG9ydHMmJihjcnlwdD1nZXRDcnlwdG9Nb2R1bGUoKSkmJmNyeXB0LnJhbmRvbUJ5dGVzKXtidWY9Y3J5cHQucmFuZG9tQnl0ZXMoMTAyNC84KTtidWY9bmV3IFVpbnQzMkFycmF5KG5ldyBVaW50OEFycmF5KGJ1ZikuYnVmZmVyKTtzamNsLnJhbmRvbS5hZGRFbnRyb3B5KGJ1ZiwxMDI0LCJjcnlwdG8ucmFuZG9tQnl0ZXMiKX1lbHNlIGlmKHR5cGVvZiB3aW5kb3chPT0idW5kZWZpbmVkIiYmdHlwZW9mIFVpbnQzMkFycmF5IT09InVuZGVmaW5lZCIpe2FiPW5ldyBVaW50MzJBcnJheSgzMik7aWYod2luZG93LmNyeXB0byYmd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpe3dpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFiKX1lbHNlIGlmKHdpbmRvdy5tc0NyeXB0byYmd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyl7d2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhYil9ZWxzZXtyZXR1cm59c2pjbC5yYW5kb20uYWRkRW50cm9weShhYiwxMDI0LCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIil9ZWxzZXt9fWNhdGNoKGUpe2lmKHR5cGVvZiB3aW5kb3chPT0idW5kZWZpbmVkIiYmd2luZG93LmNvbnNvbGUpe2NvbnNvbGUubG9nKCJUaGVyZSB3YXMgYW4gZXJyb3IgY29sbGVjdGluZyBlbnRyb3B5IGZyb20gdGhlIGJyb3dzZXI6Iik7Y29uc29sZS5sb2coZSl9fX0pKCk7c2pjbC5qc29uPXtkZWZhdWx0czp7djoxLGl0ZXI6MWU0LGtzOjEyOCx0czo2NCxtb2RlOiJjY20iLGFkYXRhOiIiLGNpcGhlcjoiYWVzIn0sX2VuY3J5cHQ6ZnVuY3Rpb24ocGFzc3dvcmQscGxhaW50ZXh0LHBhcmFtcyxycCl7cGFyYW1zPXBhcmFtc3x8e307cnA9cnB8fHt9O3ZhciBqPXNqY2wuanNvbixwPWouX2FkZCh7aXY6c2pjbC5yYW5kb20ucmFuZG9tV29yZHMoNCwwKX0sai5kZWZhdWx0cyksdG1wLHBycCxhZGF0YTtqLl9hZGQocCxwYXJhbXMpO2FkYXRhPXAuYWRhdGE7aWYodHlwZW9mIHAuc2FsdD09PSJzdHJpbmciKXtwLnNhbHQ9c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKHAuc2FsdCl9aWYodHlwZW9mIHAuaXY9PT0ic3RyaW5nIil7cC5pdj1zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMocC5pdil9aWYoIXNqY2wubW9kZVtwLm1vZGVdfHwhc2pjbC5jaXBoZXJbcC5jaXBoZXJdfHx0eXBlb2YgcGFzc3dvcmQ9PT0ic3RyaW5nIiYmcC5pdGVyPD0xMDB8fHAudHMhPT02NCYmcC50cyE9PTk2JiZwLnRzIT09MTI4fHxwLmtzIT09MTI4JiZwLmtzIT09MTkyJiZwLmtzIT09MjU2fHwocC5pdi5sZW5ndGg8Mnx8cC5pdi5sZW5ndGg+NCkpe3Rocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKCJqc29uIGVuY3J5cHQ6IGludmFsaWQgcGFyYW1ldGVycyIpfWlmKHR5cGVvZiBwYXNzd29yZD09PSJzdHJpbmciKXt0bXA9c2pjbC5taXNjLmNhY2hlZFBia2RmMihwYXNzd29yZCxwKTtwYXNzd29yZD10bXAua2V5LnNsaWNlKDAscC5rcy8zMik7cC5zYWx0PXRtcC5zYWx0fWVsc2UgaWYoc2pjbC5lY2MmJnBhc3N3b3JkIGluc3RhbmNlb2Ygc2pjbC5lY2MuZWxHYW1hbC5wdWJsaWNLZXkpe3RtcD1wYXNzd29yZC5rZW0oKTtwLmtlbXRhZz10bXAudGFnO3Bhc3N3b3JkPXRtcC5rZXkuc2xpY2UoMCxwLmtzLzMyKX1pZih0eXBlb2YgcGxhaW50ZXh0PT09InN0cmluZyIpe3BsYWludGV4dD1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKHBsYWludGV4dCl9aWYodHlwZW9mIGFkYXRhPT09InN0cmluZyIpe3AuYWRhdGE9YWRhdGE9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhhZGF0YSl9cHJwPW5ldyBzamNsLmNpcGhlcltwLmNpcGhlcl0ocGFzc3dvcmQpO2ouX2FkZChycCxwKTtycC5rZXk9cGFzc3dvcmQ7aWYocC5tb2RlPT09ImNjbSImJnNqY2wuYXJyYXlCdWZmZXImJnNqY2wuYXJyYXlCdWZmZXIuY2NtJiZwbGFpbnRleHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil7cC5jdD1zamNsLmFycmF5QnVmZmVyLmNjbS5lbmNyeXB0KHBycCxwbGFpbnRleHQscC5pdixhZGF0YSxwLnRzKX1lbHNle3AuY3Q9c2pjbC5tb2RlW3AubW9kZV0uZW5jcnlwdChwcnAscGxhaW50ZXh0LHAuaXYsYWRhdGEscC50cyl9cmV0dXJuIHB9LGVuY3J5cHQ6ZnVuY3Rpb24ocGFzc3dvcmQscGxhaW50ZXh0LHBhcmFtcyxycCl7dmFyIGo9c2pjbC5qc29uLHA9ai5fZW5jcnlwdC5hcHBseShqLGFyZ3VtZW50cyk7cmV0dXJuIGouZW5jb2RlKHApfSxfZGVjcnlwdDpmdW5jdGlvbihwYXNzd29yZCxjaXBoZXJ0ZXh0LHBhcmFtcyxycCl7cGFyYW1zPXBhcmFtc3x8e307cnA9cnB8fHt9O3ZhciBqPXNqY2wuanNvbixwPWouX2FkZChqLl9hZGQoai5fYWRkKHt9LGouZGVmYXVsdHMpLGNpcGhlcnRleHQpLHBhcmFtcyx0cnVlKSxjdCx0bXAscHJwLGFkYXRhPXAuYWRhdGE7aWYodHlwZW9mIHAuc2FsdD09PSJzdHJpbmciKXtwLnNhbHQ9c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKHAuc2FsdCl9aWYodHlwZW9mIHAuaXY9PT0ic3RyaW5nIil7cC5pdj1zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMocC5pdil9aWYoIXNqY2wubW9kZVtwLm1vZGVdfHwhc2pjbC5jaXBoZXJbcC5jaXBoZXJdfHx0eXBlb2YgcGFzc3dvcmQ9PT0ic3RyaW5nIiYmcC5pdGVyPD0xMDB8fHAudHMhPT02NCYmcC50cyE9PTk2JiZwLnRzIT09MTI4fHxwLmtzIT09MTI4JiZwLmtzIT09MTkyJiZwLmtzIT09MjU2fHwhcC5pdnx8KHAuaXYubGVuZ3RoPDJ8fHAuaXYubGVuZ3RoPjQpKXt0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZCgianNvbiBkZWNyeXB0OiBpbnZhbGlkIHBhcmFtZXRlcnMiKX1pZih0eXBlb2YgcGFzc3dvcmQ9PT0ic3RyaW5nIil7dG1wPXNqY2wubWlzYy5jYWNoZWRQYmtkZjIocGFzc3dvcmQscCk7cGFzc3dvcmQ9dG1wLmtleS5zbGljZSgwLHAua3MvMzIpO3Auc2FsdD10bXAuc2FsdH1lbHNlIGlmKHNqY2wuZWNjJiZwYXNzd29yZCBpbnN0YW5jZW9mIHNqY2wuZWNjLmVsR2FtYWwuc2VjcmV0S2V5KXtwYXNzd29yZD1wYXNzd29yZC51bmtlbShzamNsLmNvZGVjLmJhc2U2NC50b0JpdHMocC5rZW10YWcpKS5zbGljZSgwLHAua3MvMzIpfWlmKHR5cGVvZiBhZGF0YT09PSJzdHJpbmciKXthZGF0YT1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGFkYXRhKX1wcnA9bmV3IHNqY2wuY2lwaGVyW3AuY2lwaGVyXShwYXNzd29yZCk7aWYocC5tb2RlPT09ImNjbSImJnNqY2wuYXJyYXlCdWZmZXImJnNqY2wuYXJyYXlCdWZmZXIuY2NtJiZwLmN0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe2N0PXNqY2wuYXJyYXlCdWZmZXIuY2NtLmRlY3J5cHQocHJwLHAuY3QscC5pdixwLnRhZyxhZGF0YSxwLnRzKX1lbHNle2N0PXNqY2wubW9kZVtwLm1vZGVdLmRlY3J5cHQocHJwLHAuY3QscC5pdixhZGF0YSxwLnRzKX1qLl9hZGQocnAscCk7cnAua2V5PXBhc3N3b3JkO2lmKHBhcmFtcy5yYXc9PT0xKXtyZXR1cm4gY3R9ZWxzZXtyZXR1cm4gc2pjbC5jb2RlYy51dGY4U3RyaW5nLmZyb21CaXRzKGN0KX19LGRlY3J5cHQ6ZnVuY3Rpb24ocGFzc3dvcmQsY2lwaGVydGV4dCxwYXJhbXMscnApe3ZhciBqPXNqY2wuanNvbjtyZXR1cm4gai5fZGVjcnlwdChwYXNzd29yZCxqLmRlY29kZShjaXBoZXJ0ZXh0KSxwYXJhbXMscnApfSxlbmNvZGU6ZnVuY3Rpb24ob2JqKXt2YXIgaSxvdXQ9InsiLGNvbW1hPSIiO2ZvcihpIGluIG9iail7aWYob2JqLmhhc093blByb3BlcnR5KGkpKXtpZighaS5tYXRjaCgvXlthLXowLTldKyQvaSkpe3Rocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKCJqc29uIGVuY29kZTogaW52YWxpZCBwcm9wZXJ0eSBuYW1lIil9b3V0Kz1jb21tYSsnIicraSsnIjonO2NvbW1hPSIsIjtzd2l0Y2godHlwZW9mIG9ialtpXSl7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6b3V0Kz1vYmpbaV07YnJlYWs7Y2FzZSJzdHJpbmciOm91dCs9JyInK2VzY2FwZShvYmpbaV0pKyciJzticmVhaztjYXNlIm9iamVjdCI6b3V0Kz0nIicrc2pjbC5jb2RlYy5iYXNlNjQuZnJvbUJpdHMob2JqW2ldLDApKyciJzticmVhaztkZWZhdWx0OnRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoImpzb24gZW5jb2RlOiB1bnN1cHBvcnRlZCB0eXBlIil9fX1yZXR1cm4gb3V0KyJ9In0sZGVjb2RlOmZ1bmN0aW9uKHN0cil7c3RyPXN0ci5yZXBsYWNlKC9ccy9nLCIiKTtpZighc3RyLm1hdGNoKC9eXHsuKn0kLykpe3Rocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKCJqc29uIGRlY29kZTogdGhpcyBpc24ndCBqc29uISIpfXZhciBhPXN0ci5yZXBsYWNlKC9eXHt8fSQvZywiIikuc3BsaXQoLywvKSxvdXQ9e30saSxtO2ZvcihpPTA7aTxhLmxlbmd0aDtpKyspe2lmKCEobT1hW2ldLm1hdGNoKC9eXHMqKD86KFsiJ10/KShbYS16XVthLXowLTldKilcMSlccyo6XHMqKD86KC0/XGQrKXwiKFthLXowLTkrXC8lKl8uQD1cLV0qKSJ8KHRydWV8ZmFsc2UpKSQvaSkpKXt0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZCgianNvbiBkZWNvZGU6IHRoaXMgaXNuJ3QganNvbiEiKX1pZihtWzNdIT1udWxsKXtvdXRbbVsyXV09cGFyc2VJbnQobVszXSwxMCl9ZWxzZSBpZihtWzRdIT1udWxsKXtvdXRbbVsyXV09bVsyXS5tYXRjaCgvXihjdHxhZGF0YXxzYWx0fGl2KSQvKT9zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMobVs0XSk6dW5lc2NhcGUobVs0XSl9ZWxzZSBpZihtWzVdIT1udWxsKXtvdXRbbVsyXV09bVs1XT09PSJ0cnVlIn19cmV0dXJuIG91dH0sX2FkZDpmdW5jdGlvbih0YXJnZXQsc3JjLHJlcXVpcmVTYW1lKXtpZih0YXJnZXQ9PT11bmRlZmluZWQpe3RhcmdldD17fX1pZihzcmM9PT11bmRlZmluZWQpe3JldHVybiB0YXJnZXR9dmFyIGk7Zm9yKGkgaW4gc3JjKXtpZihzcmMuaGFzT3duUHJvcGVydHkoaSkpe2lmKHJlcXVpcmVTYW1lJiZ0YXJnZXRbaV0hPT11bmRlZmluZWQmJnRhcmdldFtpXSE9PXNyY1tpXSl7dGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoInJlcXVpcmVkIHBhcmFtZXRlciBvdmVycmlkZGVuIil9dGFyZ2V0W2ldPXNyY1tpXX19cmV0dXJuIHRhcmdldH0sX3N1YnRyYWN0OmZ1bmN0aW9uKHBsdXMsbWludXMpe3ZhciBvdXQ9e30saTtmb3IoaSBpbiBwbHVzKXtpZihwbHVzLmhhc093blByb3BlcnR5KGkpJiZwbHVzW2ldIT09bWludXNbaV0pe291dFtpXT1wbHVzW2ldfX1yZXR1cm4gb3V0fSxfZmlsdGVyOmZ1bmN0aW9uKHNyYyxmaWx0ZXIpe3ZhciBvdXQ9e30saTtmb3IoaT0wO2k8ZmlsdGVyLmxlbmd0aDtpKyspe2lmKHNyY1tmaWx0ZXJbaV1dIT09dW5kZWZpbmVkKXtvdXRbZmlsdGVyW2ldXT1zcmNbZmlsdGVyW2ldXX19cmV0dXJuIG91dH19O3NqY2wuZW5jcnlwdD1zamNsLmpzb24uZW5jcnlwdDtzamNsLmRlY3J5cHQ9c2pjbC5qc29uLmRlY3J5cHQ7c2pjbC5taXNjLl9wYmtkZjJDYWNoZT17fTtzamNsLm1pc2MuY2FjaGVkUGJrZGYyPWZ1bmN0aW9uKHBhc3N3b3JkLG9iail7dmFyIGNhY2hlPXNqY2wubWlzYy5fcGJrZGYyQ2FjaGUsYyxjcCxzdHIsc2FsdCxpdGVyO29iaj1vYmp8fHt9O2l0ZXI9b2JqLml0ZXJ8fDFlMztjcD1jYWNoZVtwYXNzd29yZF09Y2FjaGVbcGFzc3dvcmRdfHx7fTtjPWNwW2l0ZXJdPWNwW2l0ZXJdfHx7Zmlyc3RTYWx0Om9iai5zYWx0JiZvYmouc2FsdC5sZW5ndGg/b2JqLnNhbHQuc2xpY2UoMCk6c2pjbC5yYW5kb20ucmFuZG9tV29yZHMoMiwwKX07c2FsdD1vYmouc2FsdD09PXVuZGVmaW5lZD9jLmZpcnN0U2FsdDpvYmouc2FsdDtjW3NhbHRdPWNbc2FsdF18fHNqY2wubWlzYy5wYmtkZjIocGFzc3dvcmQsc2FsdCxvYmouaXRlcik7cmV0dXJue2tleTpjW3NhbHRdLnNsaWNlKDApLHNhbHQ6c2FsdC5zbGljZSgwKX19O2lmKHR5cGVvZiBtb2R1bGUhPT0idW5kZWZpbmVkIiYmbW9kdWxlLmV4cG9ydHMpe21vZHVsZS5leHBvcnRzPXNqY2x9aWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiIpe2RlZmluZShbXSxmdW5jdGlvbigpe3JldHVybiBzamNsfSl9CiAgICB2YXIgQmFzZTY0PXtfa2V5U3RyOiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIsZW5jb2RlOmZ1bmN0aW9uKGlucHV0KXt2YXIgb3V0cHV0PSIiO3ZhciBjaHIxLGNocjIsY2hyMyxlbmMxLGVuYzIsZW5jMyxlbmM0O3ZhciBpPTA7aW5wdXQ9QmFzZTY0Ll91dGY4X2VuY29kZShpbnB1dCk7d2hpbGUoaTxpbnB1dC5sZW5ndGgpe2NocjE9aW5wdXQuY2hhckNvZGVBdChpKyspO2NocjI9aW5wdXQuY2hhckNvZGVBdChpKyspO2NocjM9aW5wdXQuY2hhckNvZGVBdChpKyspO2VuYzE9Y2hyMT4+MjtlbmMyPShjaHIxJjMpPDw0fGNocjI+PjQ7ZW5jMz0oY2hyMiYxNSk8PDJ8Y2hyMz4+NjtlbmM0PWNocjMmNjM7aWYoaXNOYU4oY2hyMikpe2VuYzM9ZW5jND02NH1lbHNlIGlmKGlzTmFOKGNocjMpKXtlbmM0PTY0fW91dHB1dD1vdXRwdXQrdGhpcy5fa2V5U3RyLmNoYXJBdChlbmMxKSt0aGlzLl9rZXlTdHIuY2hhckF0KGVuYzIpK3RoaXMuX2tleVN0ci5jaGFyQXQoZW5jMykrdGhpcy5fa2V5U3RyLmNoYXJBdChlbmM0KX1yZXR1cm4gb3V0cHV0fSxkZWNvZGU6ZnVuY3Rpb24oaW5wdXQpe3ZhciBvdXRwdXQ9IiI7dmFyIGNocjEsY2hyMixjaHIzO3ZhciBlbmMxLGVuYzIsZW5jMyxlbmM0O3ZhciBpPTA7aW5wdXQ9aW5wdXQucmVwbGFjZSgvW15BLVphLXowLTlcK1wvXD1dL2csIiIpO3doaWxlKGk8aW5wdXQubGVuZ3RoKXtlbmMxPXRoaXMuX2tleVN0ci5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtlbmMyPXRoaXMuX2tleVN0ci5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtlbmMzPXRoaXMuX2tleVN0ci5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtlbmM0PXRoaXMuX2tleVN0ci5pbmRleE9mKGlucHV0LmNoYXJBdChpKyspKTtjaHIxPWVuYzE8PDJ8ZW5jMj4+NDtjaHIyPShlbmMyJjE1KTw8NHxlbmMzPj4yO2NocjM9KGVuYzMmMyk8PDZ8ZW5jNDtvdXRwdXQ9b3V0cHV0K1N0cmluZy5mcm9tQ2hhckNvZGUoY2hyMSk7aWYoZW5jMyE9NjQpe291dHB1dD1vdXRwdXQrU3RyaW5nLmZyb21DaGFyQ29kZShjaHIyKX1pZihlbmM0IT02NCl7b3V0cHV0PW91dHB1dCtTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjMpfX1vdXRwdXQ9QmFzZTY0Ll91dGY4X2RlY29kZShvdXRwdXQpO3JldHVybiBvdXRwdXR9LF91dGY4X2VuY29kZTpmdW5jdGlvbihzdHJpbmcpe3N0cmluZz1zdHJpbmcucmVwbGFjZSgvXHJcbi9nLCJcbiIpO3ZhciB1dGZ0ZXh0PSIiO2Zvcih2YXIgbj0wO248c3RyaW5nLmxlbmd0aDtuKyspe3ZhciBjPXN0cmluZy5jaGFyQ29kZUF0KG4pO2lmKGM8MTI4KXt1dGZ0ZXh0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpfWVsc2UgaWYoYz4xMjcmJmM8MjA0OCl7dXRmdGV4dCs9U3RyaW5nLmZyb21DaGFyQ29kZShjPj42fDE5Mik7dXRmdGV4dCs9U3RyaW5nLmZyb21DaGFyQ29kZShjJjYzfDEyOCl9ZWxzZXt1dGZ0ZXh0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGM+PjEyfDIyNCk7dXRmdGV4dCs9U3RyaW5nLmZyb21DaGFyQ29kZShjPj42JjYzfDEyOCk7dXRmdGV4dCs9U3RyaW5nLmZyb21DaGFyQ29kZShjJjYzfDEyOCl9fXJldHVybiB1dGZ0ZXh0fSxfdXRmOF9kZWNvZGU6ZnVuY3Rpb24odXRmdGV4dCl7dmFyIHN0cmluZz0iIjt2YXIgaT0wO3ZhciBjPWMxPWMyPTA7d2hpbGUoaTx1dGZ0ZXh0Lmxlbmd0aCl7Yz11dGZ0ZXh0LmNoYXJDb2RlQXQoaSk7aWYoYzwxMjgpe3N0cmluZys9U3RyaW5nLmZyb21DaGFyQ29kZShjKTtpKyt9ZWxzZSBpZihjPjE5MSYmYzwyMjQpe2MyPXV0ZnRleHQuY2hhckNvZGVBdChpKzEpO3N0cmluZys9U3RyaW5nLmZyb21DaGFyQ29kZSgoYyYzMSk8PDZ8YzImNjMpO2krPTJ9ZWxzZXtjMj11dGZ0ZXh0LmNoYXJDb2RlQXQoaSsxKTtjMz11dGZ0ZXh0LmNoYXJDb2RlQXQoaSsyKTtzdHJpbmcrPVN0cmluZy5mcm9tQ2hhckNvZGUoKGMmMTUpPDwxMnwoYzImNjMpPDw2fGMzJjYzKTtpKz0zfX1yZXR1cm4gc3RyaW5nfX07CgogICAgICBsb2dnZXIubWVzc2FnZSgiQ29sbGVjdCBBbmQgRW5jcnlwdCBDdXN0b20gUGFzc3dvcmQ6IHN0YXJ0Iik7CiAgICBvdXRjb21lID0gInRydWUiOwogIAogICAgLyogQmVnaW4gQ29uZmlndXJhdGlvbiAqLwogICAgICAKICAgICAgLy8gQXR0cmlidXRlIG5hbWUKICAgICAgdmFyIGlkbUF0dHJOYW1lID0gImZyVW5pbmRleGVkU3RyaW5nMiI7IC8vIEFNOiAiZnItYXR0ci1zdHIyIgogICAgICAKICAgICAgLy8gUGljayBhIHNoYXJlZCBzZWNyZXQgdG8gdXNlIGZvciBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uCiAgICB2YXIgc2hhcmVkU2VjcmV0ID0gIlJhaW5ib3dQb25pZXNIYXZlTm9TdHJpcGVzIjsKCiAgICAgIC8vIEZpbmUtdHVuZSBlbmNyeXB0aW9uIHNldHRpbmdzLiBEZWZhdWx0IGl0ZXJhdGlvbnMgYXJlIDEwaywgdG8gc3BlZWQgdXAgdGhlIHByb2Nlc3MsIGl0J3MgcmVkdWNlZCB0byAxayBoZXJlLgogICAgICB2YXIgZW5jcnlwdGlvblBhcmFtZXRlcnMgPSB7ICJpdGVyIiA6IDEwMDAgfTsKICAgICAgCiAgICAvLyBCdWlsZCBvdXQgdGhlIHBhc3N3b3JkIHByb21wdAogICAgdmFyIHByb21wdCA9ICJSZXBsYXkgUGFzc3dvcmQiOwoKICAgIC8qIEVuZCBDb25maWd1cmF0aW9uICovCiAgCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5QYXNzd29yZENhbGxiYWNrLAogICAgICAgICAgamF2YS5sYW5nLlN0cmluZwogICAgKQogICAgCiAgICBpZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKAogICAgICAgICAgbmV3IGZyLlBhc3N3b3JkQ2FsbGJhY2socHJvbXB0LCBmYWxzZSkKICAgICAgICApLmJ1aWxkKCk7CiAgICB9IAogICAgZWxzZSB7CiAgICAgICAgICAvLyBQYXNzd29yZENhbGxiYWNrIHJldHVybnMgdGhlIHBhc3N3b3JkIGFzIGEgY2hhcltdLCB3aGljaCBpcyBub3QgdGhlIHNhbWUgYXMgYSBKUyBjaGFyIGFycmF5LiBJdCBtdXN0IGJlIGNvbnZlcnRlZCB0byBhIHByb3BlciBzdHJpbmcgdXNpbmcgdGhlIGphdmEubGFuZy5TdGluZy52YWx1ZU9mKGNoYXJbXSkgbWV0aG9kLgogICAgICAgIHZhciBwYXNzd29yZCA9IG5ldyBTdHJpbmcoZnIuU3RyaW5nLnZhbHVlT2YoY2FsbGJhY2tzLmdldCgwKS5nZXRQYXNzd29yZCgpKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIkNvbGxlY3QgQW5kIEVuY3J5cHQgQ3VzdG9tIFBhc3N3b3JkOiBjYWxsYmFja3MgcmVjZWl2ZWQiKTsKCiAgICAgICAgICAvKgogICAgICAgIHZhciBjaXBoZXJQYXNzd29yZEpzb24gPSBzamNsLmVuY3J5cHQoc2hhcmVkU2VjcmV0LCBwYXNzd29yZCwgZW5jcnlwdGlvblBhcmFtZXRlcnMpOwogICAgICAgIC8vc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKGlkbUF0dHJOYW1lLCBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGNpcGhlclBhc3N3b3JkSnNvbikpKTsKICAgICAgICBzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoaWRtQXR0ck5hbWUsIEpTT04uc3RyaW5naWZ5KGNpcGhlclBhc3N3b3JkSnNvbikpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJDb2xsZWN0IEFuZCBFbmNyeXB0IEN1c3RvbSBQYXNzd29yZDogY2lwaGVyUGFzc3dvcmRKc29uPSIrSlNPTi5zdHJpbmdpZnkoY2lwaGVyUGFzc3dvcmRKc29uKSk7CiAgICAgICAgKi8KICAgICAgCiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIkNvbGxlY3QgQW5kIEVuY3J5cHQgQ3VzdG9tIFBhc3N3b3JkOiBwYXNzd29yZD0iK0Jhc2U2NC5lbmNvZGUocGFzc3dvcmQpKTsKICAgICAgICBzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoaWRtQXR0ck5hbWUsIEJhc2U2NC5lbmNvZGUocGFzc3dvcmQpKTsKCiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIkNvbGxlY3QgQW5kIEVuY3J5cHQgQ3VzdG9tIFBhc3N3b3JkOiBmaW5pc2ggW291dGNvbWU9Ii5jb25jYXQob3V0Y29tZSkuY29uY2F0KCJdIikpOwogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKG91dGNvbWUpLmJ1aWxkKCk7CiAgICB9CgogICAgLyoKICAgICAqIFN0b3JlIGF0dHJpYnV0ZXMgaW4gc2hhcmVkIHN0YXRlIGZvciB1c2Ugd2l0aCB0aGUgQ3JlYXRlL1BhdGNoIE9iamVjdCBub2Rlcy4KICAgICAqLwogICAgZnVuY3Rpb24gc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7CiAgICAgICAgdmFyIHN0b3JhZ2UgPSBzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKICAgICAgICBpZiAoc3RvcmFnZSAmJiB2YWx1ZSkgewogICAgICAgICAgICBpZiAoc3RvcmFnZS5wdXQpIHsKICAgICAgICAgICAgICAgICAgc3RvcmFnZS5wdXQobmFtZSwgdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgc3RvcmFnZVtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICAgdmFyIG9iamVjdCA9IHsKICAgICAgICAgICAgICAgICAgbmFtZTogdmFsdWUKICAgICAgICAgICAgfTsKICAgICAgICAgICAgc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgb2JqZWN0KTsKICAgICAgICAgICAgLy9zaGFyZWRTdGF0ZS5wdXQoIm9iamVjdEF0dHJpYnV0ZXMiLCBKU09OLnBhcnNlKCJ7XCIiK25hbWUrIlwiOlwiIit2YWx1ZSsiXCJ9IikpOwogICAgICAgIH0KICAgIH0KfSgpKTsKLyogU0pDTCBpcyBvcGVuLiBZb3UgY2FuIHVzZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgYSBCU0QKbGljZW5zZSBvciB1bmRlciB0aGUgR05VIEdQTCwgdmVyc2lvbiAyLjAuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMi1DbGF1c2UKCkNvcHlyaWdodCAoYykgMjAwOS0yMDE1LCBFbWlseSBTdGFyaywgTWlrZSBIYW1idXJnIGFuZCBEYW4gQm9uZWggYXQKU3RhbmZvcmQgVW5pdmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCm1ldDoKCjEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cm5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cm5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCklTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRApUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCkhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEClRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwpORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9HUEwtMi4wCgpUaGUgU3RhbmZvcmQgSmF2YXNjcmlwdCBDcnlwdG8gTGlicmFyeSAoaG9zdGVkIGhlcmUgb24gR2l0SHViKSBpcyBhCnByb2plY3QgYnkgdGhlIFN0YW5mb3JkIENvbXB1dGVyIFNlY3VyaXR5IExhYiB0byBidWlsZCBhIHNlY3VyZSwKcG93ZXJmdWwsIGZhc3QsIHNtYWxsLCBlYXN5LXRvLXVzZSwgY3Jvc3MtYnJvd3NlciBsaWJyYXJ5IGZvcgpjcnlwdG9ncmFwaHkgaW4gSmF2YXNjcmlwdC4KCkNvcHlyaWdodCAoYykgMjAwOS0yMDE1LCBFbWlseSBTdGFyaywgTWlrZSBIYW1idXJnIGFuZCBEYW4gQm9uZWggYXQKU3RhbmZvcmQgVW5pdmVyc2l0eS4KClRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CnVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCm9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgpUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CldJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwp3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAo1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQSAqLwoKLyoKICogQmFzZTY0IGVuY29kZSAvIGRlY29kZQogKiAgaHR0cDovL3d3dy53ZWJ0b29sa2l0LmluZm8vCiAqIAogKiBFeGFtcGxlOgogKiBCYXNlNjQuZW5jb2RlKCdzb21lIHN0cmluZycpCiAqIEJhc2U2NC5kZWNvZGUoJ3NvbWUgZW5jb2RlZCBzdHJpbmcnKQogKi8=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"849ef5f3-7481-4607-a668-f0b5bf47db4c\",\"name\":\"Twilio IVR: Goodbye Message\",\"description\":\"Goodbye Message\",\"script\":\"LyogVHdpbGlvIElWUjogR29vZGJ5ZSBNZXNzYWdlCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAKICogRGVwZW5kaW5nIG9uIHRoZSBhbW91bnQgb2YgZGF0YSBjb2xsZWN0ZWQgdGhyb3VnaCBjYWxsYmFja3MgYW5kIGhvdyBtYW55IG9mIHRoZSBjYWxsUGFyYW1zCiAqIHlvdSBhY3RpdmF0ZSBiZWxvdywgeW91IHdpbGwgbmVlZCB0byBjaGFuZ2UgeW91ciBhdXRoZW50aWNhdGlvbiBzZXNzaW9uIGZyb20gSldUIHRvIENUUyBvcgogKiBNZW1vcnkuCiAqLwpsb2dnZXIud2FybmluZygiVHdpbGlvIElWUjogR29vZGJ5ZSBNZXNzYWdlOiBzdGFydCIpOwpvdXRjb21lID0gInRydWUiOwoKLyogQmVnaW4gQ29uZmlndXJhdGlvbgogKi8KCi8vIEJ1aWxkIG91dCB0aGUgZnVsbCBtZXNzYWdlCnZhciBtZXNzYWdlID0gIlRoYW5rIHlvdSBmb3IgY2FsbGluZyBGb3JnZVJvY2sgSWRlbnRpdHkgQ2xvdWQuIEdvb2RieWUhIjsKCi8qIEVuZCBDb25maWd1cmF0aW9uCiAqLwoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLAogICAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjawopOwogIAp3aXRoIChmcikgewogICAgICBpZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgICAgIHZhciBvdXRwdXQgPSBuZXcgVGV4dE91dHB1dENhbGxiYWNrKFRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwgbWVzc2FnZSk7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLnNlbmQob3V0cHV0KS5idWlsZCgpOwogICAgICB9IAogICAgICBlbHNlIHsKICAgICAgICBsb2dnZXIud2FybmluZygiVHdpbGlvIElWUjogR29vZGJ5ZSBNZXNzYWdlOiBmaW5pc2ggW291dGNvbWU9Ii5jb25jYXQob3V0Y29tZSkuY29uY2F0KCJdIikpOwogICAgICAgIGFjdGlvbiA9IEFjdGlvbi5nb1RvKG91dGNvbWUpLmJ1aWxkKCk7CiAgICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"fd560219-00ad-4763-9a29-f65aa9ecf776\",\"name\":\"Admin_GetIdPGroupsClaimConfig\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgaXMgdXNlZCB0byByZXRyaWV2ZSBvcHRpb25hbCBjdXN0b20gSWRQIGNvbmZpZ3VyYXRpb24gZnJvbSBJRE0gYXMgYW4gYWRtaW4KICogY29tcGxldGVzIGEgbG9naW4gam91cm5leS4gVGhpcyBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIgYW4gSWRQIGhhcyBiZWVuIHNlbGVjdGVkIHNvIHRoYXQKICogdGhlIGBzZWxlY3RlZElkcGAgZXhpc3RzIGluIHNoYXJlZCBzdGF0ZS4gVGhlIHJlc3VsdCB3aWxsIGJlIHN0b3JlZCBpbiBhIHNoYXJlZCBzdGF0ZQogKiBrZXkgb2YgYGlkcEN1c3RvbUNvbmZpZ2AuIFRoZSB2YWx1ZSB3aWxsIGJlIGBudWxsYCBpZiBubyBjb25maWcgd2FzIGZvdW5kIGluIElETS4KICovCgp2YXIgQU1fSU5URVJOQUxfVVJMID0gJ2h0dHA6Ly9hbS5mci1wbGF0Zm9ybTo4MC9hbSc7CnZhciBJRE1fSU5URVJOQUxfVVJMID0gJ2h0dHA6Ly9pZG0uZnItcGxhdGZvcm06ODAvb3BlbmlkbSc7CnZhciBSU0ZJTFRFUl9QUk9WSVNJT05JTkdfQ0xJRU5UX0lEID0gJ2lkbS1wcm92aXNpb25pbmcnOwp2YXIgUlNGSUxURVJfUFJPVklTSU9OSU5HX1NFQ1JFVCA9ICdES05LNUsybTVROTh0QlR0MHllaSc7Cgp2YXIgU0hBUkVEX1NUQVRFX0tFWSA9ICdpZHBDdXN0b21Db25maWcnOwp2YXIgVFhOX0lEX0hFQURFUiA9ICd4LWZvcmdlcm9jay10cmFuc2FjdGlvbmlkJzsKCi8vIEhlbHBlciBmb3IgcmV0dXJuaW5nIHRoZSByZXF1ZXN0IHRyYW5zYWN0aW9uIElECmZ1bmN0aW9uIGdldFRyYW5zSWQoKSB7CiAgdmFyIHRyYW5zSWRzID0gcmVxdWVzdEhlYWRlcnMuZ2V0KFRYTl9JRF9IRUFERVIpOwogIGlmICh0cmFuc0lkcykgewogICAgcmV0dXJuIGphdmEubGFuZy5TdHJpbmcodHJhbnNJZHMuZ2V0KDApKTsKICB9CiAgcmV0dXJuIG51bGw7Cn0KCi8vIFJldHJpZXZlcyBhbiBhY2Nlc3MgdG9rZW4gdXNpbmcgYSBjbGllbnQgY3JlZGVudGlhbHMgZ3JhbnQKZnVuY3Rpb24gZ2V0QWNjZXNzVG9rZW4odHhuSWQsIGNsaWVudElkLCBjbGllbnRTZWNyZXQsIHNjb3BlKSB7CiAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgamF2YS5sYW5nLlN0cmluZywKICAgIG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0LAogICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlLAogICAgb3JnLmZvcmdlcm9jay51dGlsLmVuY29kZS5CYXNlNjQKICApOwoKICB2YXIgYmFzaWNBdXRoQ3JlZHMgPSBmci5CYXNlNjQuZW5jb2RlKG5ldyBmci5TdHJpbmcoY2xpZW50SWQgKyAnOicgKyBjbGllbnRTZWNyZXQpLmdldEJ5dGVzKCdVVEYtOCcpKTsKCiAgdmFyIHJlcXVlc3QgPSBuZXcgZnIuUmVxdWVzdCgpOwogIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnYXV0aG9yaXphdGlvbicsICdCYXNpYyAnICsgYmFzaWNBdXRoQ3JlZHMpOwogIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpOwogIGlmICh0eG5JZCkgewogICAgcmVxdWVzdC5nZXRIZWFkZXJzKCkuYWRkKFRYTl9JRF9IRUFERVIsIHR4bklkKTsKICB9CiAgcmVxdWVzdAogICAgLnNldEVudGl0eSgnZ3JhbnRfdHlwZT1jbGllbnRfY3JlZGVudGlhbHMmc2NvcGU9JyArIHNjb3BlKQogICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAuc2V0VXJpKEFNX0lOVEVSTkFMX1VSTCArICcvb2F1dGgyL2FjY2Vzc190b2tlbicpOwoKICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwogIGlmIChyZXNwb25zZS5nZXRTdGF0dXMoKSA9PT0gb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlN0YXR1cy5PSykgewogICAgdmFyIHJlc3VsdCA9IEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogICAgbG9nZ2VyLm1lc3NhZ2UoJ2dvdCBhY2Nlc3MgdG9rZW4gZm9yIGNsaWVudCB7fScsIGNsaWVudElkKTsKICAgIHJldHVybiByZXN1bHQuYWNjZXNzX3Rva2VuOwogIH0KICAKICBsb2dnZXIuZXJyb3IoJ2ZhaWxlZCB0byBnZXQgYWNjZXNzIHRva2VuIGZvciBjbGllbnQge307IHJlY2VpdmVkIHN0YXR1cyB7fScsIGNsaWVudElkLCByZXNwb25zZS5nZXRTdGF0dXMoKSk7CiAgdGhyb3cgJ2ZhaWxlZCB0byBnZXQgYWNjZXNzIHRva2VuJzsKfQoKLy8gUmV0cmlldmVzIHRoZSBJZFAgY3VzdG9tIGNvbmZpZ3VyYXRpb24gZnJvbSBJRE0KZnVuY3Rpb24gZ2V0Q29uZmlnRnJvbUlETSh0eG5JZCwgYWNjZXNzVG9rZW4sIGlkcCkgewogIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0LAogICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlLAogICAgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZSwKICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLnBsYWNlaG9sZGVyLnN1YnN0aXR1dGlvbi5QbGFjZWhvbGRlclN1YnN0aXR1dGlvbiwKICAgIG9yZy5mb3JnZXJvY2suZ3VpY2UuY29yZS5JbmplY3RvckhvbGRlcgogICk7CgogIHZhciByZXF1ZXN0ID0gbmV3IGZyLlJlcXVlc3QoKTsKICByZXF1ZXN0LmdldEhlYWRlcnMoKS5hZGQoJ2F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBhY2Nlc3NUb2tlbik7CiAgaWYgKHR4bklkKSB7CiAgICByZXF1ZXN0LmdldEhlYWRlcnMoKS5hZGQoVFhOX0lEX0hFQURFUiwgdHhuSWQpOwogIH0KICByZXF1ZXN0CiAgICAuc2V0TWV0aG9kKCdHRVQnKQogICAgLnNldFVyaShJRE1fSU5URVJOQUxfVVJMICsgJy9jb25maWcvZmlkYy9mZWRlcmF0aW9uLScgKyBpZHApOwoKICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwogIGlmIChyZXNwb25zZS5nZXRTdGF0dXMoKSA9PT0gb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlN0YXR1cy5PSykgewogICAgdmFyIHJhd0NvbmZpZyA9IEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogICAgdmFyIHBsYWNlaG9sZGVyID0gZnIuSW5qZWN0b3JIb2xkZXIuZ2V0SW5zdGFuY2UoZnIuUGxhY2Vob2xkZXJTdWJzdGl0dXRpb24pOwogICAgdmFyIGZpbmFsQ29uZmlnID0gSlNPTi5wYXJzZShwbGFjZWhvbGRlci5zdWJzdGl0dXRlKGZyLkpzb25WYWx1ZS5qc29uKHJhd0NvbmZpZykpKTsKICAgIHJldHVybiBmaW5hbENvbmZpZzsKICB9IGVsc2UgaWYgKHJlc3BvbnNlLmdldFN0YXR1cygpID09PSBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuU3RhdHVzLk5PVF9GT1VORCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIAogIGxvZ2dlci5lcnJvcignZmFpbGVkIHRvIGdldCBncm91cHMgY2xhaW0gY29uZmlnIGZvciBJZFAge307IHJlY2VpdmVkIHN0YXR1cyB7fScsIGlkcCwgcmVzcG9uc2UuZ2V0U3RhdHVzKCkpOwogIHRocm93ICdmYWlsZWQgdG8gZ2V0IGdyb3VwcyBjbGFpbSBjb25maWcnOwp9CgooZnVuY3Rpb24gKCkgewogIHRyeSB7CiAgICB2YXIgaWRwID0gbm9kZVN0YXRlLmdldCgnc2VsZWN0ZWRJZHAnKTsKICAgIGlmICghaWRwLmlzU3RyaW5nKCkpIHsKICAgICAgdGhyb3cgJ3NlbGVjdGVkSWRwIG5vdCBmb3VuZCBpbiBzaGFyZWQgc3RhdGUnOwogICAgfQoKICAgIHZhciB0eG5JZCA9IGdldFRyYW5zSWQoKTsKICAgIHZhciBhY2Nlc3NUb2tlbiA9IGdldEFjY2Vzc1Rva2VuKHR4bklkLCBSU0ZJTFRFUl9QUk9WSVNJT05JTkdfQ0xJRU5UX0lELCBSU0ZJTFRFUl9QUk9WSVNJT05JTkdfU0VDUkVULCAnZnI6aWRtOionKTsKCiAgICB2YXIgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUlETSh0eG5JZCwgYWNjZXNzVG9rZW4sIGlkcC5hc1N0cmluZygpKQogICAgaWYgKGNvbmZpZykgewogICAgICBub2RlU3RhdGUucHV0U2hhcmVkKFNIQVJFRF9TVEFURV9LRVksIGNvbmZpZyk7CiAgICAgIGxvZ2dlci5tZXNzYWdlKCdmb3VuZCBncm91cHMgY2xhaW0gY29uZmlnIGZvciBJZFAge30nLCBpZHAuYXNTdHJpbmcoKSk7CiAgICB9IGVsc2UgewogICAgICBsb2dnZXIubWVzc2FnZSgnbm8gZ3JvdXBzIGNsYWltIGNvbmZpZyBmb3VuZCBmb3IgSWRQIHt9JywgaWRwLmFzU3RyaW5nKCkpOwogICAgfQogCiAgICBvdXRjb21lID0gJ1N1Y2Nlc3MnOwogIH0gY2F0Y2ggKGUpIHsKICAgIGxvZ2dlci5lcnJvcignZmFpbGVkIHRvIGdldCBmZWRlcmF0aW9uIGNvbmZpZyBmcm9tIElETToge30nLCBlKTsKICAgIG91dGNvbWUgPSAnRXJyb3InOwogIH0KfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"cfb208d8-241c-4953-b87b-bf59d1ab3d05\",\"name\":\"Admin_EnableEmailClaimCheck\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKbm9kZVN0YXRlLnB1dFNoYXJlZCgnY2hlY2tFbWFpbENsYWltJywgdHJ1ZSk7CgpvdXRjb21lID0gJ1RydWUnOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"01e1a3c0-038b-4c16-956a-6c9d89328cff\",\"name\":\"Authentication Tree Decision Node Script\",\"description\":\"Default global script for a scripted decision node\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKb3V0Y29tZSA9ICJ0cnVlIjs=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"355a8b7c-9e3c-40c1-a873-68127e483adf\",\"name\":\"KerberosLogin: Extract Username\",\"description\":\"Extract Username from request.\",\"script\":\"LyogS2VyYmVyb3NMb2dpbjogRXh0cmFjdCBVc2VybmFtZQogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICogLSBmYWxzZQogKi8KCmxvZ2dlci53YXJuaW5nKCJLZXJiZXJvc0xvZ2luOiBFeHRyYWN0IFVzZXJuYW1lOiBzdGFydCIpOwpvdXRjb21lID0gImZhbHNlIjsKCi8qCiAqIEJFR0lOIFNDUklQVCBDT05GSUdVUkFUSU9OCiAqLwp2YXIgVVNFUk5BTUVfSEVBREVSX05BTUUgPSAiWC1PcGVuQU0tVXNlcm5hbWUiOwovKgogKiBFTkQgU0NSSVBUIENPTkZJR1VSQVRJT04KICovCgp2YXIgdXNlcm5hbWUgPSBnZXRIZWFkZXIoVVNFUk5BTUVfSEVBREVSX05BTUUpOwppZiAodXNlcm5hbWUpIHsKICAgIAogICAgICBvdXRjb21lID0gInRydWUiOwogICAgc2hhcmVkU3RhdGUucHV0KCJ1c2VybmFtZSIsIHVzZXJuYW1lKTsKICAgIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgidXNlck5hbWUiLCB1c2VybmFtZSk7Cn0KCmxvZ2dlci53YXJuaW5nKCJLZXJiZXJvc0xvZ2luOiBFeHRyYWN0IFVzZXJuYW1lOiBmaW5pc2ggW291dGNvbWU9Ii5jb25jYXQob3V0Y29tZSkuY29uY2F0KCJdIikpOwoKLyoKICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBoZWFkZXIKICovCmZ1bmN0aW9uIGdldEhlYWRlcihoZWFkZXJOYW1lKSB7CiAgICAgIGlmIChyZXF1ZXN0SGVhZGVycy5nZXQoaGVhZGVyTmFtZSkgJiYgcmVxdWVzdEhlYWRlcnMuZ2V0KGhlYWRlck5hbWUpLmdldCgwKSkgewogICAgICAgIHJldHVybiByZXF1ZXN0SGVhZGVycy5nZXQoaGVhZGVyTmFtZSkuZ2V0KDApLnRvU3RyaW5nKCk7CiAgICB9CiAgICAgIHJldHVybiBudWxsOwp9CgovKgogKiBTdG9yZSBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAqLwpmdW5jdGlvbiBzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHsKICAgICAgIHZhciBzdG9yYWdlID0gc2hhcmVkU3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIik7CiAgICBpZiAoc3RvcmFnZSAmJiB2YWx1ZSkgewogICAgICAgICAgaWYgKHN0b3JhZ2UucHV0KSB7CiAgICAgICAgICAgICAgc3RvcmFnZS5wdXQobmFtZSwgdmFsdWUpOwogICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHN0b3JhZ2VbbmFtZV0gPSB2YWx1ZTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIGlmICh2YWx1ZSkgewogICAgICAgIHNoYXJlZFN0YXRlLnB1dCgib2JqZWN0QXR0cmlidXRlcyIsIEpTT04ucGFyc2UoIntcIiIrbmFtZSsiXCI6XCIiK3ZhbHVlKyJcIn0iKSk7CiAgICB9Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"8e03eb43-ed5d-4c12-9e15-2051cc9be578\",\"name\":\"CopySAMLDataToObjectAttributes\",\"description\":\"Copy SAML Data To ObjectAttributes\",\"script\":\"LyogQ29weVNBTUxEYXRhVG9PYmplY3RBdHRyaWJ1dGVzCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIENvcHkgU0FNTCBEYXRhIFRvIE9iamVjdEF0dHJpYnV0ZXMuCiAqIAogKiBUaGlzIHNjcmlwdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICovCm91dGNvbWUgPSAidHJ1ZSI7CmlmIChzaGFyZWRTdGF0ZS5nZXQoInVzZXJJbmZvIikpIHsKICAgIGlmIChzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKSkgewogICAgICAgICAgc2hhcmVkU3RhdGUucmVtb3ZlKCJvYmplY3RBdHRyaWJ1dGVzIik7CiAgICB9CiAgICB2YXIgdXNlck5hbWU9bnVsbCxnaXZlbk5hbWU9bnVsbCxzbj1udWxsLG1haWw9bnVsbCx0ZWxlcGhvbmVOdW1iZXI9bnVsbCxyb2xlcz1udWxsOwoKICAgIHRyeSB7IHVzZXJOYW1lPXNoYXJlZFN0YXRlLmdldCgidXNlckluZm8iKS5nZXQoInVzZXJOYW1lcyIpLmdldCgidWlkIikuZ2V0KDApLnRvU3RyaW5nKCk7IH0gY2F0Y2ggKGUpIHt9CiAgICB0cnkgeyBnaXZlbk5hbWU9c2hhcmVkU3RhdGUuZ2V0KCJ1c2VySW5mbyIpLmdldCgiYXR0cmlidXRlcyIpLmdldCgiZ2l2ZW5OYW1lIikuZ2V0KDApLnRvU3RyaW5nKCk7IH0gY2F0Y2ggKGUpIHt9CiAgICB0cnkgeyBzbj1zaGFyZWRTdGF0ZS5nZXQoInVzZXJJbmZvIikuZ2V0KCJhdHRyaWJ1dGVzIikuZ2V0KCJzbiIpLmdldCgwKS50b1N0cmluZygpOyB9IGNhdGNoIChlKSB7fQogICAgdHJ5IHsgbWFpbD1zaGFyZWRTdGF0ZS5nZXQoInVzZXJJbmZvIikuZ2V0KCJhdHRyaWJ1dGVzIikuZ2V0KCJtYWlsIikuZ2V0KDApLnRvU3RyaW5nKCk7IH0gY2F0Y2ggKGUpIHt9CiAgICB0cnkgeyB0ZWxlcGhvbmVOdW1iZXI9c2hhcmVkU3RhdGUuZ2V0KCJ1c2VySW5mbyIpLmdldCgiYXR0cmlidXRlcyIpLmdldCgidGVsZXBob25lTnVtYmVyIikuZ2V0KDApLnRvU3RyaW5nKCk7IH0gY2F0Y2ggKGUpIHt9CiAgICAvL3RyeSB7IHJvbGVzPXNoYXJlZFN0YXRlLmdldCgidXNlckluZm8iKS5nZXQoImF0dHJpYnV0ZXMiKS5nZXQoInJvbGVzIikuZ2V0KDApLnRvU3RyaW5nKCk7IH0gY2F0Y2ggKGUpIHt9CiAgICB0cnkgeyByb2xlcz1zaGFyZWRTdGF0ZS5nZXQoInVzZXJJbmZvIikuZ2V0KCJhdHRyaWJ1dGVzIikuZ2V0KCJyb2xlcyIpLnRvQXJyYXkoKS5qb2luKCJ8Iik7IH0gY2F0Y2ggKGUpIHt9CgogICAgc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgeyJ1c2VyTmFtZSI6dXNlck5hbWUsImdpdmVuTmFtZSI6Z2l2ZW5OYW1lLCJzbiI6c24sIm1haWwiOm1haWwsInRlbGVwaG9uZU51bWJlciI6dGVsZXBob25lTnVtYmVyLCJyb2xlcyI6cm9sZXN9KTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"8862ca8f-7770-4af5-a888-ac0df0947f36\",\"name\":\"LinkedIn Profile Normalization\",\"description\":\"Normalizes raw profile data from LinkedIn\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5maXJzdE5hbWUubG9jYWxpemVkLmdldCgwKSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3ROYW1lLmxvY2FsaXplZC5nZXQoMCkpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucHJvZmlsZVBpY3R1cmUuZGlzcGxheUltYWdlKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVsZW1lbnRzLmdldCgwKS5nZXQoImhhbmRsZX4iKS5lbWFpbEFkZHJlc3MpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZWxlbWVudHMuZ2V0KDApLmdldCgiaGFuZGxlfiIpLmVtYWlsQWRkcmVzcykpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"7fb962a5-9f20-41d3-a077-b424a29c1198\",\"name\":\"IPv4 CIDR Rules Engine\",\"description\":\"Evaluate IPv4 CIDR access rules from \\\"esv-ipv4-cidr-access-rules\\\".\",\"script\":\"LyogSVB2NCBDSURSIFJ1bGVzIEVuZ2luZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tLCBqdXN0aW4uY2hpbkBmb3JnZXJvY2suY29tCiAqIAogKiBFdmFsdWF0ZSBJUHY0IENJRFIgYWNjZXNzIHJ1bGVzIGZyb20gImVzdi1pcHY0LWNpZHItYWNjZXNzLXJ1bGVzIi4gCiAqIEFjY2VzcyBydWxlcyBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CiAqIHsKICogICAiYWxsb3ciOiBbCiAqICAgICAiMTQwLjExOC4wLjAvMTYiLAogKiAgICAgIjExMC4zNS4wLjAvMTYiLAogKiAgICAgIjEzMS4yNi4wLjAvMTYiLAogKiAgICAgIjkyLjYxLjIxLjE1My8zMiIKICogICBdCiAqIH0KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gYWxsb3cKICogLSBkZW55CiAqLwooZnVuY3Rpb24gKCkgewogIG91dGNvbWUgPSAiZGVueSI7CiAgCiAgdmFyIHJ1bGVzID0gSlNPTi5wYXJzZShzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi5pcHY0LmNpZHIuYWNjZXNzLnJ1bGVzIikpOwogIHZhciBhbGxvdyA9IHJ1bGVzWydhbGxvdyddOwoKICAvKgogICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgaGVhZGVyCiAgICovCiAgZnVuY3Rpb24gZ2V0SGVhZGVyKGhlYWRlck5hbWUpIHsKICAgIHJldHVybiByZXF1ZXN0SGVhZGVycy5nZXQoaGVhZGVyTmFtZSkuZ2V0KDApOwogIH0KCiAgLyoKICAgKiBSZXR1cm5zIHRoZSBjbGllbnQncyBJUCBhZGRyZXNzCiAgICovCiAgZnVuY3Rpb24gZ2V0Q2xpZW50SVBBZGRyZXNzKCkgewogICAgcmV0dXJuIGdldEhlYWRlcigieC1mb3J3YXJkZWQtZm9yIikuc3BsaXQoJywnKVswXTsKICB9CgogIGZ1bmN0aW9uIElQbnVtYmVyKElQYWRkcmVzcykgewogICAgdmFyIGlwID0gSVBhZGRyZXNzLm1hdGNoKC9eKFxkKylcLihcZCspXC4oXGQrKVwuKFxkKykkLyk7CiAgICBpZiAoaXApIHsKICAgICAgcmV0dXJuICgraXBbMV0gPDwgMjQpICsgKCtpcFsyXSA8PCAxNikgKyAoK2lwWzNdIDw8IDgpICsgK2lwWzRdOwogICAgfQogICAgLy8gZWxzZSAuLi4gPwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBmdW5jdGlvbiBJUG1hc2sobWFza1NpemUpIHsKICAgIHJldHVybiAtMSA8PCAoMzIgLSBtYXNrU2l6ZSk7CiAgfQoKICBmdW5jdGlvbiBpc0FsbG93ZWQoaXApIHsKICAgIHZhciBhbGxvd2VkID0gZmFsc2U7CiAgICBhbGxvdy5mb3JFYWNoKChjaWRyKSA9PiB7CiAgICAgIGlmICgKICAgICAgICAoSVBudW1iZXIoaXApICYgSVBtYXNrKGNpZHIuc3BsaXQoJy8nKVsxXSkpID09CiAgICAgICAgSVBudW1iZXIoY2lkci5zcGxpdCgnLycpWzBdKQogICAgICApIHsKICAgICAgICBhbGxvd2VkID0gdHJ1ZTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gYWxsb3dlZDsKICB9CiAgCiAgaWYgKGlzQWxsb3dlZChnZXRDbGllbnRJUEFkZHJlc3MoKSkpIHsKICAgIG91dGNvbWUgPSAiYWxsb3ciOwogIH0KfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"1244e639-4a31-401d-ab61-d75133d8dc9e\",\"name\":\"Instagram Profile Normalization\",\"description\":\"Normalizes raw profile data from Instagram\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"71e3b4ae-52c1-49d6-98fd-c279f43ea3ce\",\"name\":\"AAcustomLogic\",\"description\":\"null\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwpvdXRjb21lID0gImZhbHNlIjsKdmFyIHByZWRpY3Rpb25SZXN1bHQgPSBzaGFyZWRTdGF0ZS5nZXQoInByZWRpY3Rpb25SZXN1bHQiKTsKdmFyIHByZWRpY3Rpb25SZXN1bHRTdHJpbmcgPSBwcmVkaWN0aW9uUmVzdWx0LnRvU3RyaW5nKCk7Cgp2YXIgaXNfaW1wb3NzaWJsZV90cmF2ZWwgPSAwOwp2YXIgaXNfY3JlZGVudGlhbF9zdHVmZmluZyA9IDA7CnZhciBpc19hdXRvbWF0ZWRfdXNlcl9hZ2VudCA9IDA7CnZhciBpc19icnV0ZV9mb3JjZSA9IDA7CnZhciBpc19zdXNwaWNpb3VzX2lwID0gMDsKCnZhciBzaWduYWxfY291bnQgPSAwOwp2YXIgcG9zaXRpb24gPSAwOwoKcG9zaXRpb24gPSBwcmVkaWN0aW9uUmVzdWx0U3RyaW5nLnNlYXJjaCgiaXNfaW1wb3NzaWJsZV90cmF2ZWw9ZmFsc2UiKTsKaWYocG9zaXRpb248MCkKewogIHNpZ25hbF9jb3VudCsrOwogIGlzX2ltcG9zc2libGVfdHJhdmVsPTE7Cn0KcG9zaXRpb24gPSBwcmVkaWN0aW9uUmVzdWx0U3RyaW5nLnNlYXJjaCgiaXNfY3JlZGVudGlhbF9zdHVmZmluZz1mYWxzZSIpOwppZihwb3NpdGlvbjwwKQp7CiAgc2lnbmFsX2NvdW50Kys7CiAgaXNfY3JlZGVudGlhbF9zdHVmZmluZz0xOwp9CnBvc2l0aW9uID0gcHJlZGljdGlvblJlc3VsdFN0cmluZy5zZWFyY2goImlzX2F1dG9tYXRlZF91c2VyX2FnZW50PWZhbHNlIik7CmlmKHBvc2l0aW9uPDApCnsKICBzaWduYWxfY291bnQrKzsKICBpc19hdXRvbWF0ZWRfdXNlcl9hZ2VudD0xOwp9CnBvc2l0aW9uID0gcHJlZGljdGlvblJlc3VsdFN0cmluZy5zZWFyY2goImlzX2JydXRlX2ZvcmNlPWZhbHNlIik7CmlmKHBvc2l0aW9uPDApCnsKICBzaWduYWxfY291bnQrKzsKICBpc19icnV0ZV9mb3JjZT0xOwp9CnBvc2l0aW9uID0gcHJlZGljdGlvblJlc3VsdFN0cmluZy5zZWFyY2goImlzX3N1c3BpY2lvdXNfaXA9ZmFsc2UiKTsKaWYocG9zaXRpb248MCkKewogIHNpZ25hbF9jb3VudCsrOwogIGlzX3N1c3BpY2lvdXNfaXA9MTsKfQoKc2hhcmVkU3RhdGUucHV0KCJkZWJ1Zy1zaWduYWwtY291bnQiLHNpZ25hbF9jb3VudCk7CmlmKHNpZ25hbF9jb3VudD4xKQp7CiAJb3V0Y29tZT0idHJ1ZSI7IAp9CgoK\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"199405e4-050e-4f2a-87d1-d9125f74a8df\",\"name\":\"Reset Theme\",\"description\":\"Reset theme to what's preserved in shared state variable \\\"theme-id\\\" or to default theme.\",\"script\":\"LyogUmVzZXQgVGhlbWUKICogCiAqIFJlc2V0IHRoZW1lIHRvIHdoYXQncyBwcmVzZXJ2ZWQgaW4gc2hhcmVkIHN0YXRlIHZhcmlhYmxlICJ0aGVtZUlkIiBvciB0byBkZWZhdWx0IHRoZW1lLgogKiAKICogVGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgcGFyYW1ldHJpemVkIQogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKi8KKGZ1bmN0aW9uICgpIHsKICAgICAgLyogQmVnaW4gU2NyaXB0IENvbmZpZ3VyYXRpb24gKi8KICAgICAgdmFyIGRlZmF1bHRUaGVtZSA9ICJFeHBhbnNlIjsKICAgICAgLyogRW5kIFNjcmlwdCBDb25maWd1cmF0aW9uICovCiAgICAgIAogICAgICBvdXRjb21lID0gInRydWUiOwogICAgICAKICAgICAgdmFyIHRoZW1lID0gZGVmYXVsdFRoZW1lOwogICAgICBpZiAoc2hhcmVkU3RhdGUuZ2V0KCJ0aGVtZUlkIikgJiYgIiIrc2hhcmVkU3RhdGUuZ2V0KCJ0aGVtZUlkIikgIT09ICIiKSB7CiAgICAgICAgICB0aGVtZSA9IHNoYXJlZFN0YXRlLmdldCgidGhlbWVJZCIpOwogICAgfQoKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuUG9sbGluZ1dhaXRDYWxsYmFjawogICAgKQogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICB2YXIgc3RhZ2UgPSAidGhlbWVJZD0iK3RoZW1lOwogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKAogICAgICAgICAgICAgIG5ldyBmci5Qb2xsaW5nV2FpdENhbGxiYWNrKCIxMDAiLCAiUGxlYXNlIHdhaXQgLi4uIikKICAgICAgICApLndpdGhTdGFnZShzdGFnZSkuYnVpbGQoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbyhvdXRjb21lKS5idWlsZCgpOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"6dfc6de4-64cb-4d47-8269-6c5ced44344d\",\"name\":\"Admin_IsInvited\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaWYgKHNoYXJlZFN0YXRlLmdldCgnaW52aXRlZCcpID09IHRydWUpIHsKICBvdXRjb21lID0gJ1RydWUnOwp9IGVsc2UgewogIG91dGNvbWUgPSAnRmFsc2UnOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"87497360-d89c-412a-a99e-c8a9bec465cc\",\"name\":\"ipstack\",\"description\":\"null\",\"script\":\"bG9nZ2VyLndhcm5pbmcoImlwc3RhY2s6IHN0YXJ0Iik7CgpvdXRjb21lID0gInVua25vd24iOwoKdmFyIGlwID0gZ2V0Q2xpZW50SVBBZGRyZXNzKCk7CmxvZ2dlci53YXJuaW5nKCJpcHN0YWNrOiBpcD0iLmNvbmNhdChpcCkpOwoKaWYgKGlwKSB7CgogICAgICAvLyBpcHN0YWNrIEFQSSBDb25maWd1cmF0aW9uCiAgICB2YXIgSVBTVEFDS19BQ0NFU1NfS0VZID0gImVmYzJmOGQ5Nzk2YjlmZWZmNWYwMzM1OWQ2ZmJjY2M5IjsKICAgIHZhciBJUFNUQUNLX0FQSV9VUkkgPSAiaHR0cDovL2FwaS5pcHN0YWNrLmNvbS8iLmNvbmNhdChpcCkuY29uY2F0KCI/YWNjZXNzX2tleT0iKS5jb25jYXQoSVBTVEFDS19BQ0NFU1NfS0VZKTsgICAgCgogICAgdmFyIHJlcXVlc3QgPSBuZXcgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QoKTsKICAgIHJlcXVlc3Quc2V0TWV0aG9kKCdHRVQnKTsKICAgIHJlcXVlc3Quc2V0VXJpKElQU1RBQ0tfQVBJX1VSSSk7CgogICAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3QpLmdldCgpOwogICAgdmFyIHJlc3VsdCA9IEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogICAgbG9nZ2VyLndhcm5pbmcoImlwc3RhY2s6IEpTT04gcmVzdWx0OiAiICsgSlNPTi5zdHJpbmdpZnkocmVzdWx0KSk7CgogICAgICAvKgogICAgewogICAgICAgICJpcCI6ICI5OS43Mi4yOC4xODIiLAogICAgICAgICJ0eXBlIjogImlwdjQiLAogICAgICAgICJjb250aW5lbnRfY29kZSI6ICJOQSIsCiAgICAgICAgImNvbnRpbmVudF9uYW1lIjogIk5vcnRoIEFtZXJpY2EiLAogICAgICAgICJjb3VudHJ5X2NvZGUiOiAiVVMiLAogICAgICAgICJjb3VudHJ5X25hbWUiOiAiVW5pdGVkIFN0YXRlcyIsCiAgICAgICAgInJlZ2lvbl9jb2RlIjogIlRYIiwKICAgICAgICAicmVnaW9uX25hbWUiOiAiVGV4YXMiLAogICAgICAgICJjaXR5IjogIkdlb3JnZXRvd24iLAogICAgICAgICJ6aXAiOiAiNzg2MjYiLAogICAgICAgICJsYXRpdHVkZSI6IDMwLjU5MjUwMDY4NjY0NTUwOCwKICAgICAgICAibG9uZ2l0dWRlIjogLTk3LjY2NzEwNjYyODQxNzk3LAogICAgICAgICJsb2NhdGlvbiI6IHsKICAgICAgICAgICAgImdlb25hbWVfaWQiOiA0NjkzMzQyLAogICAgICAgICAgICAiY2FwaXRhbCI6ICJXYXNoaW5ndG9uIEQuQy4iLAogICAgICAgICAgICAibGFuZ3VhZ2VzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJjb2RlIjogImVuIiwKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJFbmdsaXNoIiwKICAgICAgICAgICAgICAgICAgICAibmF0aXZlIjogIkVuZ2xpc2giCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJjb3VudHJ5X2ZsYWciOiAiaHR0cDovL2Fzc2V0cy5pcHN0YWNrLmNvbS9mbGFncy91cy5zdmciLAogICAgICAgICAgICAiY291bnRyeV9mbGFnX2Vtb2ppIjogIvCfh7rwn4e4IiwKICAgICAgICAgICAgImNvdW50cnlfZmxhZ19lbW9qaV91bmljb2RlIjogIlUrMUYxRkEgVSsxRjFGOCIsCiAgICAgICAgICAgICJjYWxsaW5nX2NvZGUiOiAiMSIsCiAgICAgICAgICAgICJpc19ldSI6IGZhbHNlCiAgICAgICAgfQogICAgfQogICAgKi8KICAKICAgICAgLy8gcHJlc2VydmUgcmVzdWx0IGluIHRyYW5zaWVudCBzdGF0ZQogICAgICB0cmFuc2llbnRTdGF0ZS5wdXQoImlwc3RhY2siLCBKU09OLnN0cmluZ2lmeShyZXN1bHQpKTsKCiAgICBzd2l0Y2gocmVzdWx0LmNvdW50cnlfY29kZSkgewogICAgICBjYXNlICJDQSI6CiAgICAgICAgb3V0Y29tZSA9IHJlc3VsdC5jb3VudHJ5X2NvZGU7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIlVLIjoKICAgICAgICBvdXRjb21lID0gcmVzdWx0LmNvdW50cnlfY29kZTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiVVMiOgogICAgICAgIG91dGNvbWUgPSByZXN1bHQuY291bnRyeV9jb2RlOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIG91dGNvbWUgPSAib3RoZXIiOwogICAgfQoKfSBlbHNlIHsKICAgICAgbG9nZ2VyLmVycm9yKCJpcHN0YWNrOiBubyBjbGllbnQgaXAhIik7Cn0KCmxvZ2dlci53YXJuaW5nKCJpcHN0YWNrOiBmaW5pc2giKTsKCiAvKgogICogISEhIEFTU1VNRVMgSUQgQ0xPVUQgISEhCiAgKgogICogUmV0dXJucyB0aGUgY2xpZW50J3MgSVAgYWRkcmVzcwogICovCiBmdW5jdGlvbiBnZXRDbGllbnRJUEFkZHJlc3MoKSB7CiAgICByZXR1cm4gcmVxdWVzdEhlYWRlcnMuZ2V0KCJ4LWZvcndhcmRlZC1mb3IiKS5nZXQoMCkuc3BsaXQoJywnKVswXTsKIH0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"8bccfdd0-5556-4562-a1ca-6d725a449556\",\"name\":\"display country\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2sKKTsKICAKb3V0Y29tZSA9ICJ0cnVlIjsKCnZhciBjb3VudHJ5ID0gInVua25vd24iOwppZiAodHJhbnNpZW50U3RhdGUuZ2V0KCJpcHN0YWNrIikpIHsKICAgIGNvdW50cnkgPSBKU09OLnBhcnNlKHRyYW5zaWVudFN0YXRlLmdldCgiaXBzdGFjayIpKS5jb3VudHJ5X2NvZGU7Cn0KICAKd2l0aCAoZnIpIHsKICBpZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgdmFyIGNhbGxiYWNrID0gbmV3IFRleHRPdXRwdXRDYWxsYmFjayhUZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sICJDb3VudHJ5OiAiLmNvbmNhdChjb3VudHJ5KSk7CiAgICBhY3Rpb24gPSBBY3Rpb24uc2VuZChjYWxsYmFjaykuYnVpbGQoKTsKICB9IGVsc2UgewogICAgYWN0aW9uID0gQWN0aW9uLmdvVG8oInRydWUiKS5idWlsZCgpOwogIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"91d197de-5916-4dca-83b5-9a4df26e7159\",\"name\":\"WordPress Profile Normalization\",\"description\":\"Normalizes raw profile data from WordPress\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJuYW1lKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5hdmF0YXJfVVJMKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"e9c9d940-30d9-4a0c-a834-7de69a0600cf\",\"name\":\"Admin_CollectUsernameOrEmail\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUsCiAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5OYW1lQ2FsbGJhY2ssCiAgamF2YS51dGlsLkhhc2hNYXAKKTsKCndpdGggKGZyKSB7CiAgdHJ5IHsKICAgIAogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgCiAgICAgIGFjdGlvbiA9IEFjdGlvbi5zZW5kKG5ldyBOYW1lQ2FsbGJhY2soJ1VzZXJuYW1lIG9yIGVtYWlsIGFkZHJlc3MnKSkuYnVpbGQoKTsKICAgICAgCiAgICB9IGVsc2UgewoKICAgICAgLy8gSWYgYSB2YWx1ZSBpcyBwcm92aWRlZCwgc3RvcmUgaXQgYXMgdXNlcm5hbWUgYW5kIGFuIG9iamVjdCBhdHRyaWJ1dGUKICAgICAgdmFyIGNhbGxiYWNrID0gY2FsbGJhY2tzLml0ZXJhdG9yKCkubmV4dCgpOwogICAgICB2YXIgbmFtZSA9IGNhbGxiYWNrLmdldE5hbWUoKS50cmltKCk7CiAgICAgIGlmIChuYW1lKSB7CiAgICAgICAgdmFyIG9iakF0dHJzID0gc2hhcmVkU3RhdGUuZ2V0KCdvYmplY3RBdHRyaWJ1dGVzJykgfHwgbmV3IEhhc2hNYXAoKTsKICAgICAgICBvYmpBdHRycy5wdXQoJ21haWwnLCBuYW1lKTsKICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoJ3VzZXJuYW1lJywgbmFtZSk7CiAgICAgICAgc2hhcmVkU3RhdGUucHV0KCdvYmplY3RBdHRyaWJ1dGVzJywgb2JqQXR0cnMpOwoKICAgICAgICBhY3Rpb24gPSBBY3Rpb24uZ29UbygnQ29sbGVjdGVkJykuYnVpbGQoKTsKICAgICAgfQogICAgICAKICAgIH0KICAgIAogIH0gY2F0Y2ggKGUpIHsKICAgIAogICAgbG9nZ2VyLmVycm9yKCdBZG1pbl9Db2xsZWN0VXNlcm5hbWVPckVtYWlsOiB7fScsIGUpOwogICAgYWN0aW9uID0gQWN0aW9uLmdvVG8oJ0Vycm9yJykuYnVpbGQoKTsKICAgIAogIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"e232cff3-2460-47cd-80b2-36c86c0d0f06\",\"name\":\"Alpha endUserUIClient OAuth2 Access Token Modification Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBpZiAoc2NvcGVzLmNvbnRhaW5zKCdmcjphdXRvYWNjZXNzOionKSB8fCBzY29wZXMuY29udGFpbnMoJ2ZyOmlnYToqJykpIHsKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgY29tLnN1bi5pZGVudGl0eS5pZG0uSWRUeXBlCiAgICApOwogICAgdmFyIGdyb3VwcyA9IFtdOwogICAgaWRlbnRpdHkuZ2V0TWVtYmVyc2hpcHMoZnIuSWRUeXBlLkdST1VQKS50b0FycmF5KCkuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXApIHsKICAgICAgZ3JvdXBzLnB1c2goZ3JvdXAuZ2V0QXR0cmlidXRlKCdjbicpLnRvQXJyYXkoKVswXSk7CiAgICB9KTsKICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdncm91cHMnLCBncm91cHMpOwogIH0KfSgpKTsK\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"10643e95-873a-4ec0-b713-a7f56760d179\",\"name\":\"FrodoTestScript4\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"d6f3befb-c73a-437e-b02a-66d9b4c93f8b\",\"name\":\"Impersonate: Extract Actors And Become Impersonator\",\"description\":\"Extract impersonatee and impersonator from headers and become impersonator.\",\"script\":\"LyogSW1wZXJzb25hdGU6IEV4dHJhY3QgQWN0b3JzIEFuZCBCZWNvbWUgSW1wZXJzb25hdG9yCiAqCiAqIEV4dHJhY3QgaW1wZXJzb25hdGVlIGFuZCBpbXBlcnNvbmF0b3IgZnJvbSBoZWFkZXJzIGFuZCBiZWNvbWUgaW1wZXJzb25hdGVlLgogKgogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAtIGZhbHNlCiAqLwoKKGZ1bmN0aW9uICgpIHsKICAgIGxvZ2dlci53YXJuaW5nKCJJbXBlcnNvbmF0ZTogRXh0cmFjdCBBY3RvcnM6IHN0YXJ0Iik7CiAgICBvdXRjb21lID0gImZhbHNlIjsKCiAgICAvKgogICAgICogQkVHSU4gU0NSSVBUIENPTkZJR1VSQVRJT04KICAgICAqLwogICAgdmFyIElNUEVSU09OQVRFRV9IRUFERVJfTkFNRSA9ICJYLUltcGVyc29uYXRlZSI7CiAgICB2YXIgSU1QRVJTT05BVE9SX0hFQURFUl9OQU1FID0gIlgtSW1wZXJzb25hdG9yIjsKICAgIC8qCiAgICAgKiBFTkQgU0NSSVBUIENPTkZJR1VSQVRJT04KICAgICAqLwoKICAgIHZhciBpbXBlcnNvbmF0ZWUgPSBnZXRIZWFkZXIoSU1QRVJTT05BVEVFX0hFQURFUl9OQU1FKTsKICAgIHZhciBpbXBlcnNvbmF0b3IgPSBnZXRIZWFkZXIoSU1QRVJTT05BVE9SX0hFQURFUl9OQU1FKTsKICAgIGlmIChpbXBlcnNvbmF0ZWUgJiYgaW1wZXJzb25hdG9yKSB7CiAgICAgICAgb3V0Y29tZSA9ICJ0cnVlIjsKICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoImltcGVyc29uYXRlZSIsIGltcGVyc29uYXRlZSk7CiAgICAgICAgc2hhcmVkU3RhdGUucHV0KCJpbXBlcnNvbmF0b3IiLCBpbXBlcnNvbmF0b3IpOwogICAgICAgIHNoYXJlZFN0YXRlLnB1dCgidXNlcm5hbWUiLCBpbXBlcnNvbmF0b3IpOwogICAgICAgIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgidXNlck5hbWUiLCBpbXBlcnNvbmF0b3IpOwogICAgfQoKICAgIGxvZ2dlci53YXJuaW5nKCJJbXBlcnNvbmF0ZTogRXh0cmFjdCBBY3RvcnM6IGZpbmlzaCBbb3V0Y29tZT0iLmNvbmNhdChvdXRjb21lKS5jb25jYXQoIl0iKSk7CgogICAgLyoKICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgaGVhZGVyCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEhlYWRlcihoZWFkZXJOYW1lKSB7CiAgICAgICAgaWYgKHJlcXVlc3RIZWFkZXJzLmdldChoZWFkZXJOYW1lKSAmJiByZXF1ZXN0SGVhZGVycy5nZXQoaGVhZGVyTmFtZSkuZ2V0KDApKSB7CiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0SGVhZGVycy5nZXQoaGVhZGVyTmFtZSkuZ2V0KDApLnRvU3RyaW5nKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qCiAgICAgKiBTdG9yZSBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgewogICAgICAgICB2YXIgc3RvcmFnZSA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwogICAgICAgIGlmIChzdG9yYWdlICYmIHZhbHVlKSB7CiAgICAgICAgICAgIGlmIChzdG9yYWdlLnB1dCkgewogICAgICAgICAgICAgICAgICBzdG9yYWdlLnB1dChuYW1lLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzdG9yYWdlW25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAodmFsdWUpIHsKICAgICAgICAgICAgc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgSlNPTi5wYXJzZSgie1wiIituYW1lKyJcIjpcIiIrdmFsdWUrIlwifSIpKTsKICAgICAgICB9CiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"58c824ae-84ed-4724-82cd-db128fc3f6c\",\"name\":\"Normalized Profile to Managed User\",\"description\":\"Converts a normalized social profile into a managed user\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgbWFuYWdlZFVzZXIgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlck5hbWUiLCBub3JtYWxpemVkUHJvZmlsZS51c2VybmFtZSkpKQoKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgicG9zdGFsQWRkcmVzcyIsIG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MpCmlmIChub3JtYWxpemVkUHJvZmlsZS5hZGRyZXNzTG9jYWxpdHkuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgiY2l0eSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NMb2NhbGl0eSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24uaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgic3RhdGVQcm92aW5jZSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24pCmlmIChub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInBvc3RhbENvZGUiLCBub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlKQppZiAobm9ybWFsaXplZFByb2ZpbGUuY291bnRyeS5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KCJjb3VudHJ5Iiwgbm9ybWFsaXplZFByb2ZpbGUuY291bnRyeSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBob25lLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInRlbGVwaG9uZU51bWJlciIsIG5vcm1hbGl6ZWRQcm9maWxlLnBob25lKQoKLy8gaWYgdGhlIGdpdmVuTmFtZSBhbmQgZmFtaWx5TmFtZSBpcyBudWxsIG9yIGVtcHR5Ci8vIHRoZW4gYWRkIGEgYm9vbGVhbiBmbGFnIHRvIHRoZSBzaGFyZWQgc3RhdGUgdG8gaW5kaWNhdGUgbmFtZXMgYXJlIG5vdCBwcmVzZW50Ci8vIHRoaXMgY291bGQgYmUgdXNlZCBlbHNld2hlcmUKLy8gZm9yIGVnLiB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gYSBzY3JpcHRlZCBkZWNpc2lvbiBub2RlIHRvIGJ5LXBhc3MgcGF0Y2hpbmcKLy8gdGhlIHVzZXIgb2JqZWN0IHdpdGggYmxhbmsgdmFsdWVzIHdoZW4gZ2l2ZW5OYW1lICBhbmQgZmFtaWx5TmFtZSBpcyBub3QgcHJlc2VudApib29sZWFuIG5vR2l2ZW5OYW1lID0gbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmFzU3RyaW5nKCk/LnRyaW0oKSkKYm9vbGVhbiBub0ZhbWlseU5hbWUgPSBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZmFtaWx5TmFtZS5hc1N0cmluZygpPy50cmltKCkpCnNoYXJlZFN0YXRlLnB1dCgibmFtZUVtcHR5T3JOdWxsIiwgbm9HaXZlbk5hbWUgJiYgbm9GYW1pbHlOYW1lKQoKcmV0dXJuIG1hbmFnZWRVc2VyCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"809330cf-874c-4d57-a8f1-5882c6dd855b\",\"name\":\"Normalized idddataweb Profile to Managed User\",\"description\":\"Converts a normalized social profile for iddataweb into a Managed user\",\"script\":\"LyogTm9ybWFsaXplZCBpZGRkYXRhd2ViIFByb2ZpbGUgdG8gTWFuYWdlZCBVc2VyCiAqIENvcHlyaWdodCAyMDIyIEZvcmdlUm9jayBBUy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAogKgogKiBVc2Ugb2YgdGhpcyBjb2RlIHJlcXVpcmVzIGEgY29tbWVyY2lhbCBzb2Z0d2FyZSBsaWNlbnNlIHdpdGggRm9yZ2VSb2NrIEFTLgogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLiBOb3QgZm9yIHByb2R1Y3Rpb24gdXNlLgogKiBNb2RpZmllZCBieSBTdGVwaGVuIFBheW5lLCAyMDIxLU1hci0zMAogKi8KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKaW1wb3J0IG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUKbG9nZ2VyLmVycm9yKCJOb3JtYWxpemVkX1Byb2ZpbGVfSUREYXRhV2ViOiBTdGFydCAiICsgbm9ybWFsaXplZFByb2ZpbGUpOwoKSnNvblZhbHVlIG1hbmFnZWRVc2VyID0ganNvbihvYmplY3QoCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIG5vcm1hbGl6ZWRQcm9maWxlLmdpdmVuTmFtZSksCiAgICAgICAgZmllbGQoInNuIiwgbm9ybWFsaXplZFByb2ZpbGUuZmFtaWx5TmFtZSksCiAgICAgICAgZmllbGQoInVzZXJOYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUudXNlcm5hbWUpKSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgicG9zdGFsQWRkcmVzcyIsIG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MpCmlmIChub3JtYWxpemVkUHJvZmlsZS5hZGRyZXNzTG9jYWxpdHkuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgiY2l0eSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NMb2NhbGl0eSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24uaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgic3RhdGVQcm92aW5jZSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24pCmlmIChub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInBvc3RhbENvZGUiLCBub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlKQppZiAobm9ybWFsaXplZFByb2ZpbGUuY291bnRyeS5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KCJjb3VudHJ5Iiwgbm9ybWFsaXplZFByb2ZpbGUuY291bnRyeSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBob25lLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInRlbGVwaG9uZU51bWJlciIsIG5vcm1hbGl6ZWRQcm9maWxlLnBob25lKQppZiAobm9ybWFsaXplZFByb2ZpbGUuRE9CLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoImZySW5kZXhlZFN0cmluZzIiLCBub3JtYWxpemVkUHJvZmlsZS5ET0IpCgpyZXR1cm4gbWFuYWdlZFVzZXIK\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"6ad22934-5d12-43a6-96a7-a2fba8d999bf\",\"name\":\"UOP Get Course ID\",\"description\":\"Call out to University of Phoenix Course Registration System and get current course.\",\"script\":\"LyogVU9QIEdldCBDb3Vyc2UgSUQKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2FsbCBvdXQgdG8gVW5pdmVyc2l0eSBvZiBQaG9lbml4IENvdXJzZSBSZWdpc3RyYXRpb24gU3lzdGVtIGFuZCBnZXQgY3VycmVudCBjbGFzcy4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuIAogKiBJdCByZXF1aXJlcyB0aGUgSWRlbnRpZnkgRXhpc3RpbmcgVXNlciBub2RlIGJlZm9yZSBpdCBpcyBiZWluZyBjYWxsZWQuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gaGFzIGNsYXNzZXMKICogLSBubyBjbGFzc2VzCiAqIC0gZXJyb3IKICovCmxvZ2dlci53YXJuaW5nKCJVT1AgR2V0IENvdXJzZSBJRDogc3RhcnQgbm93Iik7CgpvdXRjb21lID0gImVycm9yIjsKCmlmIChzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpICYmIGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKSwgIm1haWwiKS5pdGVyYXRvcigpLmhhc05leHQoKSkgewoKICAgICAgIC8qIEJFR0lOIFNDUklQVCBDT05GSUdVUkFUSU9OCiAgICAgKgogICAgICogUkVQTEFDRSBXSVRIIFlPVVIgT1dOIEFQSSBTRVRUSU5HUwogICAgICovCiAgICAgIHZhciBlbWFpbCA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKSwgIm1haWwiKS5pdGVyYXRvcigpLm5leHQoKTsKICAgIHZhciBVT1BfQ0xBU1NfQVBJX1VSSSA9ICJodHRwczovL2R5NHJwZXc1dmEuZXhlY3V0ZS1hcGkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vZm9yZ2Vyb2NrL2NvdXJzZT9jb3Vyc2VJZD1DRVM0MjIiOwogICAgICAvL3ZhciBVT1BfQ0xBU1NfQVBJX1VSSSA9ICJodHRwczovL2R5NHJwZXc1dmEuZXhlY3V0ZS1hcGkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vZm9yZ2Vyb2NrL2NvdXJzZT9lbWFpbElkPSIuY29uY2F0KGVtYWlsKTsKICAgIC8qCiAgICAgKiBFTkQgU0NSSVBUIENPTkZJR1VSQVRJT04KICAgICAqLwoKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldE1ldGhvZCgnR0VUJyk7CiAgICByZXF1ZXN0LnNldFVyaShVT1BfQ0xBU1NfQVBJX1VSSSk7CgogICAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3QpLmdldCgpOwogICAgdmFyIFVPUENsYXNzSUQgPSByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKTsKICAgIGxvZ2dlci53YXJuaW5nKCJVT1AgR2V0IENvdXJzZSBJRDogQVBJIGNhbGwgcmVzdWx0OiBDb3Vyc2UgSUQ9Ii5jb25jYXQoVU9QQ2xhc3NJRCkpOwoKICAgIC8qIFNhbXBsZSBBUEkgcmVzcG9uc2UKICAgIENFUzQyMQogICAgKi8KCiAgICBpZiAoVU9QQ2xhc3NJRCkgewogICAgICAgIG91dGNvbWUgPSAiaGFzIGNsYXNzZXMiOwoKICAgICAgICAvLyBwcmVzZXJ2ZSByZXN1bHQgaW4gc2hhcmVkIHN0YXRlCiAgICAgICAgc2hhcmVkU3RhdGUucHV0KCJ1b3BDdXJyZW50Q2xhc3NJRCIsIFVPUENsYXNzSUQpOwogICAgfSAKICAgIGVsc2UgaWYgKFVPUENsYXNzSUQgPT09ICIiKSB7CiAgICAgICAgb3V0Y29tZSA9ICJubyBjbGFzc2VzIjsKICAgIH0KICAgIGVsc2UgewogICAgICAgIG91dGNvbWUgPSAiZXJyb3IiOwogICAgfQoKfSBlbHNlIHsKICAgIGxvZ2dlci5lcnJvcigiVU9QIEdldCBDb3Vyc2UgSUQ6IG5vIGNsYXNzZXMhIik7Cn0KCmxvZ2dlci53YXJuaW5nKCJVT1AgR2V0IENvdXJzZSBJRDogRW5kIChvdXRjb21lPSIuY29uY2F0KG91dGNvbWUpLmNvbmNhdCgiKSIpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"name\":\"Remove Button\",\"description\":\"Remove button from page.\",\"script\":\"LyogUmVtb3ZlIEJ1dHRvbgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBIaWRlIGJ1dHRvbnMgb24gdGhlIGpvdXJuZXkgcGFnZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfSkiCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICB2YXIgbWVzc2FnZSA9ICIgIgogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIG1lc3NhZ2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"23143919-6b78-40c3-b25e-beca19b229e0\",\"name\":\"GitHub Profile Normalization (VS)\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJHaXRIdWIgcmF3UHJvZmlsZTogIityYXdQcm9maWxlKQoKcmV0dXJuIGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZmlyc3RfbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3RfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5waWN0dXJlLmRhdGEudXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLmVtYWlsKSkp\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"name\":\"Check Username\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"aa2dabff-f5c4-4dc5-b4ac-5909e88a3a8f\",\"name\":\"Twilio IVR: Verify Known Caller\",\"description\":\"Verify known caller by first name\",\"script\":\"LyogVHdpbGlvIElWUjogVmVyaWZ5IEtub3duIENhbGxlcgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICogLSBmYWxzZQogKiAKICogRGVwZW5kaW5nIG9uIHRoZSBhbW91bnQgb2YgZGF0YSBjb2xsZWN0ZWQgdGhyb3VnaCBjYWxsYmFja3MgYW5kIGhvdyBtYW55IG9mIHRoZSBjYWxsUGFyYW1zCiAqIHlvdSBhY3RpdmF0ZSBiZWxvdywgeW91IHdpbGwgbmVlZCB0byBjaGFuZ2UgeW91ciBhdXRoZW50aWNhdGlvbiBzZXNzaW9uIGZyb20gSldUIHRvIENUUyBvcgogKiBNZW1vcnkuCiAqLwpsb2dnZXIud2FybmluZygiVHdpbGlvIElWUjogVmVyaWZ5IEtub3duIENhbGxlcjogc3RhcnQiKTsKb3V0Y29tZSA9ICJmYWxzZSI7CgovKiBCZWdpbiBDb25maWd1cmF0aW9uCiAqLwoKLy8gRm9yIElEIENsb3VkIHVzZSAiX2lkIiwgZm9yIGNsYXNzaWMgZGVwbG95bWVudHMgdXNlICJ1c2VybmFtZSIKdmFyIHVzZXJpZCA9IHNoYXJlZFN0YXRlLmdldCgiX2lkIikKCi8vIFJldHJpZXZlIHRoZSBrbm93biBjYWxsZXIncyBmaXJzdCBuYW1lCnZhciBmaXJzdE5hbWUgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJpZCwgImdpdmVuTmFtZSIpLml0ZXJhdG9yKCkubmV4dCgpLnJlcGxhY2VBbGwoIlteYS16QS1aIF0iLCAiIikudG9Mb3dlckNhc2UoKTsKCi8vIEJ1aWxkIG91dCB0aGUgZnVsbCBtZXNzYWdlCnZhciBtZXNzYWdlID0gIkkgc2VlIHdlIGhhdmUgYSBwcm9maWxlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHBob25lIG51bWJlciEiOwoKLy8gQnVpbGQgb3V0IHRoZSB2ZXJpZmljYXRpb24gcHJvbXB0CnZhciBwcm9tcHQgPSAiVG8gdmVyaWZ5IEkgaGF2ZSB0aGUgcmlnaHQgYWNjb3VudCwgcGxlYXNlIHNheSB5b3VyIGZpcnN0IG5hbWUuIjsKCi8qIEVuZCBDb25maWd1cmF0aW9uCiAqLwoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLAogICAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0SW5wdXRDYWxsYmFjawopOwogIAp3aXRoIChmcikgewogICAgICBpZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgICAgIHZhciBvdXRwdXQgPSBuZXcgVGV4dE91dHB1dENhbGxiYWNrKFRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwgbWVzc2FnZSk7CiAgICAgICAgdmFyIGlucHV0ID0gbmV3IFRleHRJbnB1dENhbGxiYWNrKHByb21wdCk7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLnNlbmQob3V0cHV0LCBpbnB1dCkuYnVpbGQoKTsKICAgICAgfSAKICAgICAgZWxzZSB7CiAgICAgICAgICB2YXIgYW5zd2VyID0gY2FsbGJhY2tzLmdldCgxKS5nZXRUZXh0KCkucmVwbGFjZUFsbCgiW15hLXpBLVogXSIsICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGxvZ2dlci53YXJuaW5nKCJUd2lsaW8gSVZSOiBWZXJpZnkgS25vd24gQ2FsbGVyOiBjYWxsYmFja3MgcmVjZWl2ZWQ6IGFuc3dlcj0iLmNvbmNhdChhbnN3ZXIpLmNvbmNhdCgiIFtmaXJzdE5hbWU9IikuY29uY2F0KGZpcnN0TmFtZSkuY29uY2F0KCJdIikpOwogICAgICAgIGlmIChhbnN3ZXIgPT0gZmlyc3ROYW1lKSB7CiAgICAgICAgICAgICAgb3V0Y29tZSA9ICJ0cnVlIjsKICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChhbnN3ZXIubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgICBvdXRjb21lID0gIm5vIGlucHV0IjsKICAgICAgICB9CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIlR3aWxpbyBJVlI6IFZlcmlmeSBLbm93biBDYWxsZXI6IGZpbmlzaCBbb3V0Y29tZT0iLmNvbmNhdChvdXRjb21lKS5jb25jYXQoIl0iKSk7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgICAgfQp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"484e6246-dbc6-4288-97e6-54e55431402e\",\"name\":\"Apple Profile Normalization\",\"description\":\"Normalizes raw profile data from Apple\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICoKICogSW4gc29tZSBjb21tb24gZGVmYXVsdCBjb25maWd1cmF0aW9ucywgdGhlIGZvbGxvd2luZyBrZXlzIGFyZSByZXF1aXJlZCB0byBiZSBub3QgZW1wdHk6CiAqIHVzZXJuYW1lLCBnaXZlbk5hbWUsIGZhbWlseU5hbWUsIGVtYWlsLgogKgogKiBGcm9tIFJGQzQ1MTc6IEEgdmFsdWUgb2YgdGhlIERpcmVjdG9yeSBTdHJpbmcgc3ludGF4IGlzIGEgc3RyaW5nIG9mIG9uZSBvciBtb3JlCiAqIGFyYml0cmFyeSBjaGFyYWN0ZXJzIGZyb20gdGhlIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0IChVQ1MpLgogKiBBIHplcm8tbGVuZ3RoIGNoYXJhY3RlciBzdHJpbmcgaXMgbm90IHBlcm1pdHRlZC4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKU3RyaW5nIGVtYWlsID0gImNoYW5nZUBtZS5jb20iClN0cmluZyBzdWJqZWN0SWQgPSByYXdQcm9maWxlLnN1YgpTdHJpbmcgZmlyc3ROYW1lID0gIiAiClN0cmluZyBsYXN0TmFtZSA9ICIgIgpTdHJpbmcgdXNlcm5hbWUgPSBzdWJqZWN0SWQKU3RyaW5nIG5hbWUKCmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgiZW1haWwiKSAmJiByYXdQcm9maWxlLmVtYWlsLmlzTm90TnVsbCgpKXsgLy8gVXNlciBjYW4gZWxlY3QgdG8gbm90IHNoYXJlIHRoZWlyIGVtYWlsCiAgICBlbWFpbCA9IHJhd1Byb2ZpbGUuZW1haWwuYXNTdHJpbmcoKQogICAgdXNlcm5hbWUgPSBlbWFpbAp9CmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgibmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5pc05vdE51bGwoKSkgewogICAgaWYgKHJhd1Byb2ZpbGUubmFtZS5pc0RlZmluZWQoImZpcnN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5maXJzdE5hbWUuaXNOb3ROdWxsKCkpIHsKICAgICAgICBmaXJzdE5hbWUgPSByYXdQcm9maWxlLm5hbWUuZmlyc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KICAgIGlmIChyYXdQcm9maWxlLm5hbWUuaXNEZWZpbmVkKCJsYXN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5sYXN0TmFtZS5pc05vdE51bGwoKSkgewogICAgICAgIGxhc3ROYW1lID0gcmF3UHJvZmlsZS5uYW1lLmxhc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KfQoKbmFtZSA9IChmaXJzdE5hbWU/LnRyaW0oKSA/IGZpcnN0TmFtZSA6ICIiKSArIChsYXN0TmFtZT8udHJpbSgpID8gKChmaXJzdE5hbWU/LnRyaW0oKSA/ICIgIiA6ICIiKSArIGxhc3ROYW1lKSA6ICIiKQpuYW1lID0gICghbmFtZT8udHJpbSgpKSA/ICIgIiA6IG5hbWUKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCBzdWJqZWN0SWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIG5hbWUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIGVtYWlsKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgZmlyc3ROYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIGxhc3ROYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCB1c2VybmFtZSkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"e15a13ee-9168-40cf-934f-656a5f568a6a\",\"name\":\"hashdeviceProfile\",\"description\":\"null\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKLy88c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vd3d3Lm15ZXJzZGFpbHkub3JnL2pvc2VwaC9qYXZhc2NyaXB0L21kNS5qcyIgLz4KCmZ1bmN0aW9uIGhhc2hDb2RlKHIpe3ZhciBlLGg9MDtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKWg9KGg8PDUpLWgrci5jaGFyQ29kZUF0KGUpLGh8PTA7cmV0dXJuIGg+Pj4wfQoKCnZhciBoYXNoTWUgPSBzaGFyZWRTdGF0ZS5nZXQoImZvcmdlUm9jay5kZXZpY2UucHJvZmlsZSIpOwp2YXIgaGFzaE1lID0gc2hhcmVkU3RhdGUucHV0KCJmb3JnZVJvY2suZGV2aWNlLnByb2ZpbGUiLCJkZWxldGVkIGluIHNjcmlwdCAtIGhhc2hkZXZpY2VQcm9maWxlIik7Ci8vdmFyIGhhc2hNZVN0ciA9IEpTT04uc3RyaW5naWZ5KGhhc2hNZSk7Ci8vbG9nZ2VyLmVycm9yKCJIYXNoTWVTdHI6ICIgKyBoYXNoTWVTdHIpOwoKc2hhcmVkU3RhdGUucHV0KCJkZXZpY2VIYXNoIixoYXNoQ29kZShlc2NhcGUoaGFzaE1lKSkudG9TdHJpbmcoKSk7CnNoYXJlZFN0YXRlLnB1dCgiZnJJbmRleGVkU3RyaW5nMSIsaGFzaENvZGUoZXNjYXBlKGhhc2hNZSkpLnRvU3RyaW5nKCkpOwoKb3V0Y29tZSA9ICJ0cnVlIjs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"1c0c73e8-2be1-41ce-b042-3c39694346b5\",\"name\":\"Twilio IVR: Verify Unknown Caller\",\"description\":\"Verify unknown caller by account number\",\"script\":\"LyogVHdpbGlvIElWUjogVmVyaWZ5IFVua25vd24gQ2FsbGVyCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAKICogRGVwZW5kaW5nIG9uIHRoZSBhbW91bnQgb2YgZGF0YSBjb2xsZWN0ZWQgdGhyb3VnaCBjYWxsYmFja3MgYW5kIGhvdyBtYW55IG9mIHRoZSBjYWxsUGFyYW1zCiAqIHlvdSBhY3RpdmF0ZSBiZWxvdywgeW91IHdpbGwgbmVlZCB0byBjaGFuZ2UgeW91ciBhdXRoZW50aWNhdGlvbiBzZXNzaW9uIGZyb20gSldUIHRvIENUUyBvcgogKiBNZW1vcnkuCiAqLwpsb2dnZXIud2FybmluZygiVHdpbGlvIElWUjogVmVyaWZ5IFVua25vd24gQ2FsbGVyOiBzdGFydCIpOwpvdXRjb21lID0gInRydWUiOwoKLyogQmVnaW4gQ29uZmlndXJhdGlvbgogKi8KCi8vIEJ1aWxkIG91dCB0aGUgdmVyaWZpY2F0aW9uIHByb21wdAp2YXIgcHJvbXB0ID0gIlRvIGxvb2t1cCB5b3VyIGFjY291bnQsIHBsZWFzZSBlbnRlciBvciBzYXkgeW91ciBhY2NvdW50IG51bWJlci4iOwoKLyogRW5kIENvbmZpZ3VyYXRpb24KICovCgp2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suVGV4dElucHV0Q2FsbGJhY2sKKTsKICAKd2l0aCAoZnIpIHsKICAgICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICB2YXIgaW5wdXQgPSBuZXcgVGV4dElucHV0Q2FsbGJhY2socHJvbXB0KTsKICAgICAgICBhY3Rpb24gPSBBY3Rpb24uc2VuZChpbnB1dCkuYnVpbGQoKTsKICAgICAgfSAKICAgICAgZWxzZSB7CiAgICAgICAgICB2YXIgYW5zd2VyID0gbmV3IFN0cmluZyhjYWxsYmFja3MuZ2V0KDApLmdldFRleHQoKSkucmVwbGFjZSgvW14wLTldL2csICIiKTsKICAgICAgICBsb2dnZXIud2FybmluZygiVHdpbGlvIElWUjogVmVyaWZ5IFVua25vd24gQ2FsbGVyOiBjYWxsYmFja3MgcmVjZWl2ZWQ6IGFuc3dlcj0iLmNvbmNhdChhbnN3ZXIpKTsKICAgICAgICAgIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgiZnJJbmRleGVkSW50ZWdlcjUiLCBhbnN3ZXIpOwogICAgICAgIGxvZ2dlci53YXJuaW5nKCJUd2lsaW8gSVZSOiBWZXJpZnkgVW5rbm93biBDYWxsZXI6IGZpbmlzaCBbb3V0Y29tZT0iLmNvbmNhdChvdXRjb21lKS5jb25jYXQoIl0iKSk7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgICAgfQp9CgovKgogKiBTdG9yZSBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAqLwpmdW5jdGlvbiBzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHsKICAgICAgIHZhciBzdG9yYWdlID0gc2hhcmVkU3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIik7CiAgICBpZiAoc3RvcmFnZSAmJiB2YWx1ZSkgewogICAgICAgICAgaWYgKHN0b3JhZ2UucHV0KSB7CiAgICAgICAgICAgICAgc3RvcmFnZS5wdXQobmFtZSwgdmFsdWUpOwogICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHN0b3JhZ2VbbmFtZV0gPSB2YWx1ZTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIGlmICh2YWx1ZSkgewogICAgICAgIHNoYXJlZFN0YXRlLnB1dCgib2JqZWN0QXR0cmlidXRlcyIsIEpTT04ucGFyc2UoIntcIiIrbmFtZSsiXCI6XCIiK3ZhbHVlKyJcIn0iKSk7CiAgICB9Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"fff76556-2882-4109-a9a6-c42d546cfe57\",\"name\":\"Service Account - JWT Issuers\",\"description\":\"null\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5UcnVzdGVkSnd0SXNzdWVyQ29uZmlnLAogICAgamF2YS51dGlsLkhhc2hTZXQKICApOwoKICB3aXRoIChmckphdmEpIHsKICAgIHZhciBpc3MgPSBpZFJlcG9zaXRvcnkuZ2V0SWRlbnRpdHkoaXNzdWVyKTsKICAgIGlmIChpc3MgPT0gbnVsbCkgewogICAgICBsb2dnZXIubWVzc2FnZSgnTm8gaXNzdWVyIGZvdW5kIGZvcjogJyArIGlzc3Vlcik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgbG9nZ2VyLm1lc3NhZ2UoJ0ZvdW5kIGlzc3VlcjogJyArIGlzcyk7CgogICAgdmFyIGFjY291bnRTdGF0dXMgPSBpc3MuZ2V0QXR0cmlidXRlVmFsdWVzKCdpbmV0VXNlclN0YXR1cycpOwogICAgaWYgKCFhY2NvdW50U3RhdHVzIHx8IGFjY291bnRTdGF0dXMubGVuZ3RoID09PSAwKSB7CiAgICAgIGxvZ2dlci5tZXNzYWdlKCdObyBpbmV0VXNlclN0YXR1cyBhdHRyaWJ1dGUgaW4gaXNzdWVyJyk7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIGlmIChhY2NvdW50U3RhdHVzWzBdLnRvTG93ZXJDYXNlKCkgIT0gJ2FjdGl2ZScpIHsKICAgICAgbG9nZ2VyLm1lc3NhZ2UoJ0lzc3VlciBpcyBub3QgYWN0aXZlJyk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHZhciBqd2tzQXR0cnMgPSBpc3MuZ2V0QXR0cmlidXRlVmFsdWVzKCdmci1hdHRyLWp3a3MnKTsKICAgIGlmICghandrc0F0dHJzIHx8IGp3a3NBdHRycy5sZW5ndGggPT09IDApIHsKICAgICAgbG9nZ2VyLm1lc3NhZ2UoJ05vIGp3a3MgYXR0cmlidXRlcyBpbiBpc3N1ZXInKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgdmFyIGp3a1NldCA9IGp3a3NBdHRyc1swXTsKICAgIGlmICghandrU2V0KSB7CiAgICAgIGxvZ2dlci5tZXNzYWdlKCdObyBqd2sgc2V0IGluIGlzc3VlcicpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICB2YXIgY29uZmlnID0gbmV3IFRydXN0ZWRKd3RJc3N1ZXJDb25maWcoCiAgICAgIGlzc3VlciwKICAgICAgJ3N1YicsCiAgICAgICdzY29wZScsCiAgICAgIG5ldyBIYXNoU2V0KFtpc3N1ZXJdKSwKICAgICAgandrU2V0LAogICAgICBudWxsLCBudWxsLCBudWxsCiAgICApOwoKICAgIHJldHVybiBjb25maWc7CiAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_SCRIPTED_JWT_ISSUER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"b7259916-71ed-4675-8c5a-de86a80e4aed\",\"name\":\"FrodoTestScript2\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"b3824c66-2dff-4613-9e54-4a7577fdb765\",\"name\":\"TimeStamp_Login\",\"description\":\"Places a timestamp in the frIndexedMultivalued1 attribute\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKCi8vdmFyIHRpbWVzdGFtcHMgPSBzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKS5nZXQoImZySW5kZXhlZE11bHRpdmFsdWVkMSIpOwoKCnZhciBsYXN0TG9naW4gPSBuZXcgRGF0ZSgpOwovKgp2YXIgZGF0ZXRpbWUgPSAiIisgY3VycmVudGRhdGUuZ2V0RGF0ZSgpICsgIi8iCiAgICAgICAgICAgICAgICArIChjdXJyZW50ZGF0ZS5nZXRNb250aCgpKzEpICArICIvIiAKICAgICAgICAgICAgICAgICsgY3VycmVudGRhdGUuZ2V0RnVsbFllYXIoKSArICIgQCAiICAKICAgICAgICAgICAgICAgICsgY3VycmVudGRhdGUuZ2V0SG91cnMoKSArICI6IiAgCiAgICAgICAgICAgICAgICArIGN1cnJlbnRkYXRlLmdldE1pbnV0ZXMoKSArICI6IiAKICAgICAgICAgICAgICAgICsgY3VycmVudGRhdGUuZ2V0U2Vjb25kcygpOwoqLwoKdmFyIG9iamVjdEF0dHJpYnV0ZXMgPSBzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKCgpzaGFyZWRTdGF0ZS5wdXQoImxhc3QgTG9naW4iLGxhc3RMb2dpbi50b1N0cmluZygpKTsKCgoKCgpvYmplY3RBdHRyaWJ1dGVzLnB1dCgiZnJVbmluZGV4ZWRTdHJpbmcxIixsYXN0TG9naW4udG9TdHJpbmcoKSk7CgoKc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIixvYmplY3RBdHRyaWJ1dGVzKTsKCgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"790045fa-a325-4e3e-96f8-d4a91b32e9de\",\"name\":\"HIBP Password Breach Analysis\",\"description\":\"Use Have I Been Pwned Password to check if password has been breached.\",\"script\":\"LyogSElCUCBQYXNzd29yZCBCcmVhY2ggQW5hbHlzaXMKICoKICogQXV0aG9yczogam9uLmtuaWdodEBmb3JnZXJvY2suY29tLCB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogVXNlIEhhdmUgSSBCZWVuIFB3bmVkIFBhc3N3b3JkIHRvIGNoZWNrIGlmIHBhc3N3b3JkIGhhcyBiZWVuIGJyZWFjaGVkLgogKiBDYWxscyBISUJQIEFQSSB0byByZXRyaWV2ZSB0aGUgY291bnQgb2YgbWF0Y2hpbmcgcGFzc3dvcmRzIGluIGJyZWFjaGVkIAogKiBwYXNzd29yZCBkYXRhYmFzZQogKiAKICogVGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIG5vdCB3b3JrIHByb3Blcmx5IGFzIGlzLiAKICogSXQgcmVxdWlyZXMgdGhlIFBhc3N3b3JkIG9yIFBsYXRmb3JtIFBhc3N3b3JkIGNvbGxlY3RvciBub2RlcyBiZWZvcmUKICogaXQgY2FuIG9wZXJhdGUuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gY2xlYXIKICogICBUaGUgbnVtYmVyIG9mIGJyZWFjaGVzIGZvciBwYXNzd29yZCB3YXMgZWl0aGVyIHplcm8gb3IgbGVzcyB0aGFuIHRoZSAKICogICB2YWx1ZSBvZiBUSFJFU0hPTEQKICogLSBicmVhY2hlZCAKICogICBUaGUgbnVtYmVyIG9mIGluY2lkZW50cyBvZiB0aGUgcGFzc3dvcmQgaW4gdGhlIGJyZWFjaGVkIHBhc3N3b3JkIAogKiAgIGRhdGFiYXNlIGV4Y2VlZHMgVEhSRVNIT0xECiAqIC0gZmFpbGVkCiAqICAgVGhlIEFQSSBjYWxsIHdhcyByZWplY3RlZC4KICovCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgVVNFUl9BR0VOVD0iRm9yZ2VSb2NrIjsKICAgIHZhciBISUJQX0FQSV9LRVk9c3lzdGVtRW52LmdldFByb3BlcnR5KCJlc3YuaGlicC5hcGkua2V5Iik7CiAgICB2YXIgVEhSRVNIT0xEPTA7CgogICAgZnVuY3Rpb24gdG9IZXhTdHJpbmcoYnl0ZUFycmF5KSB7CiAgICAgICAgdmFyIHMgPSAnJzsKICAgICAgICBieXRlQXJyYXkuZm9yRWFjaChmdW5jdGlvbihieXRlKSB7CiAgICAgICAgICAgIHMgKz0gKCcwJyArIChieXRlICYgMHhGRikudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHM7CiAgICB9CgogICAgb3V0Y29tZSA9ICJmYWlsZWQiOwoKICAgIHZhciBtZCA9IGphdmEuc2VjdXJpdHkuTWVzc2FnZURpZ2VzdC5nZXRJbnN0YW5jZSgnU0hBLTEnKTsKICAgICAgdmFyIHBhc3N3b3JkID0gbm9kZVN0YXRlLmdldCgicGFzc3dvcmQiKS5hc1N0cmluZygpOwovLyAgICAgIHZhciBwYXNzd29yZCA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nKCIiKTsKLy8gICAgICBpZiAobm9kZVN0YXRlLmdldCgicGFzc3dvcmQiKSkgewovLyAgICAgIHBhc3N3b3JkID0gbm9kZVN0YXRlLmdldCgicGFzc3dvcmQiKS5hc1N0cmluZygpOwovLyAgICB9CiAgICB2YXIgYnl0ZUFycmF5ID0gcGFzc3dvcmQuZ2V0Qnl0ZXMoIlVURi04Iik7CiAgICBtZC51cGRhdGUoYnl0ZUFycmF5KTsKICAgIHZhciBkaWdlc3QgPSBtZC5kaWdlc3QoKTsKICAgIHZhciBoZXggPSBTdHJpbmcodG9IZXhTdHJpbmcoZGlnZXN0KSkudG9VcHBlckNhc2UoKTsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRNZXRob2QoJ0dFVCcpOwogICAgcmVxdWVzdC5zZXRVcmkoJ2h0dHBzOi8vYXBpLnB3bmVkcGFzc3dvcmRzLmNvbS9yYW5nZS8nICsgaGV4LnN1YnN0cmluZygwLDUpKTsKICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgiQWNjZXB0IiwiKi8qIik7CiAgICByZXF1ZXN0LmdldEhlYWRlcnMoKS5hZGQoIkNvbnRlbnQtVHlwZSIsImFwcGxpY2F0aW9uL2pzb24iKTsKICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgiVXNlci1BZ2VudCIsIFVTRVJfQUdFTlQpOwogICAgcmVxdWVzdC5nZXRIZWFkZXJzKCkuYWRkKCJoaWJwLWFwaS1rZXkiLCBISUJQX0FQSV9LRVkpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKCiAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpID09PSAyMDApIHsKICAgICAgICB2YXIgbWF4ID0gMDsKICAgICAgICBvdXRjb21lID0gImNsZWFyIjsKICAgICAgICB2YXIgcmVzdWx0ID0gcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCk7CiAgICAgICAgdmFyIGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcbicpOwogICAgICAgIGZvciAoaT0wOyBpPGxpbmVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBwcmVmaXggPSBsaW5lc1tpXS5zcGxpdCgnOicpWzBdOwogICAgICAgICAgICBpZiAoU3RyaW5nKGhleC5zdWJzdHJpbmcoMCw1KSArIHByZWZpeCkgPT0gaGV4KSB7CiAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBsaW5lc1tpXS5zcGxpdCgnOicpWzFdOwogICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gbWF4KSBtYXggPSBjb3VudDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobWF4ID4gVEhSRVNIT0xEKSBvdXRjb21lID0gImJyZWFjaGVkIjsKICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoImhpYnBfcGFzc3dvcmRfY291bnQiLCBtYXgpOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"0d471aff-81f3-41ce-8bf9-35c27cdc0a26\",\"name\":\"Admin_CanBeInvited\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKKGZ1bmN0aW9uKCkgewogIHZhciBmciA9IG5ldyBKYXZhSW1wb3J0ZXIoCiAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGVzLAogICAgb3JnLmZvcmdlcm9jay5ndWljZS5jb3JlCiAgKTsKCiAgd2l0aCAoZnIpIHsKICAgIHRyeSB7CgogICAgICBvdXRjb21lID0gJ0ZhbHNlJzsKCiAgICAgIHZhciByZWFsbSA9IHNoYXJlZFN0YXRlLmdldCgncmVhbG0nKTsKICAgICAgdmFyIHV1aWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ3VzZXJuYW1lJyk7CiAgICAgIHZhciBpZGVudGl0eVByb3ZpZGVyID0gSW5qZWN0b3JIb2xkZXIuZ2V0SW5zdGFuY2UoSWRlbnRpdHlQcm92aWRlcik7CiAgICAgIHZhciBpZGVudGl0eSA9IGlkZW50aXR5UHJvdmlkZXIuZ2V0SWRlbnRpdHkodXVpZCwgcmVhbG0pOwogICAgICB2YXIgYXR0cnMgPSBpZGVudGl0eS5nZXRBdHRyaWJ1dGVzKCk7CgogICAgICBpZiAoIWF0dHJzLmNvbnRhaW5zS2V5KCdmci1pZG0taW52aXRlRGF0ZScpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoJ0FkbWluIGNhbm5vdCBiZSBpbnZpdGVkOiBubyBpbnZpdGUgZGF0ZScpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgaWYgKGF0dHJzLmNvbnRhaW5zS2V5KCdmci1pZG0tb25ib2FyZERhdGUnKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCdBZG1pbiBjYW5ub3QgYmUgaW52aXRlZDogYWxyZWFkeSBvbmJvYXJkZWQnKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIHZhciBlbWFpbCA9IGF0dHJzLmdldCgnbWFpbCcpLml0ZXJhdG9yKCkubmV4dCgpOwogICAgICB2YXIgb2JqQXR0cnMgPSB7CiAgICAgICAgbWFpbDogZW1haWwsCiAgICAgICAgdXNlck5hbWU6IGVtYWlsLAogICAgICB9OwogICAgICBzaGFyZWRTdGF0ZS5wdXQoJ29iamVjdEF0dHJpYnV0ZXMnLCBvYmpBdHRycyk7CgogICAgICBsb2dnZXIubWVzc2FnZSgnQWRtaW4gY2FuIGJlIGludml0ZWQnKTsKICAgICAgb3V0Y29tZSA9ICdUcnVlJzsKCiAgICB9IGNhdGNoIChlKSB7CgogICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZXRlcm1pbmUgaWYgYWRtaW4gY2FuIGJlIGludml0ZWQ6IHt9JywgZSk7CgogICAgfQogIH0KfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"988c10fa-98da-4bf7-8ac9-a558d2fef1fd\",\"name\":\"IDP Integrity Check\",\"description\":\"Protection from malicious IDPs. Only allow white-listed email domains (usernames are email addresses).\",\"script\":\"LyogSURQIEludGVncml0eSBDaGVjawogKiAKICogUHJvdGVjdGlvbiBmcm9tIG1hbGljaW91cyBJRFBzLiBPbmx5IGFsbG93IHdoaXRlLWxpc3RlZCBlbWFpbCBkb21haW5zICh1c2VybmFtZXMgYXJlIGVtYWlsIGFkZHJlc3NlcykuCiAqIAogKiBUaGlzIHNjcmlwdCBkb2VzIG5vdCByZXF1aXJlIGNvZmlndXJhdGlvbi4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICogLSBmYWxzZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqLwooZnVuY3Rpb24gKCkgewogICAgb3V0Y29tZSA9ICJmYWxzZSI7CiAgICAgIHZhciByb3V0ZWRJRFAgPSBzaGFyZWRTdGF0ZS5nZXQoInJvdXRlZElEUHMiKS5nZXQoMCk7CiAgICAgIHZhciB2YWxpZERvbWFpbnMgPSBbXTsKICAgICAgaWYgKHJvdXRlZElEUCkgewogICAgICAgICAgdmFsaWREb21haW5zID0gcm91dGVkSURQLmdldCgiaWRwRG9tYWlucyIpOwogICAgfQogICAgICAKICAgICAgdmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpOwogICAgICB2YXIgZG9tYWluID0gdXNlcm5hbWUuc3Vic3RyKHVzZXJuYW1lLmxhc3RJbmRleE9mKCJAIikrMSk7CiAgICAgIGlmICh2YWxpZERvbWFpbnMuaW5kZXhPZihkb21haW4pID4gLTEpIHsKICAgICAgICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"cdea92a1-d2bf-4364-a525-fde8b7a95792\",\"name\":\"Get Lockout Status\",\"description\":\"null\",\"script\":\"b3V0Y29tZSA9ICJ0cnVlIjsKCnZhciB1c2VybmFtZSA9IHNoYXJlZFN0YXRlLmdldCgiX2lkIikKdmFyIGxvY2tvdXREYXRhQXR0ciA9ICJzdW5BTUF1dGhJbnZhbGlkQXR0ZW1wdHNEYXRhIgp2YXIgYWNjb3VudFN0YXR1c0F0dHIgPSAiaW5ldFVzZXJTdGF0dXMiCgp2YXIgbG9ja291dERhdGEgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCBsb2Nrb3V0RGF0YUF0dHIpCnZhciBhY2NvdW50U3RhdHVzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZSh1c2VybmFtZSwgYWNjb3VudFN0YXR1c0F0dHIpCgp0cmFuc2llbnRTdGF0ZS5wdXQoImxvY2tvdXREYXRhIiwgbG9ja291dERhdGEpCnRyYW5zaWVudFN0YXRlLnB1dCgiYWNjb3VudFN0YXR1cyIsIGFjY291bnRTdGF0dXMpCgpsb2dnZXIuZXJyb3IobG9ja291dERhdGEudG9TdHJpbmcoKSk=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"3156d7e9-1589-4ffb-a659-37a1647ee03d\",\"name\":\"Normalized ADFS Profile to Managed User\",\"description\":\"Converts a normalized social profile coming from ADFS into a managed user\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgbWFuYWdlZFVzZXIgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlck5hbWUiLCBub3JtYWxpemVkUHJvZmlsZS51c2VybmFtZSkpKQoKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgicG9zdGFsQWRkcmVzcyIsIG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MpCmlmIChub3JtYWxpemVkUHJvZmlsZS5hZGRyZXNzTG9jYWxpdHkuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgiY2l0eSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NMb2NhbGl0eSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24uaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgic3RhdGVQcm92aW5jZSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24pCmlmIChub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInBvc3RhbENvZGUiLCBub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlKQppZiAobm9ybWFsaXplZFByb2ZpbGUuY291bnRyeS5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KCJjb3VudHJ5Iiwgbm9ybWFsaXplZFByb2ZpbGUuY291bnRyeSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBob25lLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInRlbGVwaG9uZU51bWJlciIsIG5vcm1hbGl6ZWRQcm9maWxlLnBob25lKQptYW5hZ2VkVXNlci5wdXQoImFjY291bnRTdGF0dXMiLCAobm9ybWFsaXplZFByb2ZpbGUucm9sZXMuYXNTdHJpbmcoKSA9PSAiZmlkYy12b2xrZXItZGV2LWFkbWlucyIpID8gJ0FjdGl2ZScgOiAnSW5hY3RpdmUnKQoKLy8gaWYgdGhlIGdpdmVuTmFtZSBhbmQgZmFtaWx5TmFtZSBpcyBudWxsIG9yIGVtcHR5Ci8vIHRoZW4gYWRkIGEgYm9vbGVhbiBmbGFnIHRvIHRoZSBzaGFyZWQgc3RhdGUgdG8gaW5kaWNhdGUgbmFtZXMgYXJlIG5vdCBwcmVzZW50Ci8vIHRoaXMgY291bGQgYmUgdXNlZCBlbHNld2hlcmUKLy8gZm9yIGVnLiB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gYSBzY3JpcHRlZCBkZWNpc2lvbiBub2RlIHRvIGJ5LXBhc3MgcGF0Y2hpbmcKLy8gdGhlIHVzZXIgb2JqZWN0IHdpdGggYmxhbmsgdmFsdWVzIHdoZW4gZ2l2ZW5OYW1lICBhbmQgZmFtaWx5TmFtZSBpcyBub3QgcHJlc2VudApib29sZWFuIG5vR2l2ZW5OYW1lID0gbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmFzU3RyaW5nKCk/LnRyaW0oKSkKYm9vbGVhbiBub0ZhbWlseU5hbWUgPSBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZmFtaWx5TmFtZS5hc1N0cmluZygpPy50cmltKCkpCnNoYXJlZFN0YXRlLnB1dCgibmFtZUVtcHR5T3JOdWxsIiwgbm9HaXZlbk5hbWUgJiYgbm9GYW1pbHlOYW1lKQoKcmV0dXJuIG1hbmFnZWRVc2VyCg==\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"85523e71-2d77-4577-b078-6f9674cc54e2\",\"name\":\"Saml2 IDP Adapter Always Auth\",\"description\":\"Always redirect browser pre-auth\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4yL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL1NBTUwySWRlbnRpdHlQcm92aWRlckFkYXB0ZXIuaHRtbAogKiBOb3RlIHRoYXQgdGhlIGluaXRpYWxpemUgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIHNjcmlwdHMuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzLiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMgZm9yIHRoZSB2YXJpYWJsZXMgYXZhaWxhYmxlIHRvIGl0LgogKgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZwogKiAgICAgRW50aXR5IElEIGZvciB0aGUgaG9zdGVkIElEUAogKiByZWFsbSAtIFN0cmluZwogKiAgICAgUmVhbG0gb2YgdGhlIGhvc3RlZCBJRFAKICogaWRwQWRhcHRlclNjcmlwdEhlbHBlciAtIElkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEpCiAqICAgICBBbiBpbnN0YW5jZSBvZiBJZHBBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIHJlcXVlc3QgLSBIdHRwU2VydmxldFJlcXVlc3QgKDIpCiAqICAgICBTZXJ2bGV0IHJlcXVlc3Qgb2JqZWN0CiAqIHJlc3BvbnNlIC0gSHR0cFNlcnZsZXRSZXNwb25zZSAoMykKICogICAgIFNlcnZsZXQgcmVzcG9uc2Ugb2JqZWN0CiAqIGF1dGhuUmVxdWVzdCAtIEF1dGhuUmVxdWVzdCAoNCkKICogICAgIFRoZSBvcmlnaW5hbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHNlbnQgZnJvbSBTUAogKiByZXFJZCAtIFN0cmluZwogKiAgICAgVGhlIGlkIHRvIHVzZSBmb3IgY29udGludWF0aW9uIG9mIHByb2Nlc3NpbmcgaWYgdGhlIGFkYXB0ZXIgcmVkaXJlY3RzCiAqIHJlcyAtIFJlc3BvbnNlICg1KQogKiAgICAgVGhlIFNBTUwgUmVzcG9uc2UKICogc2Vzc2lvbiAtIFNTT1Rva2VuICg2KQogKiAgICAgVGhlIHNpbmdsZSBzaWduLW9uIHNlc3Npb24uIFRoZSByZWZlcmVuY2UgdHlwZSBvZiB0aGlzIGlzIE9iamVjdCBhbmQgd291bGQgbmVlZCB0byBiZSBjYXN0ZWQgdG8gU1NPVG9rZW4uCiAqIHJlbGF5U3RhdGUgLSBTdHJpbmcKICogICAgIFRoZSByZWxheVN0YXRlIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSByZWRpcmVjdAogKiBmYXVsdENvZGUgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBjb2RlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgU0FNTCByZXNwb25zZQogKiBmYXVsdERldGFpbCAtIFN0cmluZwogKiAgICAgdGhlIGZhdWx0IGRldGFpbCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogbG9nZ2VyIC0gTG9nZ2VyIGluc3RhbmNlCiAqICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLjxzY3JpcHQgbmFtZT4KICoKICogVGhyb3dzIFNBTUwyRXhjZXB0aW9uICg3KToKICogICAgIGZvciBhbnkgZXhjZXB0aW9ucyBvY2N1cnJpbmcgaW4gdGhlIGFkYXB0ZXIuIFRoZSBmZWRlcmF0aW9uIHByb2Nlc3Mgd2lsbCBjb250aW51ZQogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBpZHBBZGFwdGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL1Jlc3BvbnNlLmh0bWwuCiAqICg2KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvY29tbW9uL1NBTUwyRXhjZXB0aW9uLmh0bWwuCiAqLwoKLyoKICogVGVtcGxhdGUvZGVmYXVsdCBzY3JpcHQgZm9yIFNBTUwyIElEUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTaW5nbGVTaWduT24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNpbmdsZVNpZ25PbiIpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZUF1dGhlbnRpY2F0aW9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlQXV0aGVudGljYXRpb24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZUF1dGhlbnRpY2F0aW9uIik7CiAgICByZXR1cm4gdHJ1ZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZFJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBoYXBwZW5lZCBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTZW5kUmVzcG9uc2UgKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNlbmRSZXNwb25zZSIpOwogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IGF1dGhuUmVxdWVzdDogIithdXRoblJlcXVlc3QpOwogICAgICByZXNwb25zZS5zZW5kUmVkaXJlY3QoImh0dHBzOi8vaWRjLnNjaGV1YmVyLmlvL2FtL1hVSS8/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPURpc3BhdGNoZXImRm9yY2VBdXRoPXRydWUmZ290bz0iK3JlbGF5U3RhdGUpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpZ25SZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICByZXMKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2lnblJlc3BvbnNlICgpIHsKICAgICAgbG9nZ2VyLmVycm9yKCJDaGljYWdvOiBwcmVTaWduUmVzcG9uc2UiKTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZEZhaWx1cmVSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGZhdWx0Q29kZQogKiAgICAgZmF1bHREZXRhaWwKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2VuZEZhaWx1cmVSZXNwb25zZSAoKSB7CiAgICAgIGxvZ2dlci5lcnJvcigiQ2hpY2FnbzogcHJlU2VuZEZhaWx1cmVSZXNwb25zZSIpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"a31a1796-8410-46b8-82ca-eb0c6e901775\",\"name\":\"Collect Set Custom Cookie Node Config\",\"description\":\"Collect all the configuration items required for the Set Custom Cookie node to function properly.\",\"script\":\"LyogQ29sbGVjdCBTZXQgQ3VzdG9tIENvb2tpZSBOb2RlIENvbmZpZwogKiAKICogQ29sbGVjdCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgcmVxdWlyZWQgZm9yIHRoZSBTZXQgQ3VzdG9tIENvb2tpZSBub2RlIHRvIGZ1bmN0aW9uIHByb3Blcmx5LgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICovCihmdW5jdGlvbiAoKSB7CiAgICBvdXRjb21lID0gInRydWUiOwogICAgICB2YXIgY29uZmlnID0gewogICAgICAgICJuYW1lIjogIm9yZW8iLAogICAgICAgICJ2YWx1ZSI6ICJvcmlnaW5hbCIsCiAgICAgICAgImRvbWFpbiI6ICIuc2NoZXViZXIuaW8iLAogICAgICAgICJwYXRoIjogIi8iLAogICAgICAgICJtYXhBZ2UiOiAzNjAwLAogICAgICAgICJ1c2VIdHRwT25seUNvb2tpZSI6IHRydWUsCiAgICAgICAgInVzZVNlY3VyZUNvb2tpZSI6IHRydWUsCiAgICAgICAgInNhbWVTaXRlIjogIk5PTkUiCiAgICB9OwogIAogICAgICB2YXIgc2NyaXB0ID0gIiI7CiAgICBzY3JpcHQgKz0gIkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCI7CiAgICBzY3JpcHQgKz0gIiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKSI7CiAgICBzY3JpcHQgKz0gIikuZm9yRWFjaCgiOwogICAgc2NyaXB0ICs9ICIgICAgZnVuY3Rpb24gKGlucHV0LGkpIHsiOwogICAgc2NyaXB0ICs9ICIgICAgICAgIGNvbnNvbGUubG9nKCdpbnB1dCAnK2kpOyIKICAgIHNjcmlwdCArPSAiICAgICAgICB2YXIgY29uZmlnID0gSlNPTi5wYXJzZSgnIitKU09OLnN0cmluZ2lmeShjb25maWcpKyInKTsiOwogICAgc2NyaXB0ICs9ICIgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoY29uZmlnKTsiOwogICAgc2NyaXB0ICs9ICIgICAgICAgIGlmIChpbnB1dC50eXBlID09PSAndGV4dCcpIHsiOwogICAgc2NyaXB0ICs9ICIgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgY29uZmlnW2tleXNbaV1dKTsiOwogICAgc2NyaXB0ICs9ICIgICAgICAgICAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KCAnaW5wdXQnICwgeydrZXknOidFbnRlcid9ICkpOyI7CiAgICBzY3JpcHQgKz0gIiAgICAgICAgfSI7CiAgICBzY3JpcHQgKz0gIiAgICB9IjsKICAgIHNjcmlwdCArPSAiKTsiOwogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5OYW1lQ2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICBpZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKAogICAgICAgICAgICBuZXcgZnIuTmFtZUNhbGxiYWNrKCJuYW1lIiksCiAgICAgICAgICAgIG5ldyBmci5OYW1lQ2FsbGJhY2soInZhbHVlIiksCiAgICAgICAgICAgIG5ldyBmci5OYW1lQ2FsbGJhY2soImRvbWFpbiIpLAogICAgICAgICAgICBuZXcgZnIuTmFtZUNhbGxiYWNrKCJwYXRoIiksCiAgICAgICAgICAgIG5ldyBmci5OYW1lQ2FsbGJhY2soIm1heEFnZSIpLAogICAgICAgICAgICBuZXcgZnIuTmFtZUNhbGxiYWNrKCJ1c2VIdHRwT25seUNvb2tpZSIpLAogICAgICAgICAgICBuZXcgZnIuTmFtZUNhbGxiYWNrKCJ1c2VTZWN1cmVDb29raWUiKSwKICAgICAgICAgICAgbmV3IGZyLk5hbWVDYWxsYmFjaygic2FtZVNpdGUiKSwKICAgICAgICAgICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkKICAgICAgICApLmJ1aWxkKCk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAgIGNvbmZpZ1tjYWxsYmFja3MuZ2V0KDApLmdldFByb21wdCgpXSA9IGNhbGxiYWNrcy5nZXQoMCkuZ2V0TmFtZSgpOwogICAgICAgICAgY29uZmlnW2NhbGxiYWNrcy5nZXQoMSkuZ2V0UHJvbXB0KCldID0gY2FsbGJhY2tzLmdldCgxKS5nZXROYW1lKCk7CiAgICAgICAgICBjb25maWdbY2FsbGJhY2tzLmdldCgyKS5nZXRQcm9tcHQoKV0gPSBjYWxsYmFja3MuZ2V0KDIpLmdldE5hbWUoKTsKICAgICAgICAgIGNvbmZpZ1tjYWxsYmFja3MuZ2V0KDMpLmdldFByb21wdCgpXSA9IGNhbGxiYWNrcy5nZXQoMykuZ2V0TmFtZSgpOwogICAgICAgICAgY29uZmlnW2NhbGxiYWNrcy5nZXQoNCkuZ2V0UHJvbXB0KCldID0gcGFyc2VJbnQoY2FsbGJhY2tzLmdldCg0KS5nZXROYW1lKCksIDEwKS50b0ZpeGVkKCk7CiAgICAgICAgICBjb25maWdbY2FsbGJhY2tzLmdldCg1KS5nZXRQcm9tcHQoKV0gPSAoIiIrY2FsbGJhY2tzLmdldCg1KS5nZXROYW1lKCkgPT09ICd0cnVlJyk7CiAgICAgICAgICBjb25maWdbY2FsbGJhY2tzLmdldCg2KS5nZXRQcm9tcHQoKV0gPSAoIiIrY2FsbGJhY2tzLmdldCg2KS5nZXROYW1lKCkgPT09ICd0cnVlJyk7CiAgICAgICAgICBjb25maWdbY2FsbGJhY2tzLmdldCg3KS5nZXRQcm9tcHQoKV0gPSBjYWxsYmFja3MuZ2V0KDcpLmdldE5hbWUoKTsKICAgICAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoIm5vZGVDb25maWciLCBjb25maWcpOwogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKG91dGNvbWUpLmJ1aWxkKCk7CiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"e49225eb-e7ad-4699-bf2a-d57689f9cd6e\",\"name\":\"Display States - imported (1)\",\"description\":\"Display sharedState and transientState.\",\"script\":\"LyogRGlzcGxheSBTdGF0ZXMKICogCiAqIERpc3BsYXkgc2hhcmVkU3RhdGUgYW5kIHRyYW5zaWVudFN0YXRlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICovCihmdW5jdGlvbiAoKSB7CiAgICBvdXRjb21lID0gInRydWUiOwoKICAgIHZhciBhbmNob3IgPSAiYW5jaG9yLSIuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CiAgICB2YXIgaGFsaWduID0gImxlZnQiOwogICAgdmFyIG1lc3NhZ2UgPSAiPGg0PkN1cnJlbnQgU3RhdGUgVmFsdWVzPC9oND4iLmNvbmNhdCgKICAgICAgICAiPHA+PGI+U2hhcmVkIFN0YXRlPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgICAgICBzaGFyZWRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAgICAgIjxwPjxiPlRyYW5zaWVudCBTdGF0ZTwvYj46PGJyLz4iKS5jb25jYXQoCiAgICAgICAgdHJhbnNpZW50U3RhdGUudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikuY29uY2F0KAogICAgICAgICI8cD48Yj5SZXF1ZXN0IEhlYWRlcnM8L2I+Ojxici8+IikuY29uY2F0KAogICAgICAgIHJlcXVlc3RIZWFkZXJzLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpCiAgICB2YXIgc2NyaXB0ID0gIkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFxuIi5jb25jYXQoCiAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAgICAgImZ1bmN0aW9uIChlKSB7XG4iKS5jb25jYXQoCiAgICAgICIgIHZhciBtZXNzYWdlID0gZS5maXJzdEVsZW1lbnRDaGlsZDtcbiIpLmNvbmNhdCgKICAgICAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgICAgICIgICAgbWVzc2FnZS5jbGFzc05hbWUgPSBcIlwiO1xuIikuY29uY2F0KAogICAgICAiICAgIG1lc3NhZ2Uuc3R5bGUgPSBcInRleHQtYWxpZ246IGxlZnQ7IGlubGluZS1zaXplOiA0MzBweDsgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcIjtcbiIpLmNvbmNhdCgKICAgICAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICAgICAiICAgIG1lc3NhZ2UuaW5uZXJIVE1MID0gJyIpLmNvbmNhdChtZXNzYWdlKS5jb25jYXQoIic7XG4iKS5jb25jYXQoCiAgICAgICIgIH1cbiIpLmNvbmNhdCgKICAgICAgIn0pIikKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgICAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKICAgICkKICAgIGlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICAgIG5ldyBmci5UZXh0T3V0cHV0Q2FsbGJhY2soCiAgICAgICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgICAgICBhbmNob3IKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9CiAgICBlbHNlIHsKICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgIH0KCiAgICAgLyoKICAgICAgKiBHZW5lcmF0ZSBhIHRva2VuIGluIHRoZSBkZXNpcmVkIGZvcm1hdC4gQWxsICd4JyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHJhbmRvbSBudW1iZXIgMC05LgogICAgICAqIAogICAgICAqIEV4YW1wbGU6CiAgICAgICogJ3h4eHh4JyBwcm9kdWNlcyAnMjg1MzUnCiAgICAgICogJ3h4eC14eHgnIHByb2R1Y2VzICc0MzItNTIxJwogICAgICAqLwogICAgZnVuY3Rpb24gZ2VuZXJhdGVOdW1lcmljVG9rZW4oZm9ybWF0KSB7CiAgICAgICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkqMTB8MDsKICAgICAgICAgICAgdmFyIHYgPSByOwogICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICAgICAgfSk7CiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"b63981d8-cb73-4e47-8749-e58654dcaa31\",\"name\":\"Phone Validator - Line Type\",\"description\":\"This script uses phonevalidator.com to determine the type of phone number stored in the user profile.\",\"script\":\"LyogUGhvbmUgVmFsaWRhdG9yIC0gTGluZSBUeXBlCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIFRoaXMgc2NyaXB0IHVzZXMgcGhvbmV2YWxpZGF0b3IuY29tIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBwaG9uZSBudW1iZXIgc3RvcmVkIGluIHRoZSB1c2VyIHByb2ZpbGUuCiAqIEdldCB5b3VyIG93biBBUEkgS2V5IGF0IGh0dHBzOi8vd3d3LnBob25ldmFsaWRhdG9yLmNvbQogKiAKICogVGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIG5vdCB3b3JrIHByb3Blcmx5IGFzIGlzLiAKICogSXQgcmVxdWlyZXMgdGhlIElkZW50aWZ5IEV4aXN0aW5nIFVzZXIgbm9kZSBiZWZvcmUgaXQgaXMgYmVpbmcgY2FsbGVkLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIENFTEwgUEhPTkUKICogLSBMQU5ETElORQogKiAtIFZPSVAKICogLSBUT0xMLUZSRUUKICogLSBVTktOT1dOCiAqIC0gZmFpbGVkCiAqLwpsb2dnZXIud2FybmluZygiUGhvbmUgVmFsaWRhdG9yIC0gTGluZSBUeXBlOiBzdGFydCIpOwoKaWYgKGdldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgidGVsZXBob25lTnVtYmVyIikgfHwgKHNoYXJlZFN0YXRlLmdldCgiX2lkIikgJiYgaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpLCAidGVsZXBob25lTnVtYmVyIikuaXRlcmF0b3IoKS5oYXNOZXh0KCkpKSB7CgogICAgLyogQkVHSU4gU0NSSVBUIENPTkZJR1VSQVRJT04KICAgICAqCiAgICAgKiBSRVBMQUNFIFdJVEggWU9VUiBPV04gQVpVUkUgQUQgU0VUVElOR1MKICAgICAqCiAgICAgICAqIFBob25lIFZhbGlkYXRvciAtIExpbmUgVHlwZSBBUEkgQ29uZmlndXJhdGlvbgogICAgICAgKiBHZXQgeW91ciBvd24gQVBJIEtleSBhdCBodHRwczovL3d3dy5waG9uZXZhbGlkYXRvci5jb20KICAgICAqLwogICAgdmFyIFBWX0FQSV9LRVkgPSAiODQ5ZDU2NGEtNTk0ZC00YmRlLWI2OTEtYWZlNWRkYWRkNTQ3IjsKICAgIC8qCiAgICAgKiBFTkQgU0NSSVBUIENPTkZJR1VSQVRJT04KICAgICAqLwoKICAgICAgdmFyIFBWX0FQSV9UWVBFID0gImJhc2ljIjsKICAgIHZhciBQVl9BUElfUEhPTkUgPSBnZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoInRlbGVwaG9uZU51bWJlciIpIHx8IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKSwgInRlbGVwaG9uZU51bWJlciIpLml0ZXJhdG9yKCkubmV4dCgpOwogICAgdmFyIFBWX0FQSV9VUkkgPSAiaHR0cHM6Ly93d3cucGhvbmV2YWxpZGF0b3IuY29tL2FwaS92Mi9waG9uZXNlYXJjaD9hcGlrZXk9Ii5jb25jYXQoUFZfQVBJX0tFWSkuY29uY2F0KCImcGhvbmU9IikuY29uY2F0KFBWX0FQSV9QSE9ORSkuY29uY2F0KCImdHlwZT0iKS5jb25jYXQoUFZfQVBJX1RZUEUpOyAgICAKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRNZXRob2QoJ0dFVCcpOwogICAgcmVxdWVzdC5zZXRVcmkoUFZfQVBJX1VSSSk7CgogICAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3QpLmdldCgpOwogICAgdmFyIHJlc3VsdCA9IEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwoKICAgIGlmIChyZXN1bHRbIlN0YXR1c0NvZGUiXT09IjIwMCIpIHsKICAgICAgICBvdXRjb21lID0gcmVzdWx0WyJQaG9uZUJhc2ljIl1bIkxpbmVUeXBlIl07CiAgICB9IGVsc2UgewogICAgICAgIG91dGNvbWUgPSAiZmFpbGVkIjsKICAgIH0KICAgIGxvZ2dlci5lcnJvcigiUGhvbmUgVmFsaWRhdG9yIC0gTGluZSBUeXBlOiBTdGF0dXNDb2RlID0gIi5jb25jYXQocmVzdWx0WyJTdGF0dXNDb2RlIl0pKTsKICAgIGxvZ2dlci5lcnJvcigiUGhvbmUgVmFsaWRhdG9yIC0gTGluZSBUeXBlOiBTdGF0dXNNZXNzYWdlID0gIi5jb25jYXQocmVzdWx0WyJTdGF0dXNNZXNzYWdlIl0pKTsKICAgIGxvZ2dlci5lcnJvcigiUGhvbmUgVmFsaWRhdG9yIC0gTGluZSBUeXBlOiBvdXRjb21lID0gIi5jb25jYXQob3V0Y29tZSkpOwp9IGVsc2UgewogICAgICBvdXRjb21lID0gImZhaWxlZCI7CiAgICAgIGxvZ2dlci5lcnJvcigiUGhvbmUgVmFsaWRhdG9yIC0gTGluZSBUeXBlOiBObyB1c2VyIG9yIHBob25lIG51bWJlciBmb3VuZCEgVXNlICdJZGVudGlmeSBFeGlzdGluZyBVc2VyIG5vZGUgYmVmb3JlIHRoaXMgc2NyaXB0IHRvIHBvcHVsYXRlIHRoZSB1c2VyJ3MgX2lkIGluIHNoYXJlZCBzdGF0ZSBvciBwdXQgYSB2YWxpZCBjZWxsIHBob25lIG51bWJlciBpbnRvIHNoYXJlZFN0YXRlLm9iamVjdEF0dHJpYnV0ZXMudGVsZXBob25lTnVtYmVyISciKTsKICAgIGxvZ2dlci5lcnJvcigiUGhvbmUgVmFsaWRhdG9yIC0gTGluZSBUeXBlOiBvdXRjb21lID0gIi5jb25jYXQob3V0Y29tZSkpOwp9CgovKgogKiBSZWFkIGF0dHJpYnV0ZXMgaW4gc2hhcmVkIHN0YXRlIGZvciB1c2Ugd2l0aCB0aGUgQ3JlYXRlL1BhdGNoIE9iamVjdCBub2Rlcy4KICovCmZ1bmN0aW9uIGdldFNoYXJlZE9iamVjdEF0dHJpYnV0ZShuYW1lKSB7CiAgICB2YXIgc3RvcmFnZSA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwogICAgaWYgKHN0b3JhZ2UpIHsKICAgICAgICAgIGlmIChzdG9yYWdlLmdldCkgewogICAgICAgICAgICByZXR1cm4gc2hhcmVkU3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikuZ2V0KG5hbWUpOwogICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gc3RvcmFnZS5uYW1lOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"d25a1315-8beb-4a0c-84bf-534214fed087\",\"name\":\"MobileOTP: Prepare Reset Of OTP Profile Attribute\",\"description\":\"Prepare Reset Of OTP Profile Attribute\",\"script\":\"LyoKICogUmVzZXQgT1RQIHByb2ZpbGUgYXR0cmlidXRlIGluIE9iamVjdEF0dHJpYnV0ZXMgc28gaXQgY2FuIGJlIHBhdGNoZWQgdG8gdGhlIHVzZXIgcHJvZmlsZS4KICovCm91dGNvbWUgPSAidHJ1ZSI7CgpzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoImZyLWF0dHItaW50NSIsICIwIik7CgovKgogKiBTdG9yZSBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAqLwpmdW5jdGlvbiBzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHsKICAgICAgdmFyIHN0b3JhZ2UgPSBzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKICAgIGlmIChzdG9yYWdlICYmIHZhbHVlKSB7CiAgICAgICAgICBpZiAoc3RvcmFnZS5wdXQpIHsKICAgICAgICAgICAgICBzdG9yYWdlLnB1dChuYW1lLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgc3RvcmFnZVtuYW1lXSA9IHZhbHVlOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHZhbHVlKSB7CiAgICAgICAgc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgSlNPTi5wYXJzZSgie1wiIituYW1lKyJcIjpcIiIrdmFsdWUrIlwifSIpKTsKICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"58258c2d-46f3-4811-85c4-ea1476dd9cf4\",\"name\":\"Service Account - Cluster Internal Requests Only\",\"description\":\"null\",\"script\":\"CnRyeSB7CiAgdmFyIGNsaWVudElwQWRkcmVzc2VzID0gcmVxdWVzdEhlYWRlcnMuZ2V0KG5ldyBqYXZhLmxhbmcuU3RyaW5nKCd4LWZvcndhcmRlZC1mb3InKSk7CiAgaWYgKCFjbGllbnRJcEFkZHJlc3NlcykgewogICAgbG9nZ2VyLm1lc3NhZ2UoJ05vIGZvcndhcmRlZCBoZWFkZXI7IGludGVybmFsIGNsdXN0ZXIgcmVxdWVzdCcpOwogICAgb3V0Y29tZSA9ICdUcnVlJwogIH0gZWxzZSB7CiAgICBsb2dnZXIubWVzc2FnZSgnRm9yd2FyZGVkIGhlYWRlciB7fScsIGNsaWVudElwQWRkcmVzc2VzKTsKICAgIG91dGNvbWUgPSAnRmFsc2UnOwogIH0KfSBjYXRjaCAoZSkgewogIGxvZ2dlci5lcnJvcignU2VydmljZSBBY2NvdW50IC0gQ2x1c3RlciBJbnRlcm5hbCBSZXF1ZXN0cyBPbmx5IC0gZmFpbGVkIGRlZHVjaW5nIGhlYWRlcicpOwogIGxvZ2dlci5lcnJvcihlKTsKICBvdXRjb21lID0gJ0Vycm9yJzsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"703dab1a-1921-4981-98dd-b8e5349d8548\",\"name\":\"Device Id (Match) - Server Side\",\"description\":\"Default global script for server side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAxOCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIFNjYWxhckNvbXBhcmF0b3IgPSB7fSwgU2NyZWVuQ29tcGFyYXRvciA9IHt9LCBNdWx0aVZhbHVlQ29tcGFyYXRvciA9IHt9LCBVc2VyQWdlbnRDb21wYXJhdG9yID0ge30sIEdlb2xvY2F0aW9uQ29tcGFyYXRvciA9IHt9OwoKdmFyIGNvbmZpZyA9IHsKICAgIHByb2ZpbGVFeHBpcmF0aW9uOiAzMCwgICAgICAgICAgICAgIC8vaW4gZGF5cwogICAgbWF4UHJvZmlsZXNBbGxvd2VkOiA1LAogICAgbWF4UGVuYWx0eVBvaW50czogMCwKICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBzY3JlZW46IHsKICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICAgIGNvbXBhcmF0b3I6IFNjcmVlbkNvbXBhcmF0b3IsCiAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDUwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHBsdWdpbnM6IHsKICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2luczogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmb250czogewogICAgICAgICAgICBpbnN0YWxsZWRGb250czogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogU2NhbGFyQ29tcGFyYXRvciwKICAgICAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdXNlckFnZW50OiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgICBjb21wYXJhdG9yOiBVc2VyQWdlbnRDb21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBpZ25vcmVWZXJzaW9uOiB0cnVlLAogICAgICAgICAgICAgICAgcGVuYWx0eVBvaW50czogMTAwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdlb2xvY2F0aW9uOiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSwKICAgICAgICAgICAgY29tcGFyYXRvcjogR2VvbG9jYXRpb25Db21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBhbGxvd2VkUmFuZ2U6IDEwMCwgICAgICAgICAgICAvL2luIG1pbGVzCiAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJhdG9yIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCgp2YXIgYWxsLCBhbnksIGNhbGN1bGF0ZURpc3RhbmNlLCBjYWxjdWxhdGVJbnRlcnNlY3Rpb24sIGNhbGN1bGF0ZVBlcmNlbnRhZ2UsIG51bGxPclVuZGVmaW5lZCwgc3BsaXRBbmRUcmltLAogICAgdW5kZWZpbmVkTG9jYXRpb247CgovLyBDb21wYXJpc29uUmVzdWx0CgovKioKICogQ29uc3RydWN0cyBhbiBpbnN0YW5jZSBvZiBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gcGVuYWx0eSBwb2ludHMuCiAqCiAqIEBwYXJhbSBwZW5hbHR5UG9pbnRzIChOdW1iZXIpIFRoZSBwZW5hbHR5IHBvaW50cyBmb3IgdGhlIGNvbXBhcmlzb24gKGRlZmF1bHRzIHRvIDApLgogKiBAcGFyYW0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSAoYm9vbGVhbikgV2hldGhlciB0aGUgY3VycmVudCB2YWx1ZSBjb250YWlucyBtb3JlIGluZm9ybWF0aW9uCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIHRoZSBzdG9yZWQgdmFsdWUgKGRlZmF1bHRzIHRvIGZhbHNlKS4KICovCmZ1bmN0aW9uIENvbXBhcmlzb25SZXN1bHQoKSB7CgogICAgdmFyIHBlbmFsdHlQb2ludHMgPSAwLAogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBmYWxzZTsKCiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQpIHsKICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBhcmd1bWVudHNbMV07CiAgICB9CgogICAgaWYgKGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkICYmIGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgaWYgKHR5cGVvZihhcmd1bWVudHNbMF0pID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSA9IGFyZ3VtZW50c1swXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIH0KICAgIH0KCiAgICB0aGlzLnBlbmFsdHlQb2ludHMgPSBwZW5hbHR5UG9pbnRzOwogICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZTsKCn0KCkNvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUyA9IG5ldyBDb21wYXJpc29uUmVzdWx0KDApOwoKLyoqCiAqIFN0YXRpYyBtZXRob2QgZm9yIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcuCiAqCiAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkuCiAqLwpDb21wYXJpc29uUmVzdWx0LmlzU3VjY2Vzc2Z1bCA9ICBmdW5jdGlvbihjb21wYXJpc29uUmVzdWx0KSB7CiAgICByZXR1cm4gY29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKTsKfTsKCgovKioKICogU3RhdGljIG1ldGhvZCBmb3IgZnVuY3Rpb25hbCBwcm9ncmFtbWluZy4KICoKICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gIGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHJldHVybiBjb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU7Cn07CgovKioKICogQ29tcGFyaXNvbiBmdW5jdGlvbiB0aGF0IGNhbiBiZSBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCB0byBhcnJheS5zb3J0CiAqLwpDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUgPSBmdW5jdGlvbihmaXJzdCwgc2Vjb25kKSB7CiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGZpcnN0KSAmJiBudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAwOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoZmlyc3QpKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAxOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoZmlyc3QucGVuYWx0eVBvaW50cyAhPT0gc2Vjb25kLnBlbmFsdHlQb2ludHMpIHsKICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnBlbmFsdHlQb2ludHMgLSBzZWNvbmQucGVuYWx0eVBvaW50czsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gKGZpcnN0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCkgLSAoc2Vjb25kLmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCk7CiAgICAgICAgfQogICAgfQp9OwoKLyoqCiAqIEFtYWxnYW1hdGVzIHRoZSBnaXZlbiBDb21wYXJpc29uUmVzdWx0IGludG8gdGhpcyBDb21wYXJpc29uUmVzdWx0LgogKgogKiBAcGFyYW0gY29tcGFyaXNvblJlc3VsdCBUaGUgQ29tcGFyaXNvblJlc3VsdCB0byBpbmNsdWRlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5wcm90b3R5cGUuYWRkQ29tcGFyaXNvblJlc3VsdCA9IGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHRoaXMucGVuYWx0eVBvaW50cyArPSBjb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHM7CiAgICBpZiAoY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKSB7CiAgICAgICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlOwogICAgfQp9OwoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBubyBwZW5hbHR5IHBvaW50cyBoYXZlIGJlZW4gYXNzaWduZWQgZm9yIHRoZSBjb21wYXJpc29uLgogKgogKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgY29tcGFyaXNvbiB3YXMgc3VjY2Vzc2Z1bC4KICovCkNvbXBhcmlzb25SZXN1bHQucHJvdG90eXBlLmlzU3VjY2Vzc2Z1bCA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZCh0aGlzLnBlbmFsdHlQb2ludHMpIHx8IHRoaXMucGVuYWx0eVBvaW50cyA9PT0gMDsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gc2ltcGxlIG9iamVjdHMgKFN0cmluZ3xOdW1iZXIpIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybwogKiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIGN1cnJlbnQgdmFsdWUuCiAqIEBwYXJhbSBzdG9yZWRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIHN0b3JlZCB2YWx1ZS4KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0LgogKi8KU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlID0gZnVuY3Rpb24gKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUsIGNvbmZpZykgewogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlN0cmluZ0NvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOnN0b3JlZFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoc3RvcmVkVmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOmNvbmZpZzogIiArIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpOwogICAgfQogICAgaWYgKGNvbmZpZy5wZW5hbHR5UG9pbnRzID09PSAwKSB7CiAgICAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUzsKICAgIH0KCiAgICBpZiAoIW51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgfHwgY3VycmVudFZhbHVlICE9PSBzdG9yZWRWYWx1ZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoIW51bGxPclVuZGVmaW5lZChjdXJyZW50VmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KHRydWUpOwogICAgfQoKICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7Cn07CgovKioKICogQ29tcGFyZXMgdHdvIHNjcmVlbnMgYW5kIGlmIHRoZXkgYXJlIGVxdWFsIHRoZW4gcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB6ZXJvIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLAogKiBvdGhlcndpc2UgcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiB7CiAqICAgICAgICAgICAgInNjcmVlbldpZHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBoZWlnaHQuCiAqICAgICAgICAgICAgInNjcmVlbkNvbG91ckRlcHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBjb2xvdXIgZGVwdGguCiAqICAgICAgICB9CiAqIEBwYXJhbSBzdG9yZWRWYWx1ZTogewogKiAgICAgICAgICAgICJzY3JlZW5XaWR0aCI6IChOdW1iZXIpIFRoZSBzdG9yZWQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIHN0b3JlZCBjbGllbnQgc2NyZWVuIGhlaWdodC4KICogICAgICAgICAgICAic2NyZWVuQ29sb3VyRGVwdGgiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGNsaWVudCBzY3JlZW4gY29sb3VyIGRlcHRoLgogKiAgICAgICAgfQogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgInBlbmFsdHlQb2ludHMiOiAoTnVtYmVyKSBUaGUgbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzLgogKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovClNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTY3JlZW5Db21wYXJhdG9yLmNvbXBhcmU6Y3VycmVudFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICBjdXJyZW50VmFsdWUgPSB7c2NyZWVuV2lkdGg6IG51bGwsIHNjcmVlbkhlaWdodDogbnVsbCwgc2NyZWVuQ29sb3VyRGVwdGg6IG51bGx9OwogICAgfQogICAgaWYgKG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBzdG9yZWRWYWx1ZSA9IHtzY3JlZW5XaWR0aDogbnVsbCwgc2NyZWVuSGVpZ2h0OiBudWxsLCBzY3JlZW5Db2xvdXJEZXB0aDogbnVsbH07CiAgICB9CgogICAgdmFyIGNvbXBhcmlzb25SZXN1bHRzID0gWwogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuV2lkdGgsIHN0b3JlZFZhbHVlLnNjcmVlbldpZHRoLCBjb25maWcpLAogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuSGVpZ2h0LCBzdG9yZWRWYWx1ZS5zY3JlZW5IZWlnaHQsIGNvbmZpZyksCiAgICAgICAgU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlKGN1cnJlbnRWYWx1ZS5zY3JlZW5Db2xvdXJEZXB0aCwgc3RvcmVkVmFsdWUuc2NyZWVuQ29sb3VyRGVwdGgsIGNvbmZpZyldOwoKICAgIGlmIChhbGwoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKSkgewogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChhbnkoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSkpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgfQp9OwoKLyoqCiAqIFNwbGl0cyBib3RoIHZhbHVlcyB1c2luZyBkZWxpbWl0ZXIsIHRyaW1zIGV2ZXJ5IHZhbHVlIGFuZCBjb21wYXJlcyBjb2xsZWN0aW9ucyBvZiB2YWx1ZXMuCiAqIFJldHVybnMgemVyby1yZXN1bHQgZm9yIHNhbWUgbXVsdGktdmFsdWUgYXR0cmlidXRlcy4KICoKICogSWYgY29sbGVjdGlvbnMgYXJlIG5vdCBzYW1lIGNoZWNrcyBpZiBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaXMgbGVzcyBvciBlcXVhbCBtYXhEaWZmZXJlbmNlcyBvcgogKiBwZXJjZW50YWdlIG9mIGRpZmZlcmVuY2UgaXMgbGVzcyBvciBlcXVhbCBtYXhQZXJjZW50YWdlRGlmZmVyZW5jZS4KICoKICogSWYgeWVzIHRoZW4gcmV0dXJucyB6ZXJvLXJlc3VsdCB3aXRoIGFkZGl0aW9uYWwgaW5mbywgZWxzZSByZXR1cm5zIHBlbmFsdHlQb2ludHMtcmVzdWx0LgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlOiAoU3RyaW5nKSBUaGUgc3RvcmVkIHZhbHVlLgogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgIm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlIjogKE51bWJlcikgVGhlIG1heCBkaWZmZXJlbmNlIHBlcmNlbnRhZ2UgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgaXMgYXNzaWduZWQuCiAqICAgICAgICAgICAgIm1heERpZmZlcmVuY2VzIjogKE51bWJlcikgVGhlIG1heCBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgcG9pbnRzIGFyZSBhc3NpZ25lZC4KICogICAgICAgICAgICAicGVuYWx0eVBvaW50cyI6IChOdW1iZXIpIFRoZSBudW1iZXIgb2YgcGVuYWx0eSBwb2ludHMuCiAgKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovCk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgdmFyIGRlbGltaXRlciA9ICI7IiwKICAgICAgICBjdXJyZW50VmFsdWVzID0gc3BsaXRBbmRUcmltKGN1cnJlbnRWYWx1ZSwgZGVsaW1pdGVyKSwKICAgICAgICBzdG9yZWRWYWx1ZXMgPSBzcGxpdEFuZFRyaW0oc3RvcmVkVmFsdWUsIGRlbGltaXRlciksCiAgICAgICAgbWF4TnVtYmVyT2ZFbGVtZW50cyA9IE1hdGgubWF4KGN1cnJlbnRWYWx1ZXMubGVuZ3RoLCBzdG9yZWRWYWx1ZXMubGVuZ3RoKSwKICAgICAgICBudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9IGNhbGN1bGF0ZUludGVyc2VjdGlvbihjdXJyZW50VmFsdWVzLCBzdG9yZWRWYWx1ZXMpLmxlbmd0aCwKICAgICAgICBudW1iZXJPZkRpZmZlcmVuY2VzID0gbWF4TnVtYmVyT2ZFbGVtZW50cyAtIG51bWJlck9mVGhlU2FtZUVsZW1lbnRzLAogICAgICAgIHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzID0gY2FsY3VsYXRlUGVyY2VudGFnZShudW1iZXJPZkRpZmZlcmVuY2VzLCBtYXhOdW1iZXJPZkVsZW1lbnRzKTsKCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKHN0b3JlZFZhbHVlKSAmJiAhbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UobnVtYmVyT2ZUaGVTYW1lRWxlbWVudHMgKyAiIG9mICIgKyBtYXhOdW1iZXJPZkVsZW1lbnRzICsgIiBhcmUgc2FtZSIpOwogICAgfQoKICAgIGlmIChtYXhOdW1iZXJPZkVsZW1lbnRzID09PSAwKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBubyBhdHRyaWJ1dGVzIGZvdW5kIGluIGJvdGggcHJvZmlsZXMiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9PT0gbWF4TnVtYmVyT2ZFbGVtZW50cykgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJJZ25vcmVkIGJlY2F1c2UgYWxsIGF0dHJpYnV0ZXMgYXJlIHNhbWUiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZkRpZmZlcmVuY2VzID4gY29uZmlnLm1heERpZmZlcmVuY2VzKSB7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJXb3VsZCBiZSBpZ25vcmVkIGlmIG5vdCBtb3JlIHRoYW4gIiArIGNvbmZpZy5tYXhEaWZmZXJlbmNlcyArICIgZGlmZmVyZW5jZXMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KCiAgICBpZiAocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgPiBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgKyAiIHBlcmNlbnRzIGFyZSBkaWZmZXJlbnQiKTsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIldvdWxkIGJlIGlnbm9yZWQgaWYgbm90IG1vcmUgdGhhbiAiICsgY29uZmlnLm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlICsgIiBwZXJjZW50Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChjb25maWcucGVuYWx0eVBvaW50cyk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBudW1iZXIgb2YgZGlmZmVyZW5jZXMoIiArIG51bWJlck9mRGlmZmVyZW5jZXMgKyAiKSBub3QgbW9yZSB0aGFuICIKICAgICAgICAgICAgKyBjb25maWcubWF4RGlmZmVyZW5jZXMpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzICsgIiBwZXJjZW50cyBhcmUgZGlmZmVyZW50Iik7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBub3QgbW9yZSB0aGFuICIgKyBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UgKyAiIHBlcmNlbnQiKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdCh0cnVlKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gVXNlciBBZ2VudCBTdHJpbmdzIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybyBwZW5hbHR5CiAqIHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlIChTdHJpbmcpIFRoZSBzdG9yZWQgdmFsdWUuCiAqIEBwYXJhbSBjb25maWc6IHsKICogICAgICAgICAgICAiaWdub3JlVmVyc2lvbiI6IChib29sZWFuKSBJZiB0aGUgdmVyc2lvbiBudW1iZXJzIGluIHRoZSBVc2VyIEFnZW50IFN0cmluZ3Mgc2hvdWxkIGJlIGlnbm9yZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb21wYXJpc29uLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBBIENvbXBhcmlzb25SZXN1bHQuCiAqLwpVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiVXNlckFnZW50Q29tcGFyYXRvci5jb21wYXJlOmN1cnJlbnRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgaWYgKGNvbmZpZy5pZ25vcmVWZXJzaW9uKSB7CiAgICAgICAgLy8gcmVtb3ZlIHZlcnNpb24gbnVtYmVyCiAgICAgICAgY3VycmVudFZhbHVlID0gbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgPyBudWxsIDogY3VycmVudFZhbHVlLnJlcGxhY2UoL1tcZFwuXSsvZywgIiIpLnRyaW0oKTsKICAgICAgICBzdG9yZWRWYWx1ZSA9IG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkgPyBudWxsIDogc3RvcmVkVmFsdWUucmVwbGFjZSgvW1xkXC5dKy9nLCAiIikudHJpbSgpOwogICAgfQoKICAgIHJldHVybiBTY2FsYXJDb21wYXJhdG9yLmNvbXBhcmUoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gbG9jYXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50IGEgZGVncmVlIG9mIGRpZmZlcmVuY2UuCiAqCiAqIEBwYXJhbSBjdXJyZW50VmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgY3VycmVudCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGN1cnJlbnQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcGFyYW0gc3RvcmVkVmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxhdGl0dWRlLgogKiAgICAgICAgICAgICJsb25naXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJhbGxvd2VkUmFuZ2UiOiAoTnVtYmVyKSBUaGUgbWF4IGRpZmZlcmVuY2UgYWxsb3dlZCBpbiB0aGUgdHdvIGxvY2F0aW9ucywgYmVmb3JlIHRoZSBwZW5hbHR5IGlzIGFzc2lnbmVkLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KKiAgICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0CiAqLwpHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiR2VvbG9jYXRpb25Db21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICAvLyBDaGVjayBmb3IgdW5kZWZpbmVkIHN0b3JlZCBvciBjdXJyZW50IGxvY2F0aW9ucwoKICAgIGlmICh1bmRlZmluZWRMb2NhdGlvbihjdXJyZW50VmFsdWUpICYmIHVuZGVmaW5lZExvY2F0aW9uKHN0b3JlZFZhbHVlKSkgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CiAgICBpZiAodW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiAhdW5kZWZpbmVkTG9jYXRpb24oc3RvcmVkVmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KICAgIGlmICghdW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiB1bmRlZmluZWRMb2NhdGlvbihzdG9yZWRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgLy8gQm90aCBsb2NhdGlvbnMgZGVmaW5lZCwgdGhlcmVmb3JlIHBlcmZvcm0gY29tcGFyaXNvbgoKICAgIHZhciBkaXN0YW5jZSA9IGNhbGN1bGF0ZURpc3RhbmNlKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUpOwoKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJEaXN0YW5jZSBiZXR3ZWVuICgiICsgY3VycmVudFZhbHVlLmxhdGl0dWRlICsgIiwiICsgY3VycmVudFZhbHVlLmxvbmdpdHVkZSArICIpIGFuZCAoIiArCiAgICAgICAgICAgIHN0b3JlZFZhbHVlLmxhdGl0dWRlICsgIiwiICsgc3RvcmVkVmFsdWUubG9uZ2l0dWRlICsgIikgaXMgIiArIGRpc3RhbmNlICsgIiBtaWxlcyIpOwogICAgfQoKICAgIGlmIChwYXJzZUZsb2F0KGRpc3RhbmNlLnRvUHJlY2lzaW9uKDUpKSA9PT0gMCkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJMb2NhdGlvbiBpcyB0aGUgc2FtZSIpOwogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CgogICAgaWYgKGRpc3RhbmNlIDw9IGNvbmZpZy5hbGxvd2VkUmFuZ2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlRvbGVyYXRlZCBiZWNhdXNlIGRpc3RhbmNlIG5vdCBtb3JlIHRoZW4gIiArIGNvbmZpZy5hbGxvd2VkUmFuZ2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiV291bGQgYmUgaWdub3JlZCBpZiBkaXN0YW5jZSBub3QgbW9yZSB0aGVuICIgKyBjb25maWcuYWxsb3dlZFJhbmdlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KfTsKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi8vICAgICAgICAgICAgICAgICAgICBEZXZpY2UgUHJpbnQgTG9naWMgLSBETyBOT1QgTU9ESUZZICAgICAgICAgICAgICAgICAgICAgLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwoKLy8gVXRpbGl0eSBmdW5jdGlvbnMKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgZXZhbHVhdGluZyBmdW5jdGlvbiBmIG9uIGVhY2ggZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYWxsID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn07CgovKioKICogUmV0dXJucyB0cnVlIGlmIGV2YWx1YXRpbmcgZnVuY3Rpb24gZiBvbiBhbnkgZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYW55ID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGxvY2F0aW9uIGlzIG51bGwgb3IgaGFzIHVuZGVmaW5lZCBsb25naXR1ZGUgb3IgbGF0aXR1ZGUgdmFsdWVzLgogKgogKiBAcGFyYW0gbG9jYXRpb246IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBsb25naXR1ZGUuCiAqICAgICAgICB9CiAqIEByZXR1cm4gYm9vbGVhbgogKi8KdW5kZWZpbmVkTG9jYXRpb24gPSBmdW5jdGlvbihsb2NhdGlvbikgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZChsb2NhdGlvbikgfHwgbnVsbE9yVW5kZWZpbmVkKGxvY2F0aW9uLmxhdGl0dWRlKSB8fCBudWxsT3JVbmRlZmluZWQobG9jYXRpb24ubG9uZ2l0dWRlKTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLgogKgogKiBAcGFyYW0gdmFsdWU6IGEgdmFsdWUgb2YgYW55IHR5cGUKICogQHJldHVybiBib29sZWFuCiAqLwpudWxsT3JVbmRlZmluZWQgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7Cn07CgovKioKICogQ2FsY3VsYXRlcyB0aGUgZGlzdGFuY2VzIGJldHdlZW4gdGhlIHR3byBsb2NhdGlvbnMuCiAqCiAqIEBwYXJhbSBmaXJzdDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBmaXJzdCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGZpcnN0IGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIHNlY29uZDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcmV0dXJuIE51bWJlciBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdHdvIGxvY2F0aW9ucy4KICovCmNhbGN1bGF0ZURpc3RhbmNlID0gZnVuY3Rpb24oZmlyc3QsIHNlY29uZCkgewogICAgdmFyIGZhY3RvciA9IChNYXRoLlBJIC8gMTgwKSwKICAgICAgICB0aGV0YSwKICAgICAgICBkaXN0OwogICAgZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkZWdyZWVzKSB7CiAgICAgICAgcmV0dXJuIGRlZ3JlZXMgKiBmYWN0b3I7CiAgICB9CiAgICBmdW5jdGlvbiByYWRpYW5zVG9EZWdyZWVzKHJhZGlhbnMpIHsKICAgICAgICByZXR1cm4gcmFkaWFucyAvIGZhY3RvcjsKICAgIH0KICAgIHRoZXRhID0gZmlyc3QubG9uZ2l0dWRlIC0gc2Vjb25kLmxvbmdpdHVkZTsKICAgIGRpc3QgPSBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKyBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHRoZXRhKSk7CiAgICBkaXN0ID0gTWF0aC5hY29zKGRpc3QpOwogICAgZGlzdCA9IHJhZGlhbnNUb0RlZ3JlZXMoZGlzdCk7CiAgICBkaXN0ID0gZGlzdCAqIDYwICogMS4xNTE1OwogICAgcmV0dXJuIGRpc3Q7Cn07CgovKioKICogQ29udmVydHMgYSBTdHJpbmcgaG9sZGluZyBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMgaW50byBhbiBhcnJheS4KICoKICogQHBhcmFtIHRleHQgKFN0cmluZykgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMuCiAqIEBwYXJhbSBkZWxpbWl0ZXIgKFN0cmluZykgVGhlIGNoYXJhY3RlciBkZWxpbWl0aW5nIHZhbHVlcyB3aXRoaW4gdGhlIHRleHQgU3RyaW5nLgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMuCiAqLwpzcGxpdEFuZFRyaW0gPSBmdW5jdGlvbih0ZXh0LCBkZWxpbWl0ZXIpIHsKCiAgICB2YXIgcmVzdWx0cyA9IFtdLAogICAgICAgIGksCiAgICAgICAgdmFsdWVzLAogICAgICAgIHZhbHVlOwogICAgaWYgKHRleHQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KCiAgICB2YWx1ZXMgPSB0ZXh0LnNwbGl0KGRlbGltaXRlcik7CiAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFsdWUgPSB2YWx1ZXNbaV0udHJpbSgpOwogICAgICAgIGlmICh2YWx1ZSAhPT0gIiIpIHsKICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdHM7Cn07CgovKioKICogQ29udmVydHMgdmFsdWUgdG8gYSBwZXJjZW50YWdlIG9mIHJhbmdlLgogKgogKiBAcGFyYW0gdmFsdWUgKE51bWJlcikgVGhlIGFjdHVhbCBudW1iZXIgdG8gYmUgY29udmVydGVkIHRvIGEgcGVyY2VudGFnZS4KICogQHBhcmFtIHJhbmdlIChOdW1iZXIpIFRoZSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzIChpLmUuIHJlcHJlc2VudHMgMTAwJSkuCiAqIEByZXR1cm4gKE51bWJlcikgVGhlIHBlcmNlbnRhZ2UuCiAqLwpjYWxjdWxhdGVQZXJjZW50YWdlID0gZnVuY3Rpb24odmFsdWUsIHJhbmdlKSB7CiAgICBpZiAocmFuZ2UgPT09IDApIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBwYXJzZUZsb2F0KCh2YWx1ZSAvIHJhbmdlKS50b1ByZWNpc2lvbigyKSkgKiAxMDA7Cn07CgovKioKICogQ3JlYXRlcyBhIG5ldyBhcnJheSBjb250YWluaW5nIG9ubHkgdGhvc2UgZWxlbWVudHMgZm91bmQgaW4gYm90aCBhcnJheXMgcmVjZWl2ZWQgYXMgYXJndW1lbnRzLgogKgogKiBAcGFyYW0gZmlyc3QgKEFycmF5KSBUaGUgZmlyc3QgYXJyYXkuCiAqIEBwYXJhbSBzZWNvbmQgKEFycmF5KSBUaGUgc2Vjb25kIGFycmF5LgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGVsZW1lbnRzIHRoYXQgZm91bmQgaW4gZmlyc3QgYW5kIHNlY29uZC4KICovCmNhbGN1bGF0ZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGZpcnN0LCBzZWNvbmQpIHsKICAgIHJldHVybiBmaXJzdC5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgIHJldHVybiBzZWNvbmQuaW5kZXhPZihlbGVtZW50KSAhPT0gLTE7CiAgICB9KTsKfTsKCmZ1bmN0aW9uIGdldFZhbHVlKG9iaiwgYXR0cmlidXRlUGF0aCkgewogICAgdmFyIHZhbHVlID0gb2JqLAogICAgICAgIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cmlidXRlUGF0aC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICB2YWx1ZSA9IHZhbHVlW2F0dHJpYnV0ZVBhdGhbaV1dOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwp9CgoKZnVuY3Rpb24gaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWcpIHsKICAgIHJldHVybiBhdHRyaWJ1dGVDb25maWcuY29tcGFyYXRvciAhPT0gdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcsIGF0dHJpYnV0ZVBhdGgpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBbXSwKICAgICAgICBhdHRyaWJ1dGVOYW1lLAogICAgICAgIGF0dHJQYXRocywKICAgICAgICBhdHRyUGF0aCwKICAgICAgICBpOwoKICAgIGZvciAoYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVDb25maWcpIHsKICAgICAgICBpZiAoYXR0cmlidXRlQ29uZmlnLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZU5hbWUpKSB7CgogICAgICAgICAgICBpZiAoaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWdbYXR0cmlidXRlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBhdHRyUGF0aCA9IGF0dHJpYnV0ZVBhdGguc2xpY2UoKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRoLnB1c2goYXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVQYXRocy5wdXNoKGF0dHJQYXRoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJQYXRoID0gYXR0cmlidXRlUGF0aC5zbGljZSgpOwogICAgICAgICAgICAgICAgYXR0clBhdGgucHVzaChhdHRyaWJ1dGVOYW1lKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRocyA9IGdldEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZ1thdHRyaWJ1dGVOYW1lXSwgYXR0clBhdGgpOwogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGF0dHJQYXRocy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVBhdGhzLnB1c2goYXR0clBhdGhzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYXR0cmlidXRlUGF0aHM7Cn0KCmZ1bmN0aW9uIGdldERldmljZVByaW50QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnKSB7CiAgICByZXR1cm4gZ2V0QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnLCBbXSk7Cn0KCmZ1bmN0aW9uIGhhc1JlcXVpcmVkQXR0cmlidXRlcyhkZXZpY2VQcmludCwgYXR0cmlidXRlQ29uZmlnKSB7CgogICAgdmFyIGF0dHJpYnV0ZVBhdGhzID0gZ2V0RGV2aWNlUHJpbnRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcpLAogICAgICAgIGksCiAgICAgICAgYXR0clZhbHVlLAogICAgICAgIGF0dHJDb25maWc7CgogICAgZm9yIChpID0gMDsgaSA8IGF0dHJpYnV0ZVBhdGhzLmxlbmd0aDsgaSsrKSB7CgogICAgICAgIGF0dHJWYWx1ZSA9IGdldFZhbHVlKGRldmljZVByaW50LCBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICBpZiAoYXR0ckNvbmZpZy5yZXF1aXJlZCAmJiBhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBsb2dnZXIud2FybmluZygiRGV2aWNlIFByaW50IHByb2ZpbGUgbWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUsICIgKyBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZSBwcmludCBoYXMgcmVxdWlyZWQgYXR0cmlidXRlcyIpOwogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGF0dHJpYnV0ZUNvbmZpZywgZGV2aWNlUHJpbnQsIGRldmljZVByaW50UHJvZmlsZXMsIG1heFBlbmFsdHlQb2ludHMpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBnZXREZXZpY2VQcmludEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZyksCiAgICAgICAgZGFvID0gc2hhcmVkU3RhdGUuZ2V0KCdfRGV2aWNlSWREYW8nKSwKICAgICAgICByZXN1bHRzLAogICAgICAgIGosCiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQsCiAgICAgICAgaSwKICAgICAgICBjdXJyZW50VmFsdWUsCiAgICAgICAgc3RvcmVkVmFsdWUsCiAgICAgICAgYXR0ckNvbmZpZywKICAgICAgICBjb21wYXJpc29uUmVzdWx0LAogICAgICAgIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICBzZWxlY3RlZFByb2ZpbGUsCiAgICAgICAgY3VyRGV2aWNlUHJpbnRQcm9maWxlLAogICAgICAgIHZhbHM7CgogICAgcmVzdWx0cyA9IFtdOwogICAgZm9yIChqID0gMDsgaiA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBjdXJEZXZpY2VQcmludFByb2ZpbGUgPSBKU09OLnBhcnNlKG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvbihkZXZpY2VQcmludFByb2ZpbGVzW2pdKSk7CiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQgPSBuZXcgQ29tcGFyaXNvblJlc3VsdCgpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdHRyaWJ1dGVQYXRocy5sZW5ndGg7IGkrKykgewoKICAgICAgICAgICAgY3VycmVudFZhbHVlID0gZ2V0VmFsdWUoZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgc3RvcmVkVmFsdWUgPSBnZXRWYWx1ZShjdXJEZXZpY2VQcmludFByb2ZpbGUuZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICAgICAgaWYgKHN0b3JlZFZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb21wYXJpc29uUmVzdWx0ID0gbmV3IENvbXBhcmlzb25SZXN1bHQoYXR0ckNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbXBhcmlzb25SZXN1bHQgPSBhdHRyQ29uZmlnLmNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBhdHRyQ29uZmlnLmFyZ3MpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJDb21wYXJpbmcgYXR0cmlidXRlIHBhdGg6ICIgKyBhdHRyaWJ1dGVQYXRoc1tpXQogICAgICAgICAgICAgICAgICAgICsgIiwgQ29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkgKyAiLCBwZW5hbHR5UG9pbnRzPSIKICAgICAgICAgICAgICAgICAgICArIGNvbXBhcmlzb25SZXN1bHQucGVuYWx0eVBvaW50cyArICIsIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU9IgogICAgICAgICAgICAgICAgICAgICsgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5hZGRDb21wYXJpc29uUmVzdWx0KGNvbXBhcmlzb25SZXN1bHQpOwogICAgICAgIH0KICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIkFnZ3JlZ2F0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKSArICIsIHBlbmFsdHlQb2ludHM9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICAgICArIGFnZ3JlZ2F0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmVzdWx0cy5wdXNoKHsKICAgICAgICAgICAga2V5OiBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICAgICAgdmFsdWU6IGRldmljZVByaW50UHJvZmlsZXNbal0KICAgICAgICB9KTsKICAgIH0KCiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXN1bHRzLnNvcnQoZnVuY3Rpb24oYSwgYikgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUoYS5rZXksIGIua2V5KTsKICAgIH0pOwogICAgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0ID0gcmVzdWx0c1swXS5rZXk7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU2VsZWN0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKQogICAgICAgICAgICArICIsIHBlbmFsdHlQb2ludHM9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgfQoKICAgIHNlbGVjdGVkUHJvZmlsZSA9IG51bGw7CiAgICBpZiAoc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgPD0gbWF4UGVuYWx0eVBvaW50cykgewogICAgICAgIHNlbGVjdGVkUHJvZmlsZSA9IHJlc3VsdHNbMF0udmFsdWU7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTZWxlY3RlZCBwcm9maWxlOiAiICsgc2VsZWN0ZWRQcm9maWxlICsKICAgICAgICAgICAgICAgICIgd2l0aCAiICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgKyAiIHBlbmFsdHkgcG9pbnRzIik7CiAgICAgICAgfQogICAgfQoKICAgIGlmIChzZWxlY3RlZFByb2ZpbGUgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyogdXBkYXRlIHByb2ZpbGUgKi8KICAgIHNlbGVjdGVkUHJvZmlsZS5wdXQoInNlbGVjdGlvbkNvdW50ZXIiLAogICAgICAgIGphdmEubGFuZy5JbnRlZ2VyLnZhbHVlT2YocGFyc2VJbnQoc2VsZWN0ZWRQcm9maWxlLmdldCgic2VsZWN0aW9uQ291bnRlciIpLCAxMCkgKyAxKSk7CiAgICBzZWxlY3RlZFByb2ZpbGUucHV0KCJsYXN0U2VsZWN0ZWREYXRlIiwgamF2YS5sYW5nLkxvbmcudmFsdWVPZihuZXcgRGF0ZSgpLmdldFRpbWUoKSkpOwogICAgc2VsZWN0ZWRQcm9maWxlLnB1dCgiZGV2aWNlUHJpbnQiLCBkZXZpY2VQcmludCk7CgogICAgdmFscyA9IFtdOwogICAgZm9yIChpID0gMDsgaSA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YWxzLnB1c2gob3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uKGRldmljZVByaW50UHJvZmlsZXNbaV0pKTsKICAgIH0KCiAgICBkYW8uc2F2ZURldmljZVByb2ZpbGVzKHVzZXJuYW1lLCByZWFsbSwgdmFscyk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIG1hdGNoRGV2aWNlUHJpbnQoKSB7CgogICAgaWYgKCF1c2VybmFtZSkgewogICAgICAgIGxvZ2dlci5lcnJvcigiVXNlcm5hbWUgbm90IHNldC4gQ2Fubm90IGNvbXBhcmUgdXNlcidzIGRldmljZSBwcmludCBwcm9maWxlcy4iKTsKICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICB9IGVsc2UgewoKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImNsaWVudCBkZXZpY2VQcmludDogIiArIGNsaWVudFNjcmlwdE91dHB1dERhdGEpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGdldFByb2ZpbGVzID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRXhwaXJlZFByb2ZpbGUoZGV2aWNlUHJpbnRQcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cGlyYXRpb25EYXRlID0gbmV3IERhdGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNlbGVjdGVkRGF0ZTsKICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uRGF0ZS5zZXREYXRlKGV4cGlyYXRpb25EYXRlLmdldERhdGUoKSAtIGNvbmZpZy5wcm9maWxlRXhwaXJhdGlvbik7CgogICAgICAgICAgICAgICAgICAgIGxhc3RTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShkZXZpY2VQcmludFByb2ZpbGUubGFzdFNlbGVjdGVkRGF0ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0U2VsZWN0ZWREYXRlIDwgZXhwaXJhdGlvbkRhdGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICBkYW8gPSBzaGFyZWRTdGF0ZS5nZXQoJ19EZXZpY2VJZERhbycpLAogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVzLAogICAgICAgICAgICAgICAgICAgICAgICBpdGVyOwoKICAgICAgICAgICAgICAgICAgICBwcm9maWxlcyA9IGRhby5nZXREZXZpY2VQcm9maWxlcyh1c2VybmFtZSwgcmVhbG0pOwoKICAgICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaXRlciA9IHByb2ZpbGVzLml0ZXJhdG9yKCk7CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgPSBpdGVyLm5leHQoKS5nZXRPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFeHBpcmVkUHJvZmlsZShwcm9maWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChwcm9maWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoInN0b3JlZCBub24tZXhwaXJlZCBwcm9maWxlczogIiArIHJlc3VsdHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRldmljZVByaW50ID0gSlNPTi5wYXJzZShjbGllbnRTY3JpcHRPdXRwdXREYXRhKSwKICAgICAgICAgICAgZGV2aWNlUHJpbnRQcm9maWxlcyA9IGdldFByb2ZpbGVzKCk7CgogICAgICAgIGlmICghaGFzUmVxdWlyZWRBdHRyaWJ1dGVzKGRldmljZVByaW50LCBjb25maWcuYXR0cmlidXRlcykpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZVByaW50Lmhhc1JlcXVpcmVkQXR0cmlidXRlczogZmFsc2UiKTsKICAgICAgICAgICAgLy8gV2lsbCBmYWlsIHRoaXMgbW9kdWxlIGJ1dCBmYWxsLXRocm91Z2ggdG8gbmV4dCBtb2R1bGUuIFdoaWNoIHNob3VsZCBiZSBPVFAuCiAgICAgICAgICAgIGF1dGhTdGF0ZSA9IEZBSUxFRDsKICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGNvbmZpZy5hdHRyaWJ1dGVzLCBkZXZpY2VQcmludCwgZGV2aWNlUHJpbnRQcm9maWxlcywgY29uZmlnLm1heFBlbmFsdHlQb2ludHMpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJkZXZpY2VQcmludC5oYXNWYWxpZFByb2ZpbGU6IHRydWUiKTsKICAgICAgICAgICAgYXV0aFN0YXRlID0gU1VDQ0VTUzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiZGV2aWNlUHJpbnQuaGFzVmFsaWRQcm9maWxlOiBmYWxzZSIpOwogICAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoJ2RldmljZVByaW50UHJvZmlsZScsIEpTT04uc3RyaW5naWZ5KGRldmljZVByaW50KSk7CiAgICAgICAgICAgIC8vIFdpbGwgZmFpbCB0aGlzIG1vZHVsZSBidXQgZmFsbC10aHJvdWdoIHRvIG5leHQgbW9kdWxlLiBXaGljaCBzaG91bGQgYmUgT1RQLgogICAgICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICAgICAgfQogICAgfQp9CgptYXRjaERldmljZVByaW50KCk7\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"e4417108-4dc9-4ffc-9995-3cd490adf2ed\",\"name\":\"Collect PIN\",\"description\":\"Collect PIN\",\"script\":\"LyogQ29sbGVjdCBQSU4KICogCiAqIENvbGxlY3QgUElOIHVzaW5nIHBhc3N3b3JkIGNhbGxiYWNrIGFuZCBzdG9yZSBpbiB1c2VyIHByb2ZpbGUuCiAqIAogKiBUaGlzIHNjcmlwdCBtdXN0IGJlIHBhcmFtZXRyaXplZC4gSXQgbWF5IG5vdCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKi8KKGZ1bmN0aW9uICgpIHsKICAKICAvKioqIEJFR0lOIFBBUkFNRVRSSVpBVElPTiAqKiovCiAgdmFyIHBpbkF0dHJOYW1lID0gJ2ZyVW5pbmRleGVkU3RyaW5nMyc7CiAgdmFyIHBpblByb21wdCA9ICdOZXcgUElOJzsKICAvKioqKiBFTkQgUEFSQU1FVFJJWkFUSU9OICoqKiovCiAgCiAgb3V0Y29tZSA9ICd0cnVlJzsKICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5QYXNzd29yZENhbGxiYWNrCiAgKQogIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgbmV3IGZyLlBhc3N3b3JkQ2FsbGJhY2socGluUHJvbXB0LCBmYWxzZSkKICAgICkuYnVpbGQoKTsKICB9CiAgZWxzZSB7CiAgICAgIHZhciBwaW4gPSBuZXcgamF2YS5sYW5nLlN0cmluZyhjYWxsYmFja3MuZ2V0KDApLmdldFBhc3N3b3JkKCkpOwogICAgc2V0VHJhbnNpZW50T2JqZWN0QXR0cmlidXRlKHBpbkF0dHJOYW1lLCBwaW4pOwogICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICB9CgogIC8qCiAgICogU3RvcmUgYXR0cmlidXRlcyBpbiB0cmFuc2llbnQgc3RhdGUgZm9yIHVzZSB3aXRoIHRoZSBDcmVhdGUvUGF0Y2ggT2JqZWN0IG5vZGVzLgogICAqLwogIGZ1bmN0aW9uIHNldFRyYW5zaWVudE9iamVjdEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgewogICAgdmFyIHRyYW5zaWVudFN0b3JhZ2UgPSB0cmFuc2llbnRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKICAgIGlmICh0cmFuc2llbnRTdG9yYWdlICYmIHZhbHVlKSB7CiAgICAgIGlmICh0cmFuc2llbnRTdG9yYWdlLnB1dCkgewogICAgICAgIHRyYW5zaWVudFN0b3JhZ2UucHV0KG5hbWUsIHZhbHVlKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICB0cmFuc2llbnRTdG9yYWdlW25hbWVdID0gdmFsdWU7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHZhbHVlKSB7CiAgICAgIHRyYW5zaWVudFN0YXRlLnB1dCgib2JqZWN0QXR0cmlidXRlcyIsIEpTT04ucGFyc2UoIntcIiIrbmFtZSsiXCI6XCIiK3ZhbHVlKyJcIn0iKSk7CiAgICB9CiAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"2eb48a0c-24e0-4dac-acaf-02085c142ec5\",\"name\":\"Okta API AuthN\",\"description\":\"Integration to Okta Authentication API okta_url/api/v1/authn\",\"script\":\"LyogT2t0YSBQYXNzdGhydSBBdXRoZW50aWNhdGlvbgogKgogKiBBdXRob3JzOiBjaGljby5kZW1ldHRyb2ZmQGZvcmdlcm9jay5jb20sIHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBPa3RhIHBhc3MgdGhyb3VnaCBhdXRoZW50aWNhdGlvbiB1c2luZyBPa3RhIEF1dGhlbnRpY2F0aW9uIEFQSS4KICogCiAqIFRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCBub3Qgd29yayBwcm9wZXJseSBhcyBpcy4gCiAqIEl0IHJlcXVpcmVzIHRoZSBQbGF0Zm9ybSBVc2VybmFtZSBhbmQgUGxhdGZvcm0gUGFzc3dvcmQgY29sbGVjdG9yIG5vZGVzCiAqIGJlZm9yZSBpdCBjYW4gb3BlcmF0ZS4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSBTdWNjZXNzCiAqIC0gRmFpbHVyZQogKiAtIFRpbWVvdXQKICogLSBFcnJvcgogKi8KbG9nZ2VyLm1lc3NhZ2UoIk9rdGEgUGFzc3RocnUgQXV0aGVudGljYXRpb246IHN0YXJ0Iik7CgppZiAoc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpICYmIHRyYW5zaWVudFN0YXRlLmdldCgicGFzc3dvcmQiKSkgewogICAgICAvKgogICAgICogQkVHSU4gU0NSSVBUIENPTkZJR1VSQVRJT04KICAgICAqCiAgICAgKiBSRVBMQUNFIFdJVEggWU9VUiBPV04gT0tUQSBURU5BTlQgU0VUVElOR1MKICAgICAqCiAgICAgKi8KICAgIHZhciBPS1RBX0FQSV9VUkkgPSAiaHR0cHM6Ly9kZXYtMTgwMzA5MzMub2t0YS5jb20vYXBpL3YxL2F1dGhuLyI7CiAgICAvKgogICAgICogRU5EIFNDUklQVCBDT05GSUdVUkFUSU9OCiAgICAgKi8KCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRNZXRob2QoJ1BPU1QnKTsKICAgIHJlcXVlc3Quc2V0VXJpKE9LVEFfQVBJX1VSSSk7CiAgICByZXF1ZXN0LmdldEhlYWRlcnMoKS5hZGQoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7CiAgICAgIC8vdmFyIGJvZHkgPSAgICAgIntcInVzZXJuYW1lXCI6Ii5jb25jYXQoc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKS5jb25jYXQoIixcInBhc3N3b3JkXCI6IikuY29uY2F0KHRyYW5zaWVudFN0YXRlLmdldCgicGFzc3dvcmQiKSkuY29uY2F0KCIsXCJvcHRpb25zXCI6e1wibXVsdGlPcHRpb25hbEZhY3RvckVucm9sbFwiOnRydWUsXCJ3YXJuQmVmb3JlUGFzc3dvcmRFeHBpcmVkXCI6dHJ1ZX19Iik7CiAgICB2YXIgYm9keSA9IHsKICAgICAgICAidXNlcm5hbWUiOiBzaGFyZWRTdGF0ZS5nZXQoInVzZXJuYW1lIiksCiAgICAgICAgInBhc3N3b3JkIjogdHJhbnNpZW50U3RhdGUuZ2V0KCJwYXNzd29yZCIpLAogICAgICAgICJvcHRpb25zIjogewogICAgICAgICAgICAibXVsdGlPcHRpb25hbEZhY3RvckVucm9sbCI6IHRydWUsCiAgICAgICAgICAgICJ3YXJuQmVmb3JlUGFzc3dvcmRFeHBpcmVkIjogdHJ1ZQogICAgICAgIH0KICAgIH0KICAgICAgcmVxdWVzdC5nZXRFbnRpdHkoKS5zZXRKc29uKGJvZHkpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJPa3RhIFBhc3N0aHJ1IEF1dGhlbnRpY2F0aW9uOiBKU09OIHJlc3VsdDogIiArIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpOwoKICAgICAgaWYgKHJlc3BvbnNlLmdldFN0YXR1cygpLmdldENvZGUoKSA9PT0gMjAwICYmIHJlc3VsdC5zdGF0dXMgPT09ICJTVUNDRVNTIikgewogICAgICAgICAgb3V0Y29tZSA9ICJTdWNjZXNzIgogICAgICAgIHRyYW5zaWVudFN0YXRlLnB1dCgib2t0YVByb2ZpbGUiLCByZXN1bHQuX2VtYmVkZGVkLnVzZXIucHJvZmlsZSk7CiAgICB9IGVsc2UgewogICAgICAgIC8qIE91dGNvbWVzOgogICAgICAgICAqIC0gU3VjY2VzcwogICAgICAgICAqIC0gRmFpbHVyZQogICAgICAgICAqIC0gVGltZW91dAogICAgICAgICAqIC0gRXJyb3IKICAgICAgICAgKgogICAgICAgICAqIEV4cGVjdGVkL2tub3duIEVycm9yIENvZGVzOgogICAgICAgICAqIEUwMDAwMDA0IC0gQXV0aGVudGljYXRpb24gZmFpbGVkLgogICAgICAgICAqIEUwMDAwMDAzIC0gVGhlIHJlcXVlc3QgYm9keSB3YXMgbm90IHdlbGwtZm9ybWVkCiAgICAgICAgICovCiAgICAgIAogICAgLyoKewogICAgImV4cGlyZXNBdCI6ICIyMDIxLTEwLTE0VDIyOjE1OjA0LjAwMFoiLAogICAgInN0YXR1cyI6ICJTVUNDRVNTIiwKICAgICJzZXNzaW9uVG9rZW4iOiAiMjAxMTFGTlZzZVQzV3lDekJIRkJpM2RZdHg5ODBGSGVuNDZRS2xXWFJOVGUxa1JlZjNHUXUxVyIsCiAgICAiX2VtYmVkZGVkIjogewogICAgICAgICJ1c2VyIjogewogICAgICAgICAgICAiaWQiOiAiMDB1MXhxdzg1MWRFcU0xWTE1ZDciLAogICAgICAgICAgICAicGFzc3dvcmRDaGFuZ2VkIjogIjIwMjEtMDktMjFUMTg6MjY6MjUuMDAwWiIsCiAgICAgICAgICAgICJwcm9maWxlIjogewogICAgICAgICAgICAgICAgImxvZ2luIjogImNoaWNvQGNyb3NzZml0aGlnaHZvbHRhZ2UuY29tIiwKICAgICAgICAgICAgICAgICJmaXJzdE5hbWUiOiAiY2hpY28iLAogICAgICAgICAgICAgICAgImxhc3ROYW1lIjogImRlbWUiLAogICAgICAgICAgICAgICAgImxvY2FsZSI6ICJlbiIsCiAgICAgICAgICAgICAgICAidGltZVpvbmUiOiAiQW1lcmljYS9Mb3NfQW5nZWxlcyIKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCiAgICAiX2xpbmtzIjogewogICAgICAgICJjYW5jZWwiOiB7CiAgICAgICAgICAgICJocmVmIjogImh0dHBzOi8vZGV2LTE4MDMwOTMzLm9rdGEuY29tL2FwaS92MS9hdXRobi9jYW5jZWwiLAogICAgICAgICAgICAiaGludHMiOiB7CiAgICAgICAgICAgICAgICAiYWxsb3ciOiBbCiAgICAgICAgICAgICAgICAgICAgIlBPU1QiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KKi8KCiAgLyoKICBGQUlMRUQKICB7CiAgICAiZXJyb3JDb2RlIjogIkUwMDAwMDA0IiwKICAgICJlcnJvclN1bW1hcnkiOiAiQXV0aGVudGljYXRpb24gZmFpbGVkIiwKICAgICJlcnJvckxpbmsiOiAiRTAwMDAwMDQiLAogICAgImVycm9ySWQiOiAib2FlMVkzS2tfV3ZSQU9CU0RlRzlxZXlIUSIsCiAgICAiZXJyb3JDYXVzZXMiOiBbXQp9CiovCiAgICAgICAgdHJhbnNpZW50U3RhdGUucHV0KCJva3RhUmVzdWx0IiwgcmVzdWx0KTsKICAgICAgICBpZiAocmVzdWx0LnRpbWVkX291dCkgewogICAgICAgICAgICBvdXRjb21lID0gIlRpbWVvdXQiOwogICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmVycm9yQ29kZSA9PT0gIkUwMDAwMDA0IikgewogICAgICAgICAgICBvdXRjb21lID0gIkZhaWx1cmUiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG91dGNvbWUgPSAiRXJyb3IiOwogICAgICAgIH0KICAgICAgICBsb2dnZXIubWVzc2FnZSgiT2t0YSBQYXNzdGhydSBBdXRoZW50aWNhdGlvbjogZXJyb3JDb2RlID0gIi5jb25jYXQocmVzdWx0LmVycm9yQ29kZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJPa3RhIFBhc3N0aHJ1IEF1dGhlbnRpY2F0aW9uOiBlcnJvclN1bW1hcnkgPSAiLmNvbmNhdChyZXN1bHQuZXJyb3JTdW1tYXJ5KSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIk9rdGEgUGFzc3RocnUgQXV0aGVudGljYXRpb246IGVycm9ySWQgPSAiLmNvbmNhdChyZXN1bHQuZXJyb3JJZCkpOwogICAgfQp9IGVsc2UgewogICAgICBvdXRjb21lID0gIkVycm9yIjsKICAgICAgbG9nZ2VyLm1lc3NhZ2UoIk9rdGEgUGFzc3RocnUgQXV0aGVudGljYXRpb246IE5vIHVzZXIgb3IgcGFzc3dvcmQgZm91bmQgaW4gc2hhcmVkIHN0YXRlISBVc2UgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGNvbGxlY3RvciBub2RlcyBiZWZvcmUgdGhpcyBzY3JpcHQgdG8gcG9wdWxhdGUgc2hhcmVkIGFuZCB0cmFuc2llbnQgc3RhdGVzISciKTsKfQpsb2dnZXIubWVzc2FnZSgiT2t0YSBQYXNzdGhydSBBdXRoZW50aWNhdGlvbjogRW5kIChvdXRjb21lPSIuY29uY2F0KG91dGNvbWUpLmNvbmNhdCgiKSIpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"71545db5-ce01-46b1-b79f-d41af36bd548\",\"name\":\"Onfido-CaptureEvidence\",\"description\":\"Capture Evidence\",\"script\":\"bG9nZ2VyLmVycm9yKCJPbmZpZG8tQ2FwdHVyZUV2aWRlbmNlOiBTdGFydCIpOwovKgogKiAhISEgRXh0ZW5kIHlvdXIgYXV0aGVudGljYXRpb24gc2Vzc2lvbiB0aW1lIHNvIHlvdXIgaWRlbnRpdHkgcHJvb2ZpbmcgZmxvd3MgZG9uJ3QgdGltZSBvdXQgISEhCiAqCiAqIEF1dGhlbnRpY2F0aW9uID4gU2V0dGluZ3MgPiBUcmVlcyA+IE1heCBEdXJhdGlvbiAoTWludXRlcykKICoKICogU2V0IHRvIDE1IG1pbnV0ZXMuCiAqCiAqLwoKLyoKICogQkVHSU4gU0NSSVBUIENPTkZJR1VSQVRJT04KICovCnZhciBvbmZpZG9fYXV0aF90b2tlbiA9IFN0cmluZyhzaGFyZWRTdGF0ZS5nZXQoIm9uZmlkb0F1dGhUb2tlbiIpKTsKdmFyIG9uZmlkb19kaWFsb2dfdGl0bGUgPSAiSm9pbiB0aGUgRXhwYW5zZSBmYW1pbHkhIjsKdmFyIG9uZmlkb19kaWFsb2dfbXNnMSA9ICJUbyBvcGVuIGFuIEV4cGFuc2UgYWNjb3VudCwgd2Ugd2lsbCBuZWVkIHRvIHZlcmlmeSB5b3VyIGlkZW50aXR5LiI7CnZhciBvbmZpZG9fZGlhbG9nX21zZzIgPSAiSXQgd2lsbCBvbmx5IHRha2UgYSBjb3VwbGUgb2YgbWludXRlcy4iOwp2YXIgb25maWRvX2NvdW50cnlfY29kZSA9ICJVUyI7Ci8qCiAqIEVORCBTQ1JJUFQgQ09ORklHVVJBVElPTgogKi8KCnZhciBtb2JpbGUgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHNoYXJlZFN0YXRlLmdldCgiX2lkIiksICJ0ZWxlcGhvbmVOdW1iZXIiKTsKdmFyIHNtc051bWJlciA9ICIiOwppZiAobW9iaWxlICYmIG1vYmlsZS5pdGVyYXRvcigpLmhhc05leHQoKSkgewogICAgc21zTnVtYmVyID0gU3RyaW5nKG1vYmlsZS5pdGVyYXRvcigpLm5leHQoKS50b1N0cmluZygpKTsKfQoKLy8gSW5qZWN0IE9uZmlkbyBTREsgaW50byBsb2dpbiBwYWdlCm9uZmlkb1NjcmlwdCA9IFN0cmluZygidmFyIGJvZHk9ZG9jdW1lbnQuYm9keTtcbiIgKwogICAgInZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiIgKwogICAgImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWxsYmFja3NQYW5lbCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4iICsKICAgICJ2YXIgb25maWRvX2RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4iICsKICAgICJvbmZpZG9fZGl2LmlkPVwib25maWRvLW1vdW50XCI7XG4iICsKICAgICJzY3JpcHQuc3JjID0gJ2h0dHBzOi8vYXNzZXRzLm9uZmlkby5jb20vd2ViLXNkay1yZWxlYXNlcy81LjIuMS9vbmZpZG8ubWluLmpzJztcbiIgKwogICAgInZhciBoZWFkID0gZG9jdW1lbnQuaGVhZDsgXG4gIiArCiAgICAidmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTsgIFxuIiArCiAgICAiICAgICBsaW5rLnR5cGUgPSBcInRleHQvY3NzXCI7IFxuICIgKwogICAgIiAgICAgbGluay5yZWwgPSBcInN0eWxlc2hlZXRcIjsgXG4gIiArCiAgICAiICAgICBsaW5rLmhyZWYgPSAnaHR0cHM6Ly9hc3NldHMub25maWRvLmNvbS93ZWItc2RrLXJlbGVhc2VzLzUuMi4xL3N0eWxlLmNzcyc7IFxuICIgKwogICAgIiAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspOyBcbiAiICsKICAgICI7XG4iICsKICAgICJ2YXIgb25maWRvID0ge307XG4iICsKICAgICJzY3JpcHQub25sb2FkPWZ1bmN0aW9uKCkge1xuIiArCiAgICAiICAgIG9uZmlkbz1PbmZpZG8uaW5pdCh7XG4iICsKICAgICIgICAgICAgdG9rZW46ICciICsgb25maWRvX2F1dGhfdG9rZW4gKyAiJywgXG4iICsKICAgICIgICAgICAgdXNlTW9kYWw6IHRydWUsIFxuIiArCiAgICAiICAgICAgIGlzTW9kYWxPcGVuOiB0cnVlLCBcbiIgKwogICAgIiAgICAgICBzbXNOdW1iZXJDb3VudHJ5Q29kZTogJyIgKyBvbmZpZG9fY291bnRyeV9jb2RlICsgIicsIFxuIiArCiAgICAiICAgICAgIHVzZXJEZXRhaWxzOiB7IFxuIiArCiAgICAiICAgICAgICAgICBzbXNOdW1iZXI6ICciICsgc21zTnVtYmVyICsgIicgXG4iICsKICAgICIgICAgICAgfSwgXG4iICsKICAgICIgICAgICAgc3RlcHM6IFtcbiIgKwogICAgIiAgICAgICAgICAge1xuIiArCiAgICAiICAgICAgICAgICAgICAgdHlwZTond2VsY29tZScsXG4iICsKICAgICIgICAgICAgICAgICAgICBvcHRpb25zOntcbiIgKwogICAgIiAgICAgICAgICAgICAgICAgICB0aXRsZTonIiArIG9uZmlkb19kaWFsb2dfdGl0bGUgKyAiJyxcbiIgKwogICAgIiAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbnM6W1xuIiArCiAgICAiICAgICAgICAgICAgICAgICAgICAgICAnIiArIG9uZmlkb19kaWFsb2dfbXNnMSArICInLFxuIiArCiAgICAiICAgICAgICAgICAgICAgICAgICAgICAnIiArIG9uZmlkb19kaWFsb2dfbXNnMiArICInLFxuIiArCiAgICAiICAgICAgICAgICAgICAgICAgIF1cbiIgKwogICAgIiAgICAgICAgICAgICAgIH1cbiIgKwogICAgIiAgICAgICAgICB9LFxuIiArCiAgICAiICAgICAgICAgICdkb2N1bWVudCcsXG4iICsKICAgICIgICAgICAgICAgJ2ZhY2UnLFxuIiArCiAgICAiICAgICAgICAgICdjb21wbGV0ZScsXG4iICsKICAgICIgICAgICAgXSxcbiIgKwogICAgIiAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbihkYXRhKXsgY29uc29sZS5sb2coJ0RPTkUnKTsgb25maWRvLnNldE9wdGlvbnMoeyBpc01vZGFsT3BlbjpmYWxzZSB9KTsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ2luQnV0dG9uXzAnKS5jbGljaygpOyB9IFxuIiArCiAgICAiICAgIH0pXG4iICsKICAgICJ9O1xuIiArCiAgICAiZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuIik7Cgp2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLAogICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5OYW1lQ2FsbGJhY2ssCiAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKKTsKCndpdGggKGZyKSB7CiAgICBpZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgICAgIGxvZ2dlci5lcnJvcigiT25maWRvLUNhcHR1cmVFdmlkZW5jZTogU2VuZGluZyBjYWxsYmFja3MiKTsKICAgICAgICBhY3Rpb24gPSBBY3Rpb24uc2VuZChuZXcgU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKG9uZmlkb1NjcmlwdCkpLmJ1aWxkKCk7CiAgICB9IGVsc2UgewogICAgICAgIGxvZ2dlci5lcnJvcigiT25maWRvLUNhcHR1cmVFdmlkZW5jZTogRW5kIChvdXRjb21lPXRydWUpIik7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8oInRydWUiKS5idWlsZCgpOwogICAgfQp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"169150da-0bd1-4866-8095-eae0bbc269e4\",\"name\":\"Collect Message Node Config\",\"description\":\"Collect all the configuration items required for the Message Node to function properly.\",\"script\":\"LyogQ29sbGVjdCBNZXNzYWdlIE5vZGUgQ29uZmlnCiAqIAogKiBDb2xsZWN0IGFsbCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyByZXF1aXJlZCBmb3IgdGhlIE1lc3NhZ2UgTm9kZSB0byBmdW5jdGlvbiBwcm9wZXJseS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqLwooZnVuY3Rpb24gKCkgewogICAgb3V0Y29tZSA9ICJ0cnVlIjsKICAgICAgdmFyIGNvbmZpZyA9IHsKICAgICAgICAibWVzc2FnZSI6IHsiZW4iOiAiSSBiZWxpZXZlIEkgY2FuIGZseSEifSwKICAgICAgICAibWVzc2FnZVllcyI6IHsiZW4iOiAiR2xvcmlvdXMhIn0sCiAgICAgICAgIm1lc3NhZ2VObyI6IHsiZW4iOiAiSW5jb25jZWl2YWJsZSEifQogICAgfTsKICAgICAgdmFyIHNjcmlwdCA9ICIiOwogICAgc2NyaXB0ICs9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCgiOwogICAgc2NyaXB0ICs9ICIgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JykiOwogICAgc2NyaXB0ICs9ICIpLmZvckVhY2goIjsKICAgIHNjcmlwdCArPSAiICAgIGZ1bmN0aW9uIChpbnB1dCxpKSB7IjsKICAgIHNjcmlwdCArPSAiICAgICAgICBjb25zb2xlLmxvZygnaW5wdXQgJytpKTsiCiAgICBzY3JpcHQgKz0gIiAgICAgICAgdmFyIGNvbmZpZyA9IEpTT04ucGFyc2UoJyIrSlNPTi5zdHJpbmdpZnkoY29uZmlnKSsiJyk7IjsKICAgIHNjcmlwdCArPSAiICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZyk7IjsKICAgIHNjcmlwdCArPSAiICAgICAgICBpZiAoaW5wdXQudHlwZSA9PT0gJ3RleHQnKSB7IjsKICAgIHNjcmlwdCArPSAiICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGNvbmZpZ1trZXlzW2ldXS5lbik7IjsKICAgIHNjcmlwdCArPSAiICAgICAgICAgICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudCggJ2lucHV0JyAsIHsna2V5JzonRW50ZXInfSApKTsiOwogICAgc2NyaXB0ICs9ICIgICAgICAgIH0iOwogICAgc2NyaXB0ICs9ICIgICAgfSI7CiAgICBzY3JpcHQgKz0gIik7IjsKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suTmFtZUNhbGxiYWNrLAogICAgICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawogICAgKQogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLk5hbWVDYWxsYmFjaygibWVzc2FnZSIsIGNvbmZpZy5tZXNzYWdlLmVuKSwKICAgICAgICAgICAgbmV3IGZyLk5hbWVDYWxsYmFjaygibWVzc2FnZVllcyIsIGNvbmZpZy5tZXNzYWdlWWVzLmVuKSwKICAgICAgICAgICAgbmV3IGZyLk5hbWVDYWxsYmFjaygibWVzc2FnZU5vIiwgY29uZmlnLm1lc3NhZ2VOby5lbiksCiAgICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgICBjb25maWdbY2FsbGJhY2tzLmdldCgwKS5nZXRQcm9tcHQoKV0uZW4gPSBjYWxsYmFja3MuZ2V0KDApLmdldE5hbWUoKTsKICAgICAgICAgIGNvbmZpZ1tjYWxsYmFja3MuZ2V0KDEpLmdldFByb21wdCgpXS5lbiA9IGNhbGxiYWNrcy5nZXQoMSkuZ2V0TmFtZSgpOwogICAgICAgICAgY29uZmlnW2NhbGxiYWNrcy5nZXQoMikuZ2V0UHJvbXB0KCldLmVuID0gY2FsbGJhY2tzLmdldCgyKS5nZXROYW1lKCk7CiAgICAgICAgICBub2RlU3RhdGUucHV0U2hhcmVkKCJub2RlQ29uZmlnIiwgY29uZmlnKTsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbyhvdXRjb21lKS5idWlsZCgpOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"c234ba0b-58a1-4cfd-9567-09edde980745\",\"name\":\"ForgeRock Internal: OAuth2 Access Token Modification Script\",\"description\":\"Internal token modification script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwovLyBTY3JpcHQgaXMgaW50ZW50aW9uYWxseSBlbXB0eQo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":1433147666269,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"58d29080-4563-480b-89bb-1e7719776a21\",\"name\":\"Google Profile Normalization\",\"description\":\"Normalizes raw profile data from Google\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"9e9c6c4d-5d9d-4990-9f05-d8b2b25ad52b\",\"name\":\"AA Custom Policy Engine\",\"description\":\"Custom risk policy engine combining Autonomous Access signals with external signals.\",\"script\":\"LyogQUEgQ3VzdG9tIFBvbGljeSBFbmdpbmUKICoKICogQXV0aG9yOiBtYXJjaW4uemltbnlAZm9yZ2Vyb2NrLmNvbQogKiBBZGFwdGF0aW9uczogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIEN1c3RvbSBwb2xpY3kgZW5naW5lIGNvbWJpbmluZyB0aGUgQXV0b25vbW91cyBBY2Nlc3MgcmlzayBlbmdpbmUgb3V0cHV0IHdpdGggZXh0ZXJuYWwgc3lzdGVtcyBhbmQgY3VzdG9tIHBvbGljeSBvdXRwdXQ6CiAqIAogKiAtIHVzZSBtdWx0aXBsZSByaXNrIHNjb3JpbmcgcG9saWNpZXMgKGN1cnJlbnRseSBpdCdzIHBhcnQgb2YgcmlzayBjb25maWcgZmlsZSBhbmQgdXNlZCBhY3Jvc3MgYWxsIGV2YWx1YXRpb25zKQogKiAtIGRlbGl2ZXIgY3VzdG9tIGxvZ2ljIG9mIGRlbGl2ZXJpbmcgb3V0Y29tZSAod2UgY2FuIHN1bSB0aGUgc2lnbmFscyBpbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgaGlnaGVzdCkKICogLSB1c2UgY3VzdG9tIHNpZ25hbHMgYXMgcGFydCBvZiB0aGUgKHNpbmdsZSkgcmlzayBub2RlIChmb3IgZXhhbXBsZSBhbm9ueW1pc2F0aW9uIGRldGVjdGlvbikKICogLSBleGNlcHRpb25zL292ZXJyaWRlcyAoaS5lLiBpZiB3ZSBoYXZlIHRvIGFsbG93IGEgZmxvdyB3aXRoIGhpZ2ggcmlzayBmb3Igd2hhdGV2ZXIgcmVhc29uKSAKICogCiAqIFRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCBOT1Qgd29yayBwcm9wZXJseSBhcyBpcyEKICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSBsb3cKICogLSBtZWRpdW0KICogLSBoaWdoCiAqIC0gZmFpbGVkCiAqLwooZnVuY3Rpb24gKCkgewogIC8qIAogICAqIE1VU1QgQ09ORklHVVJFIFRISVMgU0VDVElPTgogICAqIEN1c3RvbSBzaWduYWxzIHBhcmFtZXRlcnMKICAgKi8KICAKICAvLyBJUFF1YWxpdHlTY29yZSBBUEkKICB2YXIgVVNFUl9BR0VOVCA9ICJGb3JnZVJvY2siCiAgdmFyIEFQSV9LRVkgPSBzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi5pcHFzLmFwaS5rZXkiKTsKICAKICAvKgogICAqIEVORCBNQU5EQVRPUlkgQ09ORklHVVJBVElPTgogICAqLwogIAogIG91dGNvbWUgPSAiZmFpbGVkIjsgLy9kZWZhdWx0IG91dGNvbWUKICAvKgogICAgUmlzayBQb2xpY3kgLSBTaWduYWwgU2NvcmVzCiAgKi8KICB2YXIgYWFfaW1wb3NzaWJsZV90cmF2ZWxfc2NvcmUgPSAyMTsKICB2YXIgYWFfY3JlZGVudGlhbF9zdHVmZmluZ19zY29yZSA9IDEwMDsKICB2YXIgYWFfYXV0b21hdGVkX3VzZXJfYWdlbnRfc2NvcmUgPSAyNTsKICB2YXIgYWFfYnJ1dGVfZm9yY2Vfc2NvcmUgPSAxMDA7CiAgdmFyIGFhX3N1c3BpY2lvdXNfaXBfc2NvcmUgPSAzNTsKICAvKgogICAgUmlzayBQb2xpY3kgLSBDdXN0b20gU2lnbmFscwogICovCiAgdmFyIGFhX3VzZV9hbm9ueW1pemVyX2RldGVjdGlvbiA9IDE7CiAgdmFyIGN1c3RvbV9hYV90b3JfZGV0ZWN0ZWRfc2NvcmUgPSA1MDsKICB2YXIgY3VzdG9tX2FhX3Zwbl9kZXRlY3RlZF9zY29yZSA9IDIwOwogIHZhciBjdXN0b21fYWFfcHJveHlfZGV0ZWN0ZWRfc2NvcmUgPSAyMDsKICAvKgogICAgUmlzayBQb2xpY3kgLSBUaHJlc2hvbGRzIEFuZCBFeHRyYSBGZWF0dXJlcwogICovCiAgdmFyIGFhX21lZGl1bV9yaXNrX3RocmVzaG9sZCA9IDMwOwogIHZhciBhYV9oaWdoX3Jpc2tfdGhyZXNob2xkID0gNzU7CiAgdmFyIGFhX21heF9zaWduYWxfY291bnRfaGlnaF9yaXNrX292ZXJyaWRlID0gOTk7CiAgLyoKICAgIFJpc2sgUG9saWN5IC0gTWV0aG9kCiAgICAgIDAgLSBoaWdoZXN0IHNjb3JlIG91dCBvZiBhbGwgdHJpZ2dlcmVkIHNpZ25hbHMKICAgICAgMSAtIHN1bW1hcnkgb2YgYWxsIHRyaWdnZXJlZCBzaWduYWxzCiAgKi8KICB2YXIgYWFfcmlza19tZXRob2Q9MTsKICAvKgogICAgUmlzayBQb2xpY3kgLSBVRUJBIG1ldGhvZAogICAgICAwIC0gaGlnaGVzdCBzY29yZSBvdXQgb2YgMyBtb2RlbHMKICAgICAgMSAtIGF2ZXJhZ2Ugc2NvcmUgb3V0IG9mIDMgbW9kZWxzCiAgKi8KICB2YXIgYWFfdWViYV9tZXRob2Q9MDsKICAvKgogICAgUmlzayBQb2xpY3kgLSBPdmVycmlkZXMKCiAgICBXaGl0ZWxpc3QgLSBmYWxzZSBwb3NpdGl2ZSBjb250cm9sCiAgICBCbGFja2xpc3QgLSBwcmV2ZW50YXRpdmUgYmxvY2sKICAgIEV4YW1wbGUgLSBpcF93aGl0ZWxpc3Qgb3IgaXBfYmxhY2tsaXN0ID0gWyI2Mi4yMS42My4zMC02Mi4yMS42My4zMCIsIjgyLjIxLjE2OC4xLTgyLjIxLjE2OC4yNTUiXTsKICAqLwogIHZhciBpcF93aGl0ZWxpc3QgPSBbXTsKICB2YXIgaXBfYmxhY2tsaXN0ID0gW107CiAgCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBUaGUgZW5naW5lICoKICAqLwogIC8vRGVmaW5lIHZhcmlhYmxlcwogIHZhciBzaWduYWxfY291bnQgPSAwOwogIHZhciBwb3MgPSAwOwogIHZhciBhcnJfc2NvcmVzID0gW107CiAgdmFyIGFycl9zY29yZXNfbW9kZWxzID0gW107CiAgdmFyIHNjb3JlID0gMDsKICB2YXIgcHJlZGljdGlvblJlc3VsdENob3BwZWQ7CiAgdmFyIHByZWRpY3Rpb25SZXN1bHRDaG9wcGVkVmFsOwogIC8vRGVmaW5lIHNpZ25hbCB2YXJpYWJsZXMgYW5kIGFzc2lnbiBkZWZhdWx0cyAobmVnYXRpdmUpCiAgdmFyIGlzX2ltcG9zc2libGVfdHJhdmVsID0gMDsKICB2YXIgaXNfY3JlZGVudGlhbF9zdHVmZmluZyA9IDA7CiAgdmFyIGlzX2F1dG9tYXRlZF91c2VyX2FnZW50ID0gMDsKICB2YXIgaXNfYnJ1dGVfZm9yY2UgPSAwOwogIHZhciBpc19zdXNwaWNpb3VzX2lwID0gMDsKICB2YXIgbW9kZWwxX3Njb3JlID0gMDsKICB2YXIgbW9kZWwyX3Njb3JlID0gMDsKICB2YXIgbW9kZWwzX3Njb3JlID0gMDsKICB2YXIgaXNBbm9ueW1pemVkUmVzdWx0OwogIC8vR2V0IHJpc2sgZGF0YQogIHZhciBwcmVkaWN0aW9uUmVzdWx0UmF3ID0gc2hhcmVkU3RhdGUuZ2V0KCJwcmVkaWN0aW9uUmVzdWx0Iik7CiAgdmFyIHByZWRpY3Rpb25SZXN1bHRTdHJpbmcgPSBwcmVkaWN0aW9uUmVzdWx0UmF3LnRvU3RyaW5nKCk7CgogIHZhciByZXN1bHQ7CgogIGZ1bmN0aW9uIGluZXRfYXRvbiAoaXApCiAgewogICAgICByZXR1cm4gaXAuc3BsaXQoIi4iKS5yZWR1Y2UoKGludCwgdikgPT4gaW50ICogMjU2ICsgK3YpOwogIH0KCgogIGZ1bmN0aW9uIGlzQW5vbnltaXplZCgpCiAgewogICAgdmFyIHBheWxvYWQgPSBzaGFyZWRTdGF0ZS5nZXQoIklQUXVhbGl0eVNjb3JlIikKCiAgICBpZiAocGF5bG9hZCkKICAgIHsKICAgICAgdmFyIGpzb25SZXN1bHQgPSBKU09OLnBhcnNlKHBheWxvYWQpOwogICAgfQogICAgZWxzZQogICAgewogICAgICB2YXIgaXBhZGRyZXNzID0gcmVxdWVzdEhlYWRlcnMuZ2V0KCJYLUZPUldBUkRFRC1GT1IiKS5nZXQoMCkuc3BsaXQoIiwiKVswXS50cmltKCk7CgogICAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgICByZXF1ZXN0LnNldE1ldGhvZCgiR0VUIik7CiAgICAgIHJlcXVlc3Quc2V0VXJpKCJodHRwczovL2lwcXVhbGl0eXNjb3JlLmNvbS9hcGkvanNvbi9pcC8iICsgQVBJX0tFWSArICIvIiArIGlwYWRkcmVzcyArICI/c3RyaWN0bmVzcz0wJmFsbG93X3B1YmxpY19hY2Nlc3NfcG9pbnRzPWZhbHNlJmZhc3Q9ZmFsc2UmbGlnaHRlcl9wZW5hbHRpZXM9ZmFsc2UmbW9iaWxlPWZhbHNlIik7CiAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiIpOwogICAgICByZXF1ZXN0LmdldEhlYWRlcnMoKS5hZGQoIlVzZXItQWdlbnQiLCBVU0VSX0FHRU5UKTsKCiAgICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgICAgaWYgKHJlc3BvbnNlLmdldFN0YXR1cygpLmdldENvZGUoKSA9PT0gMjAwKSB7CiAgICAgICAgdmFyIHBheWxvYWQgPSByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKTsKICAgICAgICB2YXIganNvblJlc3VsdCA9IEpTT04ucGFyc2UocGF5bG9hZCkKICAgICAgICAgIGlmIChqc29uUmVzdWx0LnN1Y2Nlc3MgPT09IHRydWUpIHsKICAgICAgICAgIHNoYXJlZFN0YXRlLnB1dCgiRGVidWctSVBRdWFsaXR5U2NvcmUiLCBwYXlsb2FkKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBpZiAoanNvblJlc3VsdCkgewogICAgICBpZiAoanNvblJlc3VsdC50b3IgPT09IHRydWUpIHsKICAgICAgICBpc0Fub255bWl6ZWRSZXN1bHQgPSAidG9yIjsKICAgICAgfSBlbHNlIGlmIChqc29uUmVzdWx0LnZwbiA9PT0gdHJ1ZSkgewogICAgICAgIGlzQW5vbnltaXplZFJlc3VsdD0gInZwbiI7CiAgICAgIH0gZWxzZSBpZiAoanNvblJlc3VsdC5wcm94eSA9PT0gdHJ1ZSkgewogICAgICAgIGlzQW5vbnltaXplZFJlc3VsdCA9ICJwcm94eSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaXNBbm9ueW1pemVkUmVzdWx0ID0gIm5vdF9kZXRlY3RlZCI7CiAgICAgIH0KICAgIH0KICB9CgoKICBpZihhYV91c2VfYW5vbnltaXplcl9kZXRlY3Rpb249PTEpCiAgewogICAgaXNBbm9ueW1pemVkKCk7CiAgICBzaGFyZWRTdGF0ZS5wdXQoImN1c3RvbV9hYV9pc0Fub255bWl6ZWQiLGlzQW5vbnltaXplZFJlc3VsdCk7CiAgICBpZihpc0Fub255bWl6ZWRSZXN1bHQ9PSJ2cG4iKQogICAgewogICAgICBhcnJfc2NvcmVzLnB1c2goY3VzdG9tX2FhX3Zwbl9kZXRlY3RlZF9zY29yZSk7CiAgICB9CiAgICBlbHNlIGlmKGlzQW5vbnltaXplZFJlc3VsdD09InByb3h5IikKICAgIHsKICAgICAgYXJyX3Njb3Jlcy5wdXNoKGN1c3RvbV9hYV9wcm94eV9kZXRlY3RlZF9zY29yZSk7CiAgICB9CiAgICBlbHNlIGlmKGlzQW5vbnltaXplZFJlc3VsdD09InRvciIpCiAgICB7CiAgICAgIGFycl9zY29yZXMucHVzaChjdXN0b21fYWFfdG9yX2RldGVjdGVkX3Njb3JlKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgYXJyX3Njb3Jlcy5wdXNoKDApOwogICAgfQogIH0KCiAgaWYocHJlZGljdGlvblJlc3VsdFN0cmluZy5zZWFyY2goInJpc2tfc2NvcmVfZGF0YSIpPj0wKQogIHsKICAgIG91dGNvbWUgPSAibG93IjsgLy9kZWZhdWx0IGlmIHRoZXJlJ3MgZGF0YSBmcm9tIHJpc2sgQVBJCiAgfQoKICAvL0NoZWNrIGlmIHdlJ3JlIGFzc2Vzc2luZyBpbXBvc3NpYmxlIHRyYXZlbCBhbmQgYXNzaWduIHJlc3VsdAogIHBvcyA9IHByZWRpY3Rpb25SZXN1bHRTdHJpbmcuc2VhcmNoKCJpbXBvc3NpYmxlVHJhdmVsbGVyQ2hlY2s9dHJ1ZSIpOwogIGlmKHBvcz4wKQogIHsKICAgIHBvcyA9IHByZWRpY3Rpb25SZXN1bHRTdHJpbmcuc2VhcmNoKCJpc19pbXBvc3NpYmxlX3RyYXZlbD1mYWxzZSIpOwogICAgaWYocG9zPDApCiAgICB7CiAgICAgIHNpZ25hbF9jb3VudCsrOwogICAgICBpc19pbXBvc3NpYmxlX3RyYXZlbD0xOwogICAgICBhcnJfc2NvcmVzLnB1c2goYWFfaW1wb3NzaWJsZV90cmF2ZWxfc2NvcmUpOwogICAgfQogIH0KICAvL0NoZWNrIGlmIHdlJ3JlIGFzc2Vzc2luZyBjcmVkZW50aWFsIHN0dWZmaW5nIGFuZCBhc3NpZ24gcmVzdWx0CiAgcG9zID0gcHJlZGljdGlvblJlc3VsdFN0cmluZy5zZWFyY2goImNyZWRlbnRpYWxTdHVmZmluZz10cnVlIik7CiAgaWYocG9zPjApCiAgewogICAgcG9zID0gcHJlZGljdGlvblJlc3VsdFN0cmluZy5zZWFyY2goImlzX2NyZWRlbnRpYWxfc3R1ZmZpbmc9ZmFsc2UiKTsKICAgIGlmKHBvczwwKQogICAgewogICAgICBzaWduYWxfY291bnQrKzsKICAgICAgaXNfY3JlZGVudGlhbF9zdHVmZmluZz0xOwogICAgICBhcnJfc2NvcmVzLnB1c2goYWFfY3JlZGVudGlhbF9zdHVmZmluZ19zY29yZSk7CiAgICB9CiAgfQogIC8vQ2hlY2sgaWYgd2UncmUgYXNzZXNzaW5nIGF1dG9tYXRlZCB1c2VyIGFuZ2VudCAoYW50aWJvdCkgYW5kIGFzc2lnbiByZXN1bHQKICBwb3MgPSBwcmVkaWN0aW9uUmVzdWx0U3RyaW5nLnNlYXJjaCgiYXV0b21hdGVkVXNlckFnZW50c0ZpbHRlcj10cnVlIik7CiAgaWYocG9zPjApCiAgewogICAgcG9zID0gcHJlZGljdGlvblJlc3VsdFN0cmluZy5zZWFyY2goImlzX2F1dG9tYXRlZF91c2VyX2FnZW50PWZhbHNlIik7CiAgICBpZihwb3M8MCkKICAgIHsKICAgICAgc2lnbmFsX2NvdW50Kys7CiAgICAgIGlzX2F1dG9tYXRlZF91c2VyX2FnZW50PTE7CiAgICAgIGFycl9zY29yZXMucHVzaChhYV9hdXRvbWF0ZWRfdXNlcl9hZ2VudF9zY29yZSk7CiAgICB9CiAgfQogIC8vQ2hlY2sgaWYgd2UncmUgYXNzZXNzaW5nIGJydXRlLWZvcmNlIGFuZCBhc3NpZ24gcmVzdWx0CiAgcG9zID0gcHJlZGljdGlvblJlc3VsdFN0cmluZy5zZWFyY2goImJydXRlRm9yY2VQcmV2ZW50aW9uQ2hlY2s9dHJ1ZSIpOwogIGlmKHBvcz4wKQogIHsKICAgIHBvcyA9IHByZWRpY3Rpb25SZXN1bHRTdHJpbmcuc2VhcmNoKCJpc19icnV0ZV9mb3JjZT1mYWxzZSIpOwogICAgaWYocG9zPDApCiAgICB7CiAgICAgIHNpZ25hbF9jb3VudCsrOwogICAgICBpc19icnV0ZV9mb3JjZT0xOwogICAgICBhcnJfc2NvcmVzLnB1c2goYWFfYnJ1dGVfZm9yY2Vfc2NvcmUpOwogICAgfQogIH0KICAvL0NoZWNrIGlmIHdlJ3JlIGFzc2Vzc2luZyBzdXNwaWNpb3VzIElQIGFuZCBhc3NpZ24gcmVzdWx0CiAgcG9zID0gcHJlZGljdGlvblJlc3VsdFN0cmluZy5zZWFyY2goInN1c3BpY2lvdXNJUENoZWNrPXRydWUiKTsKICBpZihwb3M+MCkKICB7CiAgICBwb3MgPSBwcmVkaWN0aW9uUmVzdWx0U3RyaW5nLnNlYXJjaCgiaXNfc3VzcGljaW91c19pcD1mYWxzZSIpOwogICAgaWYocG9zPDApCiAgICB7CiAgICAgIHNpZ25hbF9jb3VudCsrOwogICAgICBpc19zdXNwaWNpb3VzX2lwPTE7CiAgICAgIGFycl9zY29yZXMucHVzaChhYV9zdXNwaWNpb3VzX2lwX3Njb3JlKTsKICAgIH0KICB9CiAgLy9DaGVjayBpZiB3ZSdyZSBhc3Nlc3NpbmcgVUVCQSBhbmQgYXNzaWduIHJlc3VsdAogIHBvcyA9IHByZWRpY3Rpb25SZXN1bHRTdHJpbmcuc2VhcmNoKCJhbm9tYWx5RGV0ZWN0aW9uPXRydWUiKTsKICBpZihwb3M+MCkKICB7CiAgICBwb3MgPSBwcmVkaWN0aW9uUmVzdWx0U3RyaW5nLnNlYXJjaCgiY2x1c3RlcmluZ19yZXN1bHQ9Iik7CiAgICBpZihwb3M+MCkKICAgIHsKICAgICAgICBwcmVkaWN0aW9uUmVzdWx0Q2hvcHBlZD1wcmVkaWN0aW9uUmVzdWx0U3RyaW5nLnN1YnN0cmluZyhwb3MpOwogICAgICAgIHByZWRpY3Rpb25SZXN1bHRDaG9wcGVkPXByZWRpY3Rpb25SZXN1bHRDaG9wcGVkLnN1YnN0cmluZyhwcmVkaWN0aW9uUmVzdWx0Q2hvcHBlZC5zZWFyY2goInJpc2tfc2NvcmU9IikpOwogICAgICAgIHByZWRpY3Rpb25SZXN1bHRDaG9wcGVkVmFsPXByZWRpY3Rpb25SZXN1bHRDaG9wcGVkLnN1YnN0cmluZygxMSxwcmVkaWN0aW9uUmVzdWx0Q2hvcHBlZC5zZWFyY2goIiwiKSk7CiAgICAgICAgcHJlZGljdGlvblJlc3VsdENob3BwZWQ9cHJlZGljdGlvblJlc3VsdENob3BwZWQuc3Vic3RyaW5nKDExKTsKICAgICAgICBtb2RlbDFzY29yZT1wYXJzZUludChwcmVkaWN0aW9uUmVzdWx0Q2hvcHBlZFZhbCwxMCk7CgogICAgICAgIHByZWRpY3Rpb25SZXN1bHRDaG9wcGVkPXByZWRpY3Rpb25SZXN1bHRDaG9wcGVkLnN1YnN0cmluZyhwcmVkaWN0aW9uUmVzdWx0Q2hvcHBlZC5zZWFyY2goInJpc2tfc2NvcmU9IikpOwogICAgICAgIHByZWRpY3Rpb25SZXN1bHRDaG9wcGVkVmFsPXByZWRpY3Rpb25SZXN1bHRDaG9wcGVkLnN1YnN0cmluZygxMSxwcmVkaWN0aW9uUmVzdWx0Q2hvcHBlZC5zZWFyY2goIiwiKSk7CiAgICAgICAgcHJlZGljdGlvblJlc3VsdENob3BwZWQ9cHJlZGljdGlvblJlc3VsdENob3BwZWQuc3Vic3RyaW5nKDExKTsKICAgICAgICBtb2RlbDJzY29yZT1wYXJzZUludChwcmVkaWN0aW9uUmVzdWx0Q2hvcHBlZFZhbCwxMCk7CgogICAgICAgIHByZWRpY3Rpb25SZXN1bHRDaG9wcGVkPXByZWRpY3Rpb25SZXN1bHRDaG9wcGVkLnN1YnN0cmluZyhwcmVkaWN0aW9uUmVzdWx0Q2hvcHBlZC5zZWFyY2goInJpc2tfc2NvcmU9IikpOwogICAgICAgIHByZWRpY3Rpb25SZXN1bHRDaG9wcGVkVmFsPXByZWRpY3Rpb25SZXN1bHRDaG9wcGVkLnN1YnN0cmluZygxMSxwcmVkaWN0aW9uUmVzdWx0Q2hvcHBlZC5zZWFyY2goIiwiKSk7CiAgICAgICAgcHJlZGljdGlvblJlc3VsdENob3BwZWQ9cHJlZGljdGlvblJlc3VsdENob3BwZWQuc3Vic3RyaW5nKDExKTsKICAgICAgICBtb2RlbDNzY29yZT1wYXJzZUludChwcmVkaWN0aW9uUmVzdWx0Q2hvcHBlZFZhbCwxMCk7CgogICAgICAgIGFycl9zY29yZXNfbW9kZWxzLnB1c2gobW9kZWwxc2NvcmUsbW9kZWwyc2NvcmUsbW9kZWwzc2NvcmUpOwogICAgfQogIH0KCiAgLy9EZWxpdmVyIHJpc2sgc2NvcmUKICBpZihhYV91ZWJhX21ldGhvZD09MCkKICB7CiAgICBzY29yZSA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGFycl9zY29yZXNfbW9kZWxzKTsKICB9CiAgZWxzZSBpZihhYV91ZWJhX21ldGhvZD09MSkKICB7CiAgICBzY29yZSA9IGFycl9zY29yZXNfbW9kZWxzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApL2Fycl9zY29yZXNfbW9kZWxzLmxlbmd0aDsKICB9CiAgYXJyX3Njb3Jlcy5wdXNoKHNjb3JlKTsKCgogIGlmKGFhX3Jpc2tfbWV0aG9kPT0wKQogIHsKICAgIHNjb3JlID0gTWF0aC5tYXguYXBwbHkobnVsbCwgYXJyX3Njb3Jlcyk7CiAgfQogIGVsc2UgaWYgKGFhX3Jpc2tfbWV0aG9kPT09MSkKICB7CiAgICBzY29yZSA9IGFycl9zY29yZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7CiAgfQogIC8vRGVsaXZlciByaXNrIG91dGNvbWUKICBpZihzY29yZT5hYV9tZWRpdW1fcmlza190aHJlc2hvbGQpCiAgewogICAgb3V0Y29tZT0ibWVkaXVtIjsKICB9CiAgaWYoc2NvcmU+YWFfaGlnaF9yaXNrX3RocmVzaG9sZCkKICB7CiAgICBvdXRjb21lPSJoaWdoIjsKICB9CiAgaWYoc2lnbmFsX2NvdW50Pj1hYV9tYXhfc2lnbmFsX2NvdW50X2hpZ2hfcmlza19vdmVycmlkZSAmJiBvdXRjb21lPT0ibWVkaXVtIikKICB7CiAgICBvdXRjb21lPSJoaWdoIjsKICAgIHNoYXJlZFN0YXRlLnB1dCgiZGVidWctc2lnbmFsLWNvdW50LW92ZXJyaWRlIiwidHJ1ZSIpOwogIH0KCiAgLy9wcm9jZXNzIHRoZSBibGFja2xpc3QgYW5kIHdoaXRlbGlzdAogIHZhciBzcmNfaXBhZGRyZXNzOwogIHZhciBzcmNfaXBhZGRyZXNzX2RlYzsKICB2YXIgbGlzdF9maXJzdF9pcGFkZHJlc3NfZGVjOwogIHZhciBsaXN0X2xhc3RfaXBhZGRyZXNzX2RlYzsKICB2YXIgbGlzdF9lbnRyeTsKICB2YXIgbG9nbWVzc2FnZTsKICBzcmNfaXBhZGRyZXNzID0gcmVxdWVzdEhlYWRlcnMuZ2V0KCJYLUZPUldBUkRFRC1GT1IiKS5nZXQoMCkuc3BsaXQoIiwiKVswXS50cmltKCk7CiAgc3JjX2lwYWRkcmVzc19kZWMgPSBpbmV0X2F0b24oc3JjX2lwYWRkcmVzcyk7CgogIGlmKGlwX2JsYWNrbGlzdC5sZW5ndGg+MCkKICB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlwX2JsYWNrbGlzdC5sZW5ndGg7IGkrKykKICAgIHsKICAgICAgbGlzdF9lbnRyeSA9IGlwX2JsYWNrbGlzdFtpXS5zcGxpdCgiLSIpOwogICAgICBsaXN0X2ZpcnN0X2lwYWRkcmVzc19kZWM9aW5ldF9hdG9uKGxpc3RfZW50cnlbMF0pOwogICAgICBsaXN0X2xhc3RfaXBhZGRyZXNzX2RlYz1pbmV0X2F0b24obGlzdF9lbnRyeVsxXSk7CgogICAgICBpZihzcmNfaXBhZGRyZXNzX2RlYz49bGlzdF9maXJzdF9pcGFkZHJlc3NfZGVjICYmIHNyY19pcGFkZHJlc3NfZGVjPD1saXN0X2xhc3RfaXBhZGRyZXNzX2RlYykKICAgICAgewogICAgICAgICAgc2hhcmVkU3RhdGUucHV0KCJkZWJ1Zy1ibGFja2xpc3QiLCJjb25kaXRpb24gbWV0IGZvcjogIiArIHNyY19pcGFkZHJlc3MgKyAiLCAiICsgb3V0Y29tZSArICItPmhpZ2giKTsKICAgICAgICAgICBvdXRjb21lPSJoaWdoIjsKICAgICAgfQogICAgfQogIH0KICBpZihpcF93aGl0ZWxpc3QubGVuZ3RoPjApCiAgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpcF93aGl0ZWxpc3QubGVuZ3RoOyBpKyspCiAgICB7CiAgICAgIC8vbGlzdF9lbnRyeSA9IGlwX3doaXRlbGlzdFtpXS5zcGxpdCgiLSIpOwogICAgICBsaXN0X2VudHJ5ID0gaXBfd2hpdGVsaXN0W2ldLnNwbGl0KCItIik7CiAgICAgIGxpc3RfZmlyc3RfaXBhZGRyZXNzX2RlYz1pbmV0X2F0b24obGlzdF9lbnRyeVswXSk7CiAgICAgIGxpc3RfbGFzdF9pcGFkZHJlc3NfZGVjPWluZXRfYXRvbihsaXN0X2VudHJ5WzFdKTsKICAgICAgaWYoc3JjX2lwYWRkcmVzc19kZWM+PWxpc3RfZmlyc3RfaXBhZGRyZXNzX2RlYyAmJiBzcmNfaXBhZGRyZXNzX2RlYzw9bGlzdF9sYXN0X2lwYWRkcmVzc19kZWMpCiAgICAgIHsKICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoImRlYnVnLXdoaXRlbGlzdCIsImNvbmRpdGlvbiBtZXQgZm9yOiAiICsgc3JjX2lwYWRkcmVzcyArICIsICIgKyBvdXRjb21lICsgIi0+bG93Iik7CiAgICAgICAgb3V0Y29tZSA9ICJsb3ciOwogICAgICB9CiAgICB9CiAgfQoKCgogIHNoYXJlZFN0YXRlLnB1dCgnZGVidWctc2NvcmUnLHNjb3JlLnRvU3RyaW5nKCkpOwogIHNoYXJlZFN0YXRlLnB1dCgnZGVidWctc2lnbmFsLWNvdW50JyxzaWduYWxfY291bnQudG9TdHJpbmcoKSk7CiAgc2hhcmVkU3RhdGUucHV0KCdkZWJ1Zy1vdXRjb21lJyxvdXRjb21lKTsKfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"9399ac8b-3a6e-423b-95a2-6e0fd07262b1\",\"name\":\"APIProtection: Get Key And Secret\",\"description\":\"APIProtection: Get Key And Secret\",\"script\":\"bG9nZ2VyLndhcm5pbmcoIkFQSVByb3RlY3Rpb246IEdldCBLZXkgQW5kIFNlY3JldDogc3RhcnQiKTsKCi8qCiAqIEJFR0lOIFNDUklQVCBDT05GSUdVUkFUSU9OCiAqLwp2YXIgS0VZX0hFQURFUl9OQU1FID0gIngtYXBpLWtleSI7CnZhciBTRUNSRVRfSEVBREVSX05BTUUgPSAieC1hcGktc2VjcmV0IjsKdmFyIFVTRVJOQU1FX0hFQURFUl9OQU1FID0gIlgtT3BlbkFNLVVzZXJuYW1lIjsKdmFyIFBBU1NXT1JEX0hFQURFUl9OQU1FID0gIlgtT3BlbkFNLVBhc3N3b3JkIjsKLyoKICogRU5EIFNDUklQVCBDT05GSUdVUkFUSU9OCiAqLwoKb3V0Y29tZSA9ICJmYWxzZSI7Cgp2YXIga2V5ID0gZ2V0SGVhZGVyKEtFWV9IRUFERVJfTkFNRSkgfHwgcmVhZFZhbHVlKEtFWV9IRUFERVJfTkFNRSkgfHwgbnVsbDsKdmFyIHNlY3JldCA9IGdldEhlYWRlcihTRUNSRVRfSEVBREVSX05BTUUpIHx8IHJlYWRUcmFuc2llbnRWYWx1ZShTRUNSRVRfSEVBREVSX05BTUUpIHx8IG51bGw7Cgp2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoInVzZXJuYW1lIikgfHwgbnVsbDsKdmFyIHBhc3N3b3JkID0gdHJhbnNpZW50U3RhdGUuZ2V0KCJwYXNzd29yZCIpIHx8IG51bGw7CgppZiAoa2V5ICYmIHNlY3JldCkgewogICAgbG9nZ2VyLndhcm5pbmcoIkFQSVByb3RlY3Rpb246IEdldCBLZXkgQW5kIFNlY3JldDoga2V5PSIuY29uY2F0KGtleSkpOwogIAogICAgICBzdG9yZVZhbHVlKEtFWV9IRUFERVJfTkFNRSwga2V5KTsKICAgICAgc3RvcmVWYWx1ZSgidXNlcm5hbWUiLCB1c2VybmFtZSk7CiAgICAgIHNoYXJlZFN0YXRlLnB1dCgidXNlcm5hbWUiLCBrZXkpOwogICAgICAKICAgICAgc3RvcmVUcmFuc2llbnRWYWx1ZShTRUNSRVRfSEVBREVSX05BTUUsIHNlY3JldCk7CiAgICAgIHN0b3JlVHJhbnNpZW50VmFsdWUoInBhc3N3b3JkIiwgcGFzc3dvcmQpOwogICAgICB0cmFuc2llbnRTdGF0ZS5wdXQoInBhc3N3b3JkIiwgc2VjcmV0KTsKICAKICAgIG91dGNvbWUgPSAidHJ1ZSI7Cn0KCmxvZ2dlci53YXJuaW5nKCJBUElQcm90ZWN0aW9uOiBHZXQgS2V5IEFuZCBTZWNyZXQ6IGZpbmlzaCBbb3V0Y29tZT0iLmNvbmNhdChvdXRjb21lKS5jb25jYXQoIl0iKSk7CgovKgogKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcmVxdWVzdGVkIGhlYWRlcgogKi8KZnVuY3Rpb24gZ2V0SGVhZGVyKGhlYWRlck5hbWUpIHsKICAgICAgaWYgKHJlcXVlc3RIZWFkZXJzLmdldChoZWFkZXJOYW1lKSAmJiByZXF1ZXN0SGVhZGVycy5nZXQoaGVhZGVyTmFtZSkuZ2V0KDApKSB7CiAgICAgICAgcmV0dXJuIHJlcXVlc3RIZWFkZXJzLmdldChoZWFkZXJOYW1lKS5nZXQoMCkudG9TdHJpbmcoKTsKICAgIH0KICAgICAgcmV0dXJuIG51bGw7Cn0KCi8qCiAqIFN0b3JlIHZhbHVlIGZvciBBUElQcm90ZWN0aW9uIHNjcmlwdCB1c2UKICovCmZ1bmN0aW9uIHN0b3JlVmFsdWUobmFtZSwgdmFsdWUpIHsKICAgICAgdmFyIHN0b3JhZ2UgPSBzaGFyZWRTdGF0ZS5nZXQoIkFQSVByb3RlY3Rpb24iKTsKICAgIGlmIChzdG9yYWdlICYmIHZhbHVlKSB7CiAgICAgICAgICBpZiAoc3RvcmFnZS5wdXQpIHsKICAgICAgICAgICAgc3RvcmFnZS5wdXQobmFtZSwgdmFsdWUpOwogICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHN0b3JhZ2VbbmFtZV0gPSB2YWx1ZTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIGlmICh2YWx1ZSkgewogICAgICAgIHNoYXJlZFN0YXRlLnB1dCgiQVBJUHJvdGVjdGlvbiIsIEpTT04ucGFyc2UoIntcIiIrbmFtZSsiXCI6XCIiK3ZhbHVlKyJcIn0iKSk7CiAgICB9Cn0KCi8qCiAqIFJlYWQgdmFsdWUgZnJvbSBzdG9yYWdlIGZvciBBUElQcm90ZWN0aW9uIHNjcmlwdCB1c2UKICovCmZ1bmN0aW9uIHJlYWRWYWx1ZShuYW1lKSB7CiAgICAgIHZhciBzdG9yYWdlID0gc2hhcmVkU3RhdGUuZ2V0KCJBUElQcm90ZWN0aW9uIik7CiAgICBpZiAoc3RvcmFnZSkgewogICAgICAgICAgaWYgKHN0b3JhZ2UuZ2V0KSB7CiAgICAgICAgICAgIHJldHVybiBzaGFyZWRTdGF0ZS5nZXQoIkFQSVByb3RlY3Rpb24iKS5nZXQobmFtZSk7CiAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgcmV0dXJuIHN0b3JhZ2UubmFtZTsKICAgICAgICB9CiAgICB9CiAgICAgIHJldHVybiBudWxsOwp9CgovKgogKiBTdG9yZSB0cmFuc2llbnQgdmFsdWUgZm9yIEFQSVByb3RlY3Rpb24gc2NyaXB0IHVzZQogKi8KZnVuY3Rpb24gc3RvcmVUcmFuc2llbnRWYWx1ZShuYW1lLCB2YWx1ZSkgewogICAgdmFyIHRyYW5zaWVudFN0b3JhZ2UgPSB0cmFuc2llbnRTdGF0ZS5nZXQoIkFQSVByb3RlY3Rpb24iKTsKICAgIGlmICh0cmFuc2llbnRTdG9yYWdlICYmIHZhbHVlKSB7CiAgICAgICAgICBpZiAodHJhbnNpZW50U3RvcmFnZS5wdXQpIHsKICAgICAgICAgICAgdHJhbnNpZW50U3RvcmFnZS5wdXQobmFtZSwgdmFsdWUpOwogICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHRyYW5zaWVudFN0b3JhZ2VbbmFtZV0gPSB2YWx1ZTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIGlmICh2YWx1ZSkgewogICAgICAgIHRyYW5zaWVudFN0YXRlLnB1dCgiQVBJUHJvdGVjdGlvbiIsIEpTT04ucGFyc2UoIntcIiIrbmFtZSsiXCI6XCIiK3ZhbHVlKyJcIn0iKSk7CiAgICB9Cn0KCi8qCiAqIFJlYWQgdHJhbnNpZW50IHZhbHVlIGZyb20gc3RvcmFnZSBmb3IgQVBJUHJvdGVjdGlvbiBzY3JpcHQgdXNlCiAqLwpmdW5jdGlvbiByZWFkVHJhbnNpZW50VmFsdWUobmFtZSkgewogICAgICB2YXIgdHJhbnNpZW50U3RvcmFnZSA9IHRyYW5zaWVudFN0YXRlLmdldCgiQVBJUHJvdGVjdGlvbiIpOwogICAgaWYgKHRyYW5zaWVudFN0b3JhZ2UpIHsKICAgICAgICAgIGlmICh0cmFuc2llbnRTdG9yYWdlLmdldCkgewogICAgICAgICAgICByZXR1cm4gdHJhbnNpZW50U3RhdGUuZ2V0KCJBUElQcm90ZWN0aW9uIikuZ2V0KG5hbWUpOwogICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHJldHVybiB0cmFuc2llbnRTdG9yYWdlLm5hbWU7CiAgICAgICAgfQogICAgfQogICAgICByZXR1cm4gbnVsbDsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"fe35a8fb-31b1-441c-bb9b-27932565061c\",\"name\":\"Admin_MfaGetApp\",\"description\":\"null\",\"script\":\"LyoKVGhpcyBjcmVhdGVzIHRoZSBmb2xsb3dpbmcgY2FsbGJhY2tzOgotIFRleHRPdXRwdXRDYWxsYmFjazogRGlzcGxheSB0aGUgc3RlcCB0aXRsZSBhbmQgZGVzY3JpcHRpb24KLSBDb25maXJtYXRpb25DYWxsYmFjazogRGlzcGxheSB0aGUgIk5leHQiIGJ1dHRvbgotIEhpZGRlblZhbHVlQ2FsbGJhY2s6IENhcHR1cmVzIHRoZSAiR2V0IGFwcCIgb3B0aW9uLCBpZiBzZWxlY3RlZAotIFNjcmlwdFRleHRPdXRwdXRDYWxsYmFjazogQ3JlYXRlcyBhICJEb3dubG9hZCB0aGUgYXBwIiBsaW5rIGJ1dHRvbiBhbmQgcG9zaXRpb25zIGl0IGJlbG93IHRoZSAiTmV4dCIgYnV0dG9uCiovCgp2YXIgdG9rZW4gPSBnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4Jyk7CnZhciBsb2FkaW5nTWVzc2FnZSA9ICdMb2FkaW5nLi4uJzsKdmFyIGxpbmtCdXR0b24gPSAiPGJ1dHRvbiBpZD0nZ2V0YXBwLWxpbmstIi5jb25jYXQodG9rZW4pLmNvbmNhdCgiJyBjbGFzcz0nYnRuIGJ0bi1ibG9jayBidG4tbGluaycgdHlwZT0nc3VibWl0Jz5Eb3dubG9hZCB0aGUgYXBwPC9idXR0b24+Iik7CnZhciBtZXNzYWdlID0gIjxoMiBjbGFzcz0naDInPlNldCB1cCB0aGUgRm9yZ2VSb2NrIEF1dGhlbnRpY2F0b3I8L2gyPjxkaXYgc3R5bGU9J21hcmdpbi1ib3R0b206MWVtJz5UbyBnZXQgc3RhcnRlZCwgeW91IG5lZWQgdG8gcmVnaXN0ZXIgeW91ciBkZXZpY2UgdXNpbmcgdGhlIEZvcmdlUm9jayBBdXRoZW50aWNhdG9yIGFwcC48L2Rpdj4iOwp2YXIgY2hvaWNlcyA9IFsnTmV4dCddOwp2YXIgZGVmYXVsdENob2ljZSA9IDA7CnZhciBnZXRBcHBWYWx1ZSA9ICdHZXQgYXBwJzsKdmFyIGdldEFwcElucHV0SWQgPSAnZ2V0YXBwLWlucHV0LScuY29uY2F0KHRva2VuKTsKCnZhciBzZXR1cFBhZ2VTY3JpcHQgPQogICd2YXIgc2V0dXBQYWdlID0gZnVuY3Rpb24oKSB7Jy5jb25jYXQoCiAgJyAgdmFyIGdldEFwcElucHV0RWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCInKS5jb25jYXQoZ2V0QXBwSW5wdXRJZCkuY29uY2F0KCciKTsnKS5jb25jYXQoCiAgJyAgdmFyIG1lc3NhZ2VFbGVtOycpLmNvbmNhdCgKICAnICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJjYWxsYmFjay1jb21wb25lbnQiKS5mb3JFYWNoKCcpLmNvbmNhdCgKICAnICAgIGZ1bmN0aW9uIChlKSB7JykuY29uY2F0KAogICcgICAgICB2YXIgbSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7JykuY29uY2F0KAogICcgICAgICBpZiAobS5maXJzdENoaWxkICYmIG0uZmlyc3RDaGlsZC5ub2RlTmFtZSA9PSAiI3RleHQiICYmIG0uZmlyc3RDaGlsZC5ub2RlVmFsdWUudHJpbSgpID09ICInKS5jb25jYXQobG9hZGluZ01lc3NhZ2UpLmNvbmNhdCgnIikgeycpLmNvbmNhdCgKICAnICAgICAgICBtZXNzYWdlRWxlbSA9IG07JykuY29uY2F0KAogICcgICAgICB9JykuY29uY2F0KAogICcgICAgfScpLmNvbmNhdCgKICAnICApOycpLmNvbmNhdCgKICAnICBpZiAoIWdldEFwcElucHV0RWxlbSB8fCAhbWVzc2FnZUVsZW0pIHsnKS5jb25jYXQoCiAgJyAgICByZXR1cm4gc2V0VGltZW91dChzZXR1cFBhZ2UsIDUwKTsnKS5jb25jYXQoCiAgJyAgfScpLmNvbmNhdCgKICAnICB2YXIgc2tpcENvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOycpLmNvbmNhdCgKICAnICBza2lwQ29udGFpbmVyLnN0eWxlID0gIndpZHRoOjEwMCUiOycpLmNvbmNhdCgKICAnICBza2lwQ29udGFpbmVyLmlubmVySFRNTCA9ICInKS5jb25jYXQobGlua0J1dHRvbikuY29uY2F0KCciOycpLmNvbmNhdCgKICAnICBnZXRBcHBJbnB1dEVsZW0ucGFyZW50Tm9kZS5hcHBlbmQoc2tpcENvbnRhaW5lcik7JykuY29uY2F0KAogICcgIG1lc3NhZ2VFbGVtLmFsaWduID0gImNlbnRlciI7JykuY29uY2F0KAogICcgIG1lc3NhZ2VFbGVtLmlubmVySFRNTCA9ICInKS5jb25jYXQobWVzc2FnZSkuY29uY2F0KCciOycpLmNvbmNhdCgKICAnICB2YXIgYmluZEdldEFwcExpbmsgPSBmdW5jdGlvbigpIHsnKS5jb25jYXQoCiAgJyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2V0YXBwLWxpbmstJykuY29uY2F0KHRva2VuKS5jb25jYXQoJyIpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsnKS5jb25jYXQoCiAgJyAgICAgIGdldEFwcElucHV0RWxlbS52YWx1ZSA9ICInKS5jb25jYXQoZ2V0QXBwVmFsdWUpLmNvbmNhdCgnIjsnKS5jb25jYXQoCiAgJyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2dpbkJ1dHRvbl8wIikuY2xpY2soKTsnKS5jb25jYXQoCiAgJyAgICAgIHJldHVybiBmYWxzZTsnKS5jb25jYXQoCiAgJyAgICB9OycpLmNvbmNhdCgKICAnICB9OycpLmNvbmNhdCgKICAnICBzZXRUaW1lb3V0KGJpbmRHZXRBcHBMaW5rLCAxMDApOycpLmNvbmNhdCgKICAnfTsnKS5jb25jYXQoCiAgJ3NldHVwUGFnZSgpOycpOwoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ29uZmlybWF0aW9uQ2FsbGJhY2ssCiAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuSGlkZGVuVmFsdWVDYWxsYmFjaywKICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKKQoKd2l0aCAoZnIpIHsKICBpZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgYWN0aW9uID0gQWN0aW9uLnNlbmQoCiAgICAgIG5ldyBUZXh0T3V0cHV0Q2FsbGJhY2soCiAgICAgICAgICBUZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICBsb2FkaW5nTWVzc2FnZQogICAgICApLAogICAgICBuZXcgQ29uZmlybWF0aW9uQ2FsbGJhY2soCiAgICAgICAgICBDb25maXJtYXRpb25DYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgIGNob2ljZXMsCiAgICAgICAgICBkZWZhdWx0Q2hvaWNlCiAgICAgICksCiAgICAgIG5ldyBIaWRkZW5WYWx1ZUNhbGxiYWNrKGdldEFwcElucHV0SWQsICdmYWxzZScpLAogICAgICBuZXcgU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNldHVwUGFnZVNjcmlwdCkKICAgICkuYnVpbGQoKQogIH0gZWxzZSB7CiAgICBpZiAoY2FsbGJhY2tzLmdldCgyKS5nZXRWYWx1ZSgpID09IGdldEFwcFZhbHVlKSB7CiAgICAgIGFjdGlvbiA9IEFjdGlvbi5nb1RvKGdldEFwcFZhbHVlKS5idWlsZCgpOwogICAgfSBlbHNlIHsKICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8oY2hvaWNlc1tjYWxsYmFja3MuZ2V0KDEpLmdldFNlbGVjdGVkSW5kZXgoKV0pLmJ1aWxkKCk7CiAgICB9CiAgfQp9CgogLyoKICAqIEdlbmVyYXRlIGEgdG9rZW4gaW4gdGhlIGRlc2lyZWQgZm9ybWF0LiBBbGwgJ3gnIGNoYXJhY3RlcnMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGEgcmFuZG9tIG51bWJlciAwLTkuCiAgKiAKICAqIEV4YW1wbGU6CiAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAqICd4eHgteHh4JyBwcm9kdWNlcyAnNDMyLTUyMScKICAqLwpmdW5jdGlvbiBnZW5lcmF0ZU51bWVyaWNUb2tlbihmb3JtYXQpIHsKICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbihjKSB7CiAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkqMTB8MDsKICAgIHZhciB2ID0gcjsKICAgIHJldHVybiB2LnRvU3RyaW5nKDEwKTsKICB9KTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"5b29c5b7-b161-4a42-a41f-d6c85316b951\",\"name\":\"Saml2 IDP Adapter Script\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT24KICogICAgICAtIHByZUF1dGhlbnRpY2F0aW9uCiAqICAgICAgLSBwcmVTZW5kUmVzcG9uc2UKICogICAgICAtIHByZVNpZ25SZXNwb25zZQogKiAgICAgIC0gcHJlU2VuZEZhaWx1cmVSZXNwb25zZQogKgogKiBQbGVhc2Ugc2VlIHRoZSBqYXZhZG9jIGZvciB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24gYW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgbWV0aG9kcy4KICogaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9TQU1MMklkZW50aXR5UHJvdmlkZXJBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBJZHBBZGFwdGVyU2NyaXB0SGVscGVyICgxKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgSWRwQWRhcHRlclNjcmlwdEhlbHBlciBjb250YWluaW5nIGhlbHBlciBtZXRob2RzLiBTZWUgSmF2YWRvYyBmb3IgbW9yZSBkZXRhaWxzLgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgyKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDMpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDQpCiAqICAgICBUaGUgb3JpZ2luYWwgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IGZyb20gU1AKICogcmVxSWQgLSBTdHJpbmcKICogICAgIFRoZSBpZCB0byB1c2UgZm9yIGNvbnRpbnVhdGlvbiBvZiBwcm9jZXNzaW5nIGlmIHRoZSBhZGFwdGVyIHJlZGlyZWN0cwogKiByZXMgLSBSZXNwb25zZSAoNSkKICogICAgIFRoZSBTQU1MIFJlc3BvbnNlCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNikKICogICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLiBUaGUgcmVmZXJlbmNlIHR5cGUgb2YgdGhpcyBpcyBPYmplY3QgYW5kIHdvdWxkIG5lZWQgdG8gYmUgY2FzdGVkIHRvIFNTT1Rva2VuLgogKiByZWxheVN0YXRlIC0gU3RyaW5nCiAqICAgICBUaGUgcmVsYXlTdGF0ZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgcmVkaXJlY3QKICogZmF1bHRDb2RlIC0gU3RyaW5nCiAqICAgICB0aGUgZmF1bHQgY29kZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogZmF1bHREZXRhaWwgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBkZXRhaWwgdGhhdCB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBTQU1MIHJlc3BvbnNlCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoNyk6CiAqICAgICBmb3IgYW55IGV4Y2VwdGlvbnMgb2NjdXJyaW5nIGluIHRoZSBhZGFwdGVyLiBUaGUgZmVkZXJhdGlvbiBwcm9jZXNzIHdpbGwgY29udGludWUKICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgaWRwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3BsdWdpbnMvc2NyaXB0ZWQvSWRwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMikgSHR0cFNlcnZsZXRSZXF1ZXN0IC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlcXVlc3QuaHRtbC4KICogKDMpIEh0dHBTZXJ2bGV0UmVzcG9uc2UgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVzcG9uc2UuaHRtbC4KICogKDQpIEF1dGhuUmVxdWVzdCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL0F1dGhuUmVxdWVzdC5odG1sLgogKiAoNSkgUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4yL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sLgogKiAoNikgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4yL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg3KSBTQU1MMkV4Y2VwdGlvbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBJRFAgQWRhcHRlciBzY3JpcHRlZCBwbHVnaW4uCiAqLwoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2luZ2xlU2lnbk9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlU2lnbk9uICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlQXV0aGVudGljYXRpb246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVBdXRoZW50aWNhdGlvbiAoKSB7CiAgICByZXR1cm4gZmFsc2U7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNlbmRSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgcmVxSWQKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIGJyb3dzZXIgcmVkaXJlY3Rpb24gaGFwcGVuZWQgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2VuZFJlc3BvbnNlICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2lnblJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIHJlcwogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTaWduUmVzcG9uc2UgKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgZmF1bHRDb2RlCiAqICAgICBmYXVsdERldGFpbAogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlICgpIHsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"fbc563cb-eced-4e1b-9cd4-022680347668\",\"name\":\"FRAAS-7955 Show Object Values\",\"description\":\"FRAAS-7955 Show Object Values\",\"script\":\"dmFyIG91dGNvbWUgPSB0cnVlOwoKLy8gUmVxdWlyZXMgSWRlbnRpZnkgRXhpc3RpbmcgVXNlciBhdXRoIG5vZGUgdG8gcmV0cmlldmUgcmVhbCB1c2VyIElEIGZyb20gSURNCnZhciB1c2VyaWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwoKLy8gUmV0cmlldmUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZXMKdmFyIHVzZXJOYW1lID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZSh1c2VyaWQsICJ1aWQiKS5pdGVyYXRvcigpLm5leHQoKS50b1N0cmluZygpOwp2YXIgZmlyc3ROYW1lID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZSh1c2VyaWQsICJnaXZlbk5hbWUiKS5pdGVyYXRvcigpLm5leHQoKS50b1N0cmluZygpOwp2YXIgbGFzdE5hbWUgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJpZCwgInNuIikuaXRlcmF0b3IoKS5uZXh0KCkudG9TdHJpbmcoKTsKdmFyIGVtYWlsID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZSh1c2VyaWQsICJtYWlsIikuaXRlcmF0b3IoKS5uZXh0KCkudG9TdHJpbmcoKTsKCnZhciBhbmNob3IgPSAiYW5jaG9yLSIuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CnZhciBoYWxpZ24gPSAibGVmdCI7CnZhciBtZXNzYWdlID0gIjxoND5PYmplY3QgVmFsdWVzPC9oND4iLmNvbmNhdCgKICAgICI8cD48Yj5Vc2VybmFtZTwvYj46ICIpLmNvbmNhdCh1c2VyTmFtZSkuY29uY2F0KCI8L3A+IikuY29uY2F0KAogICAgIjxwPjxiPkZpcnN0IE5hbWU8L2I+OiAiKS5jb25jYXQoZmlyc3ROYW1lKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+TGFzdCBOYW1lPC9iPjogIikuY29uY2F0KGxhc3ROYW1lKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+RW1haWw8L2I+OiAiKS5jb25jYXQoZW1haWwpLmNvbmNhdCgiPC9wPiIpCnZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4iLmNvbmNhdCgKICAiZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2FsbGJhY2stY29tcG9uZW50JykpLmZvckVhY2goXG4iKS5jb25jYXQoCiAgImZ1bmN0aW9uIChlKSB7XG4iKS5jb25jYXQoCiAgIiAgdmFyIG1lc3NhZ2UgPSBlLmZpcnN0RWxlbWVudENoaWxkO1xuIikuY29uY2F0KAogICIgIGlmIChtZXNzYWdlLmZpcnN0Q2hpbGQgJiYgbWVzc2FnZS5maXJzdENoaWxkLm5vZGVOYW1lID09ICcjdGV4dCcgJiYgbWVzc2FnZS5maXJzdENoaWxkLm5vZGVWYWx1ZS50cmltKCkgPT0gJyIpLmNvbmNhdChhbmNob3IpLmNvbmNhdCgiJykge1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5jbGFzc05hbWUgPSBcInRleHQtbGVmdFwiO1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5hbGlnbiA9IFwiIikuY29uY2F0KGhhbGlnbikuY29uY2F0KCJcIjtcbiIpLmNvbmNhdCgKICAiICAgIG1lc3NhZ2UuaW5uZXJIVE1MID0gJyIpLmNvbmNhdChtZXNzYWdlKS5jb25jYXQoIic7XG4iKS5jb25jYXQoCiAgIiAgfVxuIikuY29uY2F0KAogICJ9KSIpCnZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKKQppZiAobWVzc2FnZS5sZW5ndGggJiYgY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgZnIuVGV4dE91dHB1dENhbGxiYWNrLklORk9STUFUSU9OLAogICAgICAgICAgICBhbmNob3IKICAgICAgICApLAogICAgICAgIG5ldyBmci5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2soc2NyaXB0KQogICAgKS5idWlsZCgpCn0KZWxzZSB7CiAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKfQoKIC8qCiAgKiBHZW5lcmF0ZSBhIHRva2VuIGluIHRoZSBkZXNpcmVkIGZvcm1hdC4gQWxsICd4JyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHJhbmRvbSBudW1iZXIgMC05LgogICogCiAgKiBFeGFtcGxlOgogICogJ3h4eHh4JyBwcm9kdWNlcyAnMjg1MzUnCiAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgKi8KZnVuY3Rpb24gZ2VuZXJhdGVOdW1lcmljVG9rZW4oZm9ybWF0KSB7CiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbihjKSB7CiAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpKjEwfDA7CiAgICAgICAgdmFyIHYgPSByOwogICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDEwKTsKICAgIH0pOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"a873fcd8-8f17-4675-9dd6-54ab1c11e2df\",\"name\":\"Record MFA\",\"description\":\"Record that MFA has been performed for this journey and no longer needs to be performed. This allows journeys and inner journeys to check that flag before performing MFA multiple times.\",\"script\":\"LyogTUZBIFN0YXR1cwogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBSZWNvcmQgdGhhdCBNRkEgaGFzIGJlZW4gcGVyZm9ybWVkIGZvciB0aGlzIGpvdXJuZXkgYW5kIG5vIGxvbmdlciBuZWVkcyAKICogdG8gYmUgcGVyZm9ybWVkLiBUaGlzIGFsbG93cyBqb3VybmV5cyBhbmQgaW5uZXIgam91cm5leXMgdG8gY2hlY2sgdGhhdCAKICogZmxhZyBiZWZvcmUgcGVyZm9ybWluZyBNRkEgbXVsdGlwbGUgdGltZXMuCiAqIAogKiBUaGlzIHNjcmlwdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICovCm91dGNvbWUgPSAidHJ1ZSI7CnNoYXJlZFN0YXRlLnB1dCgibWZhUGVyZm9ybWVkIiwgInRydWUiKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"39c08084-1238-43e8-857f-2e11005eac49\",\"name\":\"Alpha OAuth2 Access Token Modification Script\",\"description\":\"Default alpha realm script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"d3405f9c-d338-4dc2-b00d-7aacf77b731d\",\"name\":\"Return OTP\",\"description\":\"Return the generated OTP using a TextOutputCallback\",\"script\":\"LyogUmV0dXJuIE9UUAogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBSZXR1cm4gdGhlIGdlbmVyYXRlZCBPVFAgdXNpbmcgYSBUZXh0T3V0cHV0Q2FsbGJhY2suCiAqIAogKiBUaGlzIHNjcmlwdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICovCm91dGNvbWUgPSAidHJ1ZSI7CnZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2sKKQppZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgZnIuVGV4dE91dHB1dENhbGxiYWNrLklORk9STUFUSU9OLAogICAgICAgICAgICBub2RlU3RhdGUuZ2V0KCJvbmVUaW1lUGFzc3dvcmQiKS5hc1N0cmluZygpCiAgICAgICAgKQogICAgKS5idWlsZCgpCn0KZWxzZSB7CiAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"ab78dcb5-85cb-41a6-813e-e07a77761376\",\"name\":\"Admin_ProfileToManagedObject\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKZnVuY3Rpb24gc2V0SWZWYWxpZFN0cmluZyhtYW5hZ2VkRGF0YSwgbWFuYWdlZEtleSwgcHJvZmlsZUtleSkgewogIHZhciBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVkUHJvZmlsZS5nZXQocHJvZmlsZUtleSk7CiAgaWYgKG5vcm1hbGl6ZWRWYWx1ZSAmJiAhbm9ybWFsaXplZFZhbHVlLmlzTnVsbCgpICYmIG5vcm1hbGl6ZWRWYWx1ZS5hc1N0cmluZygpICE9ICcnKSB7CiAgICBtYW5hZ2VkRGF0YS5wdXQobWFuYWdlZEtleSwgbm9ybWFsaXplZFZhbHVlKTsKICB9Cn0KCihmdW5jdGlvbiAoKSB7CiAgdmFyIGZySmF2YSA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUsCiAgICBqYXZhLnV0aWwuSGFzaE1hcAogICk7CgogIHZhciBPQkpfQVRUUiA9ICdvYmplY3RBdHRyaWJ1dGVzJzsKCiAgLy8gV2Ugc2hvdWxkIGhhdmUgb2JqZWN0QXR0cmlidXRlcyBkdXJpbmcgb25ib2FyZGluZyBiZWNhdXNlIHRoZSB1c2VyIGlzIGVzdGFibGlzaGVkIGVhcmxpZXIgaW4KICAvLyB0aGUgam91cm5leS4gIFdlIHdvbid0IGhhdmUgb2JqZWN0QXR0cmlidXRlcyBkdXJpbmcgbG9naW4sIHRob3VnaC4KICB2YXIgb2JqQXR0cnMgPSBzaGFyZWRTdGF0ZS5jb250YWluc0tleShPQkpfQVRUUikgPyBzaGFyZWRTdGF0ZS5nZXQoT0JKX0FUVFIpIDogbmV3IGZySmF2YS5IYXNoTWFwKCk7CgogIC8vIElmIHRoaXMgZmxvdyByZXF1aXJlcyBlbWFpbCBtYXRjaGluZywgY29uZmlybSB0aGUgSWRQIHVzZXIgZW1haWwgYWRkcmVzcyBtYXRjaGVzIHRoZSBGUiBlbWFpbCBhZGRyZXNzCiAgaWYgKHNoYXJlZFN0YXRlLmNoZWNrRW1haWxDbGFpbSA9PSB0cnVlKSB7CiAgICB2YXIgaWRwRW1haWwgPSBub3JtYWxpemVkUHJvZmlsZS5nZXQoJ2VtYWlsJykuYXNTdHJpbmcoKTsKICAgIHZhciBmckVtYWlsID0gb2JqQXR0cnMuZ2V0KCdtYWlsJyk7CiAgICBpZiAoaWRwRW1haWwgIT0gZnJFbWFpbCkgewogICAgICB0aHJvdyAnRW1haWwgY2xhaW0gZnJvbSBJRFAgZG9lcyBub3QgbWF0Y2ggaWRlbnRpdHkgbWFpbCBhdHRyaWJ1dGUnOwogICAgfQogIH0KCiAgLy8gVXBkYXRlIHVzZXIgd2l0aCBmaXJzdC9sYXN0IG5hbWUgZnJvbSBJRFAsIGlmIGF2YWlsYWJsZQogIHZhciBtYW5hZ2VkVXNlckRhdGEgPSBmckphdmEuSnNvblZhbHVlLmpzb24oZnJKYXZhLkpzb25WYWx1ZS5vYmplY3QoKSk7CiAgc2V0SWZWYWxpZFN0cmluZyhtYW5hZ2VkVXNlckRhdGEsICdnaXZlbk5hbWUnLCAnZ2l2ZW5OYW1lJyk7CiAgc2V0SWZWYWxpZFN0cmluZyhtYW5hZ2VkVXNlckRhdGEsICdzbicsICdmYW1pbHlOYW1lJyk7CiAgCiAgLy8gRm9yIGxvZ2luOiBFbnN1cmUgdGhlIG1haWwgYXR0cmlidXRlIGlzIHNldCBpbiBjYXNlIHdlIGhhdmUgdG8gbG9vayB1cCB0aGUgYWRtaW4gdXNpbmcKICAvLyB0aGVpciBlbWFpbC4gIFRoaXMgd2lsbCBvY2N1ciB3aGVuIGFuIGV4aXN0aW5nIGFkbWluIGlzIGZlZGVyYXRpbmcgZm9yIHRoZSBmaXJzdCB0aW1lLgogIGlmICghb2JqQXR0cnMuY29udGFpbnNLZXkoJ21haWwnKSkgewogICAgbWFuYWdlZFVzZXJEYXRhLnB1dCgnbWFpbCcsIG5vcm1hbGl6ZWRQcm9maWxlLmdldCgnZW1haWwnKS5hc1N0cmluZygpKTsKICB9CgogIGlmICghbm9ybWFsaXplZFByb2ZpbGUuZ2V0KCdncm91cHMnKS5pc051bGwoKSkgewogICAgbWFuYWdlZFVzZXJEYXRhLnB1dCgnZ3JvdXBzJywgbm9ybWFsaXplZFByb2ZpbGUuZ2V0KCdncm91cHMnKS5hc0xpc3QoKSk7CiAgfQogIAogIC8vIE1lcmdlIGFueXRoaW5nIHdlJ3ZlIHB1dCBpbnRvIGBtYW5hZ2VkVXNlckRhdGFgIGludG8gc2hhcmVkU3RhdGUub2JqZWN0QXR0cmlidXRlcyBiZWNhdXNlCiAgLy8gYG1hbmFnZWRVc2VyRGF0YWAgZ29lcyBpbnRvIHRyYW5zaWVudCBzdGF0ZSwgd2hpY2ggaXNuJ3QgdXNlZCBieSBvdXIgZG93bnN0cmVhbSBub2RlcwogIHZhciBrZXlzID0gbWFuYWdlZFVzZXJEYXRhLmtleXMoKS50b0FycmF5KCk7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICBvYmpBdHRycy5wdXQoa2V5c1tpXSwgbWFuYWdlZFVzZXJEYXRhLmdldChrZXlzW2ldKSk7CiAgfQogIHNoYXJlZFN0YXRlLnB1dChPQkpfQVRUUiwgb2JqQXR0cnMpOwoKICByZXR1cm4gbWFuYWdlZFVzZXJEYXRhOwp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"c827d2b4-3608-4693-868e-bbcf86bd87c7\",\"name\":\"Scripted Module - Client Side\",\"description\":\"Default global script for client side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTYtMjAxNyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qIERlZmF1bHQgQXV0aGVudGljYXRpb24gY2xpZW50IHNpZGUgc2NyaXB0IHRvIHVzZSBhcyBhIHRlbXBsYXRlIGZvciBuZXcgc2NyaXB0cyAqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"name\":\"level\",\"description\":\"set per level shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdsZXZlbCcgKyBsZXZlbCArICdWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzZXQgYXQgZWFjaCBsZXZlbCBvZiB0aGUgbmVzdGVkIGpvdXJuZXlzLiBJdCBjb250YWlucyBhbiBpbmRpY2F0b3IgaW4gd2hpY2ggbGV2ZWwgaXQgd2FzIHNldC4nKTsKfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"name\":\"debug\",\"description\":\"Display sharedState, transientState, and headers.\",\"script\":\"LyogZGVidWcKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogRGlzcGxheSBzaGFyZWRTdGF0ZSwgdHJhbnNpZW50U3RhdGUsIGFuZCBoZWFkZXJzLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwp2YXIgYW5jaG9yID0gImFuY2hvci0iLmNvbmNhdChnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4JykpOwp2YXIgaGFsaWduID0gImxlZnQiOwp2YXIgbWVzc2FnZSA9ICI8cD48Yj5TaGFyZWQgU3RhdGU8L2I+Ojxici8+Ii5jb25jYXQoCiAgICAgIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpLmNvbmNhdCgKICAgICI8cD48Yj5UcmFuc2llbnQgU3RhdGU8L2I+Ojxici8+IikuY29uY2F0KAogICAgICB0cmFuc2llbnRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+UmVxdWVzdCBIZWFkZXJzPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgICAgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikKdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwidGV4dC1sZWZ0XCI7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIikuY29uY2F0KG1lc3NhZ2UpLmNvbmNhdCgiJztcbiIpLmNvbmNhdCgKICAiICB9XG4iKS5jb25jYXQoCiAgIn0pIikKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawopCmlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgIGFuY2hvcgogICAgICAgICksCiAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICApLmJ1aWxkKCkKfQplbHNlIHsKICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0KCiAvKgogICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAqIAogICogRXhhbXBsZToKICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICogJ3h4eC14eHgnIHByb2R1Y2VzICc0MzItNTIxJwogICovCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxMHwwOwogICAgICAgIHZhciB2ID0gcjsKICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"4f1273be-9c52-4879-bbe9-9a47068aeed9\",\"name\":\"Twilio IVR: Unverified Caller Message\",\"description\":\"Unverified caller message\",\"script\":\"LyogVHdpbGlvIElWUjogVW52ZXJpZmllZCBDYWxsZXIgTWVzc2FnZQogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICogCiAqIERlcGVuZGluZyBvbiB0aGUgYW1vdW50IG9mIGRhdGEgY29sbGVjdGVkIHRocm91Z2ggY2FsbGJhY2tzIGFuZCBob3cgbWFueSBvZiB0aGUgY2FsbFBhcmFtcwogKiB5b3UgYWN0aXZhdGUgYmVsb3csIHlvdSB3aWxsIG5lZWQgdG8gY2hhbmdlIHlvdXIgYXV0aGVudGljYXRpb24gc2Vzc2lvbiBmcm9tIEpXVCB0byBDVFMgb3IKICogTWVtb3J5LgogKi8Kb3V0Y29tZSA9ICJ0cnVlIjsKCi8qIEJlZ2luIENvbmZpZ3VyYXRpb24KICovCgovLyBCdWlsZCBvdXQgdGhlIGZ1bGwgbWVzc2FnZQp2YXIgbWVzc2FnZSA9ICJUaGF0IGRvZXNuJ3QgbWF0Y2ggb3VyIHJlY29yZHMuIExldCB1cyB0cnkgdGhpcyBhbm90aGVyIHdheS4iOwoKLyogRW5kIENvbmZpZ3VyYXRpb24KICovCgp2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suVGV4dE91dHB1dENhbGxiYWNrCik7CiAgCndpdGggKGZyKSB7CiAgICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgdmFyIG91dHB1dCA9IG5ldyBUZXh0T3V0cHV0Q2FsbGJhY2soVGV4dE91dHB1dENhbGxiYWNrLklORk9STUFUSU9OLCBtZXNzYWdlKTsKICAgICAgICBhY3Rpb24gPSBBY3Rpb24uc2VuZChvdXRwdXQpLmJ1aWxkKCk7CiAgICAgIH0gCiAgICAgIGVsc2UgewogICAgICAgIGFjdGlvbiA9IEFjdGlvbi5nb1RvKG91dGNvbWUpLmJ1aWxkKCk7CiAgICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"5e68fee3-047d-4fff-8e99-89fb5908f068\",\"name\":\"Admin_ForgotUsernameMailCheck\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gbmV3IEphdmFJbXBvcnRlcigKICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGVzLAogIG9yZy5mb3JnZXJvY2suZ3VpY2UuY29yZSwKICBqYXZhLnV0aWwuSGFzaE1hcAopOwoKLy8gVGhpcyBjb25maXJtcyB0aGUgSWRlbnRpZnkgRXhpc3RpbmcgVXNlciBub2RlIHdhcyBhYmxlIHRvIGZpbmQgdGhlCi8vIGFkbWluLCBvdGhlcndpc2Ugd2UgcmVtb3ZlIHRoZSBtYWlsIGF0dHJpYnV0ZSBzbyBubyBlbWFpbCBjYW4gYmUgc2VudAp3aXRoIChmcikgewogIHRyeSB7CgogICAgdmFyIG9iakF0dHJzID0gc2hhcmVkU3RhdGUuZ2V0KCdvYmplY3RBdHRyaWJ1dGVzJykgfHwgbmV3IEhhc2hNYXAoKTsKICAgIHZhciB1c2VybmFtZSA9IG9iakF0dHJzLmdldCgndXNlck5hbWUnKTsKICAgIG91dGNvbWUgPSB1c2VybmFtZSA/ICdWYWxpZCcgOiAnSW52YWxpZCc7CiAgICBpZiAodXNlcm5hbWUpIHsKICAgICAgb3V0Y29tZSA9ICdWYWxpZCc7CiAgICB9IGVsc2UgewogICAgICBvYmpBdHRycy5yZW1vdmUoJ21haWwnKTsKICAgICAgc2hhcmVkU3RhdGUucHV0KCdvYmplY3RBdHRyaWJ1dGVzJywgb2JqQXR0cnMpOwogICAgICBvdXRjb21lID0gJ0ludmFsaWQnOwogICAgfQoKICAgIGxvZ2dlci5tZXNzYWdlKCdBZG1pbl9Gb3Jnb3RVc2VybmFtZU1haWxDaGVjazogJyArIG91dGNvbWUpOwoKICB9IGNhdGNoIChlKSB7CgogICAgbG9nZ2VyLmVycm9yKCdBZG1pbl9Gb3Jnb3RVc2VybmFtZU1haWxDaGVjazogRmFpbGVkIHRvIGRldGVybWluZSBtYWlsIHZhbGlkaXR5Jyk7CiAgICBsb2dnZXIuZXJyb3IoZSk7CiAgICBvdXRjb21lID0gJ0Vycm9yJzsKCiAgfQp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"452d73ee-c6f3-4f4e-9dae-e75bb3886cbd\",\"name\":\"Copy to transientState\",\"description\":\"Copy sharedState to transientState\",\"script\":\"b3V0Y29tZSA9ICJ0cnVlIjsKaWYgKHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpKSB7CiAgICB0cmFuc2llbnRTdGF0ZS5wdXQoIm9iamVjdEF0dHJpYnV0ZXMiLCBzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKSkKfQppZiAoc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICB0cmFuc2llbnRTdGF0ZS5wdXQoInVzZXJuYW1lIiwgc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKQp9CmlmIChzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpKSB7CiAgICB0cmFuc2llbnRTdGF0ZS5wdXQoIl9pZCIsIHNoYXJlZFN0YXRlLmdldCgiX2lkIikpCn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"ac9fc25e-3ad9-4f80-a796-2d9093795439\",\"name\":\"MFA Status\",\"description\":\"Check if MFA has already been performed for this journey. This allows journeys and inner journeys not to perform MFA multiple times.\",\"script\":\"LyogTUZBIFN0YXR1cwogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDaGVjayBpZiBNRkEgaGFzIGFscmVhZHkgYmVlbiBwZXJmb3JtZWQgZm9yIHRoaXMgam91cm5leS4gCiAqIFRoaXMgYWxsb3dzIGpvdXJuZXlzIGFuZCBpbm5lciBqb3VybmV5cyBub3QgdG8gcGVyZm9ybSBNRkEgbXVsdGlwbGUgdGltZXMuCiAqIAogKiBUaGlzIHNjcmlwdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICogLSBmYWxzZQogKi8Kb3V0Y29tZSA9ICJmYWxzZSI7CmlmIChzaGFyZWRTdGF0ZS5nZXQoIm1mYVBlcmZvcm1lZCIpPT0idHJ1ZSIpIHsKICAgICAgb3V0Y29tZSA9ICJ0cnVlIjsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"3814d347-a2f2-4be9-a810-ab41a1e374bd\",\"name\":\"Remove Button - imported (1)\",\"description\":\"Hide buttons on the journey page.\",\"script\":\"LyogUmVtb3ZlIEJ1dHRvbgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBIaWRlIGJ1dHRvbnMgb24gdGhlIGpvdXJuZXkgcGFnZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfSkiCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICB2YXIgbWVzc2FnZSA9ICIgIgogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIG1lc3NhZ2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"8508a00e-ad45-4310-b3c7-c6871b6a41a9\",\"name\":\"Browser Language Decision\",\"description\":\"Browser Language Decision\",\"script\":\"LyogQnJvd3NlciBMYW5ndWFnZSBEZWNpc2lvbgogKiAKICogRGV0ZWN0IHRoZSBicm93c2VyIGxhbmd1YWdlIGluIHRoZSByZXF1ZXN0IGFuZCBicmFuY2ggb3V0IHRvIGl0cyBuYW1lZCBleGl0IChlLmcuOiAiZGUiIG9yICJlbiIgb3IgImZyIikgCiAqIGlmIGl0IGlzIHBhcnQgb2YgdGhlIHN1cHBvcnRlZExhbmd1YWdlcyBhcnJheSwgb3RoZXJ3aXNlIHRha2UgdGhlICJvdGhlciIgZXhpdC4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gb3RoZXIKICogLSA8YWxsIG9mIHRoZSBpdGVtcyBpbiB0aGUgc3VwcG9ydGVkTGFuZ3VhZ2VzIGFycmF5PgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqLwooZnVuY3Rpb24gKCkgewogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgICAvKiBCZWdpbiBTY3JpcHQgQ29uZmlndXJhdGlvbiAqLwogICAgICAKICAgICAgLy8gYWRkIGFsbCB0aGUgbGFuZ3VhZ2UgY29kZXMgeW91IHdhbnQgdG8gc3VwcG9ydAogICAgICB2YXIgc3VwcG9ydGVkTGFuZ3VhZ2VzID0gWyJkZSIsImVuIiwiZnIiXTsKICAgICAgCiAgICAgIC8qIEVuZCBTY3JpcHQgQ29uZmlndXJhdGlvbiAgICovCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgCiAgICAgIG91dGNvbWUgPSBnZXRCcm93c2VyTGFuZ3VhZ2UoKTsKICAgICAgCiAgICAvKgogICAgICogUmV0dXJucyB0aGUgc3VwcG9ydGVkIGJyb3dzZXIgbGFuZ3VhZ2Ugb3IgIm90aGVyIgogICAgICovCiAgICBmdW5jdGlvbiBnZXRCcm93c2VyTGFuZ3VhZ2UoKSB7CiAgICAgICAgICB2YXIgbGFuZ3VhZ2VIZWFkZXIgPSBnZXRIZWFkZXIoImFjY2VwdC1sYW5ndWFnZSIpOwogICAgICAgICAgdmFyIGxhbmd1YWdlID0gbGFuZ3VhZ2VIZWFkZXIuc3BsaXQoJzsnKVswXS5zcGxpdCgnLCcpWzBdLnNwbGl0KCctJylbMF07CiAgICAgICAgICBpZiAoc3VwcG9ydGVkTGFuZ3VhZ2VzLmluZGV4T2YobGFuZ3VhZ2UpIDwgMCkgewogICAgICAgICAgICAgIHJldHVybiAib3RoZXIiOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGFuZ3VhZ2U7CiAgICB9CgogICAgLyoKICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgaGVhZGVyCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEhlYWRlcihoZWFkZXJOYW1lKSB7CiAgICAgICAgcmV0dXJuIHJlcXVlc3RIZWFkZXJzLmdldChoZWFkZXJOYW1lKS5nZXQoMCkrIiI7CiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"38f698de-fe11-43d2-8480-44e1312d121d\",\"name\":\"FRAAS-7955 Both States\",\"description\":\"FRAAS-7955 Both States\",\"script\":\"b3V0Y29tZSA9ICJ0cnVlIjsKCnNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgidXNlck5hbWUiLCAiRlJBQVMtNzk1NSIpOwpzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoImdpdmVuTmFtZSIsICJGaXJzdC1zaGFyZWQiKTsKc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKCJzbiIsICJMYXN0LXNoYXJlZCIpOwpzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoIm1haWwiLCAiZmlyc3QubGFzdC1zaGFyZWRAY29tcGFueS5jb20iKTsKCnNldFRyYW5zaWVudE9iamVjdEF0dHJpYnV0ZSgidXNlck5hbWUiLCAiRlJBQVMtNzk1NSIpOwpzZXRUcmFuc2llbnRPYmplY3RBdHRyaWJ1dGUoImdpdmVuTmFtZSIsICJGaXJzdC10cmFuc2llbnQiKTsKc2V0VHJhbnNpZW50T2JqZWN0QXR0cmlidXRlKCJzbiIsICJMYXN0LXRyYW5zaWVudCIpOwpzZXRUcmFuc2llbnRPYmplY3RBdHRyaWJ1dGUoIm1haWwiLCAiZmlyc3QubGFzdC10cmFuc2llbnRAY29tcGFueS5jb20iKTsKCi8qCiAqIFN0b3JlIGF0dHJpYnV0ZXMgaW4gc2hhcmVkIHN0YXRlIGZvciB1c2Ugd2l0aCB0aGUgQ3JlYXRlL1BhdGNoIE9iamVjdCBub2Rlcy4KICovCmZ1bmN0aW9uIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgewogICAgICAgdmFyIHN0b3JhZ2UgPSBzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKICAgIGlmIChzdG9yYWdlICYmIHZhbHVlKSB7CiAgICAgICAgICBpZiAoc3RvcmFnZS5wdXQpIHsKICAgICAgICAgICAgICBzdG9yYWdlLnB1dChuYW1lLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgc3RvcmFnZVtuYW1lXSA9IHZhbHVlOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHZhbHVlKSB7CiAgICAgICAgc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgSlNPTi5wYXJzZSgie1wiIituYW1lKyJcIjpcIiIrdmFsdWUrIlwifSIpKTsKICAgIH0KfQoKLyoKICogU3RvcmUgYXR0cmlidXRlcyBpbiB0cmFuc2llbnQgc3RhdGUgZm9yIHVzZSB3aXRoIHRoZSBDcmVhdGUvUGF0Y2ggT2JqZWN0IG5vZGVzLgogKi8KZnVuY3Rpb24gc2V0VHJhbnNpZW50T2JqZWN0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7CiAgICB2YXIgdHJhbnNpZW50U3RvcmFnZSA9IHRyYW5zaWVudFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwogICAgaWYgKHRyYW5zaWVudFN0b3JhZ2UgJiYgdmFsdWUpIHsKICAgICAgICAgIGlmICh0cmFuc2llbnRTdG9yYWdlLnB1dCkgewogICAgICAgICAgICB0cmFuc2llbnRTdG9yYWdlLnB1dChuYW1lLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRyYW5zaWVudFN0b3JhZ2VbbmFtZV0gPSB2YWx1ZTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIGlmICh2YWx1ZSkgewogICAgdHJhbnNpZW50U3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgSlNPTi5wYXJzZSgie1wiIituYW1lKyJcIjpcIiIrdmFsdWUrIlwifSIpKTsKICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"68d5a8e7-fcc9-4215-9e63-a01afe8fa849\",\"name\":\"IDP Lookup\",\"description\":\"Perform IDP lookup based on email domain. Set users' external IDP in shared state or continue to local authentication.\",\"script\":\"LyogSURQIExvb2t1cAogKiAKICogUGVyZm9ybSBJRFAgbG9va3VwIGJhc2VkIG9uIGVtYWlsIGRvbWFpbi4gU2V0IHVzZXJzJyBleHRlcm5hbCBJRFAgaW4gc2hhcmVkIHN0YXRlIG9yIGNvbnRpbnVlIHRvIGxvY2FsIGF1dGhlbnRpY2F0aW9uLgogKiAKICogVGhpcyBzY3JpcHQgcmVxdWlyZXMgcGFyYW1ldHJpemF0aW9uLiBNYWtlIHN1cmUgeW91IGNhcmVmdWxseSByZXZpZXcgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSBvbmUKICogLSBtdWx0aXBsZQogKiAtIG5vbmUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIGxvZ2dlci5tZXNzYWdlKCJJRFAgTG9va3VwOiBzdGFydCIpOwogICAgICBvdXRjb21lID0gIm5vbmUiOwogICAgICB2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoInVzZXJuYW1lIik7CiAgICAgIHZhciBkb21haW4gPSB1c2VybmFtZS5zdWJzdHIodXNlcm5hbWUubGFzdEluZGV4T2YoIkAiKSsxKTsKICAgICAgdmFyIHJlZmVyZXIgPSBwYXJzZVVybChyZXF1ZXN0SGVhZGVycy5nZXQoInJlZmVyZXIiKS5nZXQoMCkpOwoKICAgICAgLyogQmVnaW4gQ29uZmlndXJhdGlvbiAqLwogIAogICAgLy8gbG9uZy1saXZlZCB0b2tlbgogICAgdmFyIElETV9BUElfVE9LRU4gPSBzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi5hZG1pbi50b2tlbiIpOwogIAogICAgLy8gSURNIEFQSSBDb25maWd1cmF0aW9uCiAgICB2YXIgSURNX0FQSV9VUkkgPSByZWZlcmVyLm9yaWdpbiArICIvb3BlbmlkbS9tYW5hZ2VkL2FscGhhX29yZ2FuaXphdGlvbj9fcXVlcnlGaWx0ZXI9aWRwRG9tYWlucytjbysnIiArIGRvbWFpbiArICInJl9maWVsZHM9bmFtZSxkZXNjcmlwdGlvbixpZHBOYW1lLGlkcFR5cGUsaWRwRG9tYWlucyxpZHBKb3VybmV5LGlkcFRoZW1lLGlkcFBlcnNpc3Qsc2FtbENvbmZpZyI7CgogICAgICAvKiBFbmQgQ29uZmlndXJhdGlvbiAqLwoKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldE1ldGhvZCgnR0VUJyk7CiAgICByZXF1ZXN0LnNldFVyaShJRE1fQVBJX1VSSSk7CiAgICByZXF1ZXN0LmdldEhlYWRlcnMoKS5hZGQoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04Iik7CiAgICByZXF1ZXN0LmdldEhlYWRlcnMoKS5hZGQoIkF1dGhvcml6YXRpb24iLCAiQmVhcmVyICIgKyBJRE1fQVBJX1RPS0VOKTsKCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICBsb2dnZXIubWVzc2FnZSgiSURQIExvb2t1cDogSlNPTiByZXN1bHQ6ICIgKyBKU09OLnN0cmluZ2lmeShyZXN1bHQpKTsKICAgIAogICAgICB2YXIgcm91dGVkSURQcyA9IHJlc3VsdC5yZXN1bHQubGVuZ3RoID8gcmVzdWx0LnJlc3VsdCA6IFt7fV07CiAgICAgIC8vIHN0cmluZ2lmeSB0aGUgc2FtbENvbmZpZyBwcm9wZXJ0eQogICAgICByb3V0ZWRJRFBzLmZvckVhY2goZnVuY3Rpb24gKHJvdXRlZElEUCwgaW5kZXgpIHsKICAgICAgICAgIHJvdXRlZElEUHNbaW5kZXhdLnNhbWxDb25maWcgPSBKU09OLnN0cmluZ2lmeShyb3V0ZWRJRFAuc2FtbENvbmZpZyk7CiAgICB9KTsKICAgICAgc2hhcmVkU3RhdGUucHV0KCJyb3V0ZWRJRFBzIiwgcm91dGVkSURQcyk7CiAgICBpZiAocmVzdWx0LnJlc3VsdENvdW50ID09PSAxKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklEUCBMb29rdXA6IEZvdW5kIGV4YWN0bHkgMSBJRFAiKTsKICAgICAgICBvdXRjb21lID0gIm9uZSI7CiAgICB9CiAgICAgIGVsc2UgaWYgKHJlc3VsdC5yZXN1bHRDb3VudCA+IDEpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiSURQIExvb2t1cDogRm91bmQge30gSURQcyIsIHJlc3VsdC5yZXN1bHRDb3VudCk7CiAgICAgICAgb3V0Y29tZSA9ICJtdWx0aXBsZSI7CiAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJJRFAgTG9va3VwOiBGb3VuZCBubyBJRFBzIik7CiAgICB9CiAgICBsb2dnZXIubWVzc2FnZSgiSURQIExvb2t1cDogZW5kIFtvdXRjb21lPXt9XSIsIG91dGNvbWUpOwoKICAgIC8qCiAgICAgKiBQYXJzZSBhIFVSTCBpbnRvIGl0cyBjb21wb25lbnRzIGFuZCBtYWtlIHRoZW0gZWFzaWx5IGFjY2Vzc2libGUgYnkgbmFtZQogICAgICoKICAgICAqIFVzZSBpbiBhIFNjcmlwdGUgRGVjaXNpb24gTm9kZSBTY3JpcHQgYXMgZm9sbG93czoKICAgICAqIHZhciByZWZlcmVyID0gcGFyc2VVcmwocmVxdWVzdEhlYWRlcnMuZ2V0KCJyZWZlcmVyIikuZ2V0KDApKTsKICAgICAqIHZhciBvcmlnaW4gPSByZWZlcmVyLm9yaWdpbjsKICAgICAqIAogICAgICogZS5nLjogaHR0cHM6Ly9vcGVuYW0tdm9sa2VyLWRldi5mb3JnZWJsb2Nrcy5jb20vYW0vWFVJLz9yZWFsbT0vYnJhdm8mYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPUluaXRpYXRlT3duZXJDbGFpbSMvCiAgICAgKiB7CiAgICAgKiAgICAgaGFzaDogJyMvJywKICAgICAqICAgICBob3N0OiAnb3BlbmFtLXZvbGtlci1kZXYuZm9yZ2VibG9ja3MuY29tJywKICAgICAqICAgICBob3N0bmFtZTogJ29wZW5hbS12b2xrZXItZGV2LmZvcmdlYmxvY2tzLmNvbScsCiAgICAgKiAgICAgaHJlZjogJ2h0dHBzOi8vb3BlbmFtLXZvbGtlci1kZXYuZm9yZ2VibG9ja3MuY29tL2FtL1hVSS8/cmVhbG09L2JyYXZvJmF1dGhJbmRleFR5cGU9c2VydmljZSZhdXRoSW5kZXhWYWx1ZT1Jbml0aWF0ZU93bmVyQ2xhaW0jLycsCiAgICAgKiAgICAgb3JpZ2luOiAnaHR0cHM6Ly9vcGVuYW0tdm9sa2VyLWRldi5mb3JnZWJsb2Nrcy5jb20nLAogICAgICogICAgIHBhdGhuYW1lOiAnL2FtL1hVSS8nLAogICAgICogICAgIHBvcnQ6ICcnLAogICAgICogICAgIHByb3RvY29sOiAnaHR0cHMnLAogICAgICogICAgIHNlYXJjaDogJz9yZWFsbT0vYnJhdm8mYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPUluaXRpYXRlT3duZXJDbGFpbScsCiAgICAgKiAgICAgdXNlcm5hbWU6ICcnLAogICAgICogICAgIHBhc3N3b3JkOiAnJywKICAgICAqICAgICBzZWFyY2hQYXJhbTogewogICAgICogICAgICAgICByZWFsbTogJy9icmF2bycsCiAgICAgKiAgICAgICAgIGF1dGhJbmRleFR5cGU6ICdzZXJ2aWNlJywKICAgICAqICAgICAgICAgYXV0aEluZGV4VmFsdWU6ICdJbml0aWF0ZU93bmVyQ2xhaW0nCiAgICAgKiAgICAgfQogICAgICogfQogICAgICovCiAgICBmdW5jdGlvbiBwYXJzZVVybChocmVmKSB7CiAgICAgICAgdmFyIG0gPSBocmVmLm1hdGNoKC9eKChbXjpcLz8jXSspOj8oPzpcL1wvKCg/OihbXlwvPyM6XSopOihbXlwvPyM6XSopQCk/KFteXC8/IzpdKikoPzo6KFteXC8/IzpdKikpPykpKT8oW14/I10qKShcP1teI10qKT8oIy4qKT8kLyksCiAgICAgICAgciA9IHsKICAgICAgICAgICAgaGFzaDogbVsxMF0gfHwgIiIsICAgICAgICAgICAgICAgICAgICAgIC8vICMvCiAgICAgICAgICAgIGhvc3Q6IG1bM10gfHwgIiIsICAgICAgICAgICAgICAgICAgICAgICAvLyBvcGVuYW0tdm9sa2VyLWRldi5mb3JnZWJsb2Nrcy5jb20KICAgICAgICAgICAgaG9zdG5hbWU6IG1bNl0gfHwgIiIsICAgICAgICAgICAgICAgICAgIC8vIG9wZW5hbS12b2xrZXItZGV2LmZvcmdlYmxvY2tzLmNvbQogICAgICAgICAgICBocmVmOiBtWzBdIHx8ICIiLCAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9vcGVuYW0tdm9sa2VyLWRldi5mb3JnZWJsb2Nrcy5jb20vYW0vWFVJLz9yZWFsbT0vYnJhdm8mYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPUluaXRpYXRlT3duZXJDbGFpbSMvCiAgICAgICAgICAgIG9yaWdpbjogbVsxXSB8fCAiIiwgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL29wZW5hbS12b2xrZXItZGV2LmZvcmdlYmxvY2tzLmNvbQogICAgICAgICAgICBwYXRobmFtZTogbVs4XSB8fCAobVsxXSA/ICIvIiA6ICIiKSwgICAgLy8gL2FtL1hVSS8KICAgICAgICAgICAgcG9ydDogbVs3XSB8fCAiIiwgICAgICAgICAgICAgICAgICAgICAgIC8vIAogICAgICAgICAgICBwcm90b2NvbDogbVsyXSB8fCAiIiwgICAgICAgICAgICAgICAgICAgLy8gaHR0cHMKICAgICAgICAgICAgc2VhcmNoOiBtWzldIHx8ICIiLCAgICAgICAgICAgICAgICAgICAgIC8vID9yZWFsbT0vYnJhdm8mYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPUluaXRpYXRlT3duZXJDbGFpbQogICAgICAgICAgICB1c2VybmFtZTogbVs0XSB8fCAiIiwgICAgICAgICAgICAgICAgICAgLy8gCiAgICAgICAgICAgIHBhc3N3b3JkOiBtWzVdIHx8ICIiLCAgICAgICAgICAgICAgICAgICAvLyAKICAgICAgICAgICAgc2VhcmNoUGFyYW06IHt9ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHsgcmVhbG06ICcvYnJhdm8nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBhdXRoSW5kZXhUeXBlOiAnc2VydmljZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGF1dGhJbmRleFZhbHVlOiAnSW5pdGlhdGVPd25lckNsYWltJyB9CiAgICAgICAgfTsKICAgICAgICBpZiAoci5wcm90b2NvbC5sZW5ndGggPT0gMikgewogICAgICAgICAgICByLnByb3RvY29sID0gImZpbGU6Ly8vIiArIHIucHJvdG9jb2wudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgci5vcmlnaW4gPSByLnByb3RvY29sICsgIi8vIiArIHIuaG9zdDsKICAgICAgICB9CiAgICAgICAgaWYgKHIuc2VhcmNoLmxlbmd0aCA+IDIpIHsKICAgICAgICAgICAgdmFyIHF1ZXJ5ID0gKHIuc2VhcmNoLmluZGV4T2YoJz8nKSA9PT0gMCkgPyByLnNlYXJjaC5zdWJzdHIoMSkgOiByLnNlYXJjaDsKICAgICAgICAgICAgdmFyIHZhcnMgPSBxdWVyeS5zcGxpdCgnJicpOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHBhaXIgPSB2YXJzW2ldLnNwbGl0KCc9Jyk7CiAgICAgICAgICAgIHIuc2VhcmNoUGFyYW1bZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMF0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChwYWlyWzFdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByLmhyZWYgPSByLm9yaWdpbiArIHIucGF0aG5hbWUgKyByLnNlYXJjaCArIHIuaGFzaDsKICAgICAgICByZXR1cm4gcjsKICAgIH07Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"6963d84e-e2f0-4db1-a746-116604189602\",\"name\":\"Admin_SetCurrentYear\",\"description\":\"null\",\"script\":\"dmFyIGN1cnJlbnRZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCk7Cgp2YXIgb2JqQXR0cnMgPSBzaGFyZWRTdGF0ZS5nZXQoJ29iamVjdEF0dHJpYnV0ZXMnKSB8fCBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKb2JqQXR0cnMucHV0KCdjdXJyZW50WWVhcicsIGN1cnJlbnRZZWFyKTsKc2hhcmVkU3RhdGUucHV0KCdvYmplY3RBdHRyaWJ1dGVzJywgb2JqQXR0cnMpOwoKb3V0Y29tZSA9ICdUcnVlJzsK\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"f1a2764b-d05a-4480-8f5f-78fda7814227\",\"name\":\"APIProtection: Reset States\",\"description\":\"APIProtection: Reset State\",\"script\":\"bG9nZ2VyLndhcm5pbmcoIkFQSVByb3RlY3Rpb246IFJlc2V0IFN0YXRlczogc3RhcnQiKTsKCi8qCiAqIEJFR0lOIFNDUklQVCBDT05GSUdVUkFUSU9OCiAqCiAqIE91dGNvbWVzOgogKiAtICJ0cnVlIgogKi8KdmFyIEtFWV9IRUFERVJfTkFNRSA9ICJ4LWFwaS1rZXkiOwp2YXIgU0VDUkVUX0hFQURFUl9OQU1FID0gIngtYXBpLXNlY3JldCI7Ci8qCiAqIEVORCBTQ1JJUFQgQ09ORklHVVJBVElPTgogKi8KCm91dGNvbWUgPSAidHJ1ZSI7CgppZiAoc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpID09IHJlYWRWYWx1ZShLRVlfSEVBREVSX05BTUUpKSB7CiAgICBsb2dnZXIud2FybmluZygiQVBJUHJvdGVjdGlvbjogUmVzZXQgU3RhdGVzOiByZXNldHRpbmcgdXNlcm5hbWUgdG86Ii5jb25jYXQocmVhZFZhbHVlKCJ1c2VybmFtZSIpKSk7CiAgICAgIHNoYXJlZFN0YXRlLnB1dCgidXNlcm5hbWUiLCByZWFkVmFsdWUoInVzZXJuYW1lIikpOwp9CgppZiAodHJhbnNpZW50U3RhdGUuZ2V0KCJwYXNzd29yZCIpID09IHJlYWRUcmFuc2llbnRWYWx1ZShTRUNSRVRfSEVBREVSX05BTUUpKSB7CiAgICBsb2dnZXIud2FybmluZygiQVBJUHJvdGVjdGlvbjogUmVzZXQgU3RhdGVzOiByZXNldHRpbmcgcGFzc3dvcmQiKTsKICAgICAgdHJhbnNpZW50U3RhdGUucHV0KCJwYXNzd29yZCIsIHJlYWRUcmFuc2llbnRWYWx1ZSgicGFzc3dvcmQiKSk7Cn0KCmxvZ2dlci53YXJuaW5nKCJBUElQcm90ZWN0aW9uOiBSZXNldCBTdGF0ZXM6IGZpbmlzaCBbb3V0Y29tZT0iLmNvbmNhdChvdXRjb21lKS5jb25jYXQoIl0iKSk7CgovKgogKiBSZWFkIHZhbHVlIGZyb20gc3RvcmFnZSBmb3IgQVBJUHJvdGVjdGlvbiBzY3JpcHQgdXNlCiAqLwpmdW5jdGlvbiByZWFkVmFsdWUobmFtZSkgewogICAgICB2YXIgc3RvcmFnZSA9IHNoYXJlZFN0YXRlLmdldCgiQVBJUHJvdGVjdGlvbiIpOwogICAgaWYgKHN0b3JhZ2UpIHsKICAgICAgICAgIGlmIChzdG9yYWdlLmdldCkgewogICAgICAgICAgICByZXR1cm4gc2hhcmVkU3RhdGUuZ2V0KCJBUElQcm90ZWN0aW9uIikuZ2V0KG5hbWUpOwogICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBzdG9yYWdlLm5hbWU7CiAgICAgICAgfQogICAgfQogICAgICByZXR1cm4gbnVsbDsKfQoKLyoKICogUmVhZCB0cmFuc2llbnQgdmFsdWUgZnJvbSBzdG9yYWdlIGZvciBBUElQcm90ZWN0aW9uIHNjcmlwdCB1c2UKICovCmZ1bmN0aW9uIHJlYWRUcmFuc2llbnRWYWx1ZShuYW1lKSB7CiAgICAgIHZhciB0cmFuc2llbnRTdG9yYWdlID0gdHJhbnNpZW50U3RhdGUuZ2V0KCJBUElQcm90ZWN0aW9uIik7CiAgICBpZiAodHJhbnNpZW50U3RvcmFnZSkgewogICAgICAgICAgaWYgKHRyYW5zaWVudFN0b3JhZ2UuZ2V0KSB7CiAgICAgICAgICAgIHJldHVybiB0cmFuc2llbnRTdGF0ZS5nZXQoIkFQSVByb3RlY3Rpb24iKS5nZXQobmFtZSk7CiAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zaWVudFN0b3JhZ2UubmFtZTsKICAgICAgICB9CiAgICB9CiAgICAgIHJldHVybiBudWxsOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"5e854779-6ec1-4c39-aeba-0477e0986646\",\"name\":\"Config Provider\",\"description\":\"Default global script for Config Provider\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoqCiAqIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGEgc2ltcGxpZmllZCB0ZW1wbGF0ZSBmb3IgdW5kZXJzdGFuZGluZyBob3cgdG8gYnVpbGQKICogdXAgYSBjb25maWcgTWFwIG9iamVjdCB3aXRoIGN1c3RvbSB2YWx1ZXMuIFRoZSBDb25maWcgUHJvdmlkZXIgTm9kZSB3aWxsIHRoZW4KICogcHJvdmlkZSB0aGlzIGNvbmZpZyBNYXAgdG8gdGhlIGRlc2lyZWQgbm9kZSB0eXBlLiBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgTWFwCiAqIHlvdSBidWlsZCBoZXJlIGlzIG5hbWVkICdjb25maWcnLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICoKICogbm9kZVN0YXRlIC0gTm9kZSBTdGF0ZSAoMSkKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGlzIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdmFsdWVzIHN0b3JlZCBpbiB0aGUgbm9kZSBzdGF0ZS4KICoKICogaWRSZXBvc2l0b3J5IC0gUHJvZmlsZSBEYXRhICgyKQogKiAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGEgcmVwb3NpdG9yeSB0byByZXRyaWV2ZSB1c2VyIGluZm9ybWF0aW9uLgogKgogKiBzZWNyZXRzIC0gQ3JlZGVudGlhbHMgYW5kIFNlY3JldHMgKDMpCiAqICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgYW4gaW50ZXJmYWNlIHRvIGFjY2VzcyB0aGUgU2VjcmV0cyBBUEkgZnJvbSBhIHNjcmlwdGluZyBjb250ZXh0LgogKgogKiByZXF1ZXN0SGVhZGVycyAoNCkgLSBNYXAgKDUpCiAqICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgYW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyBmb3IgYWNjZXNzaW5nIGhlYWRlcnMgaW4gdGhlIGxvZ2luIHJlcXVlc3QuCiAqCiAqIGxvZ2dlciAtIERlYnVnIExvZ2dpbmcgKDYpCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlLgogKgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDcpCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgSFRUUCBjbGllbnQgdGhhdCBjYW4gYmUgdXNlZCB0byBtYWtlIGV4dGVybmFsIEhUVFAgcmVxdWVzdHMuCiAqCiAqIHJlYWxtIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIG5hbWUgb2YgdGhlIHJlYWxtIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0aW5nIHRvLgogKgogKiBleGlzdGluZ1Nlc3Npb24gLSBNYXA8U3RyaW5nLCBTdHJpbmc+ICg1KQogKiAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4gVGhlIHJldHVybmVkIG1hcCBmcm9tCiAqICAgICAgICAgIFNTT1Rva2VuLmdldFByb3BlcnRpZXMoKSAoOCkKICoKICogcmVxdWVzdFBhcmFtZXRlcnMgLSBNYXAgKDUpCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFyYW1ldGVycy4KICoKICoKICogT3V0cHV0czoKICoKICogY29uZmlnIC0gTWFwICg1KQogKiAgICAgICAgICAgRGVmaW5lIGFuZCBmaWxsIGEgTWFwIG9iamVjdCBuYW1lZCAnY29uZmlnJyB3aXRoIGN1c3RvbSB2YWx1ZXMsIHRoaXMgd2lsbCBkZWZpbmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZQogKiAgICAgICAgICAgYXNzb2NpYXRlZCBub2RlIHNlbGVjdGVkIGluIHRoZSBDb25maWdQcm92aWRlck5vZGUuCiAqCiAqIFJlZmVyZW5jZToKICogKDEpIE5vZGUgU3RhdGUgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvaWRjbG91ZC1hbS9sYXRlc3QvYXV0aGVudGljYXRpb24tZ3VpZGUvc2NyaXB0aW5nLWFwaS1ub2RlLmh0bWwjc2NyaXB0aW5nLWFwaS1ub2RlLW5vZGVTdGF0ZQogKiAoMikgUHJvZmlsZSBEYXRhIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMS9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtaWQtcmVwbwogKiAoMykgQ3JlZGVudGlhbHMgYW5kIFNlY3JldHMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4xL2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktYXV0aG4tc2VjcmV0cwogKiAoNCkgUmVxdWVzdCBIZWFkZXJzIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXV0aGVudGljYXRpb24tZ3VpZGUvc2NyaXB0aW5nLWFwaS1ub2RlLmh0bWwjc2NyaXB0aW5nLWFwaS1ub2RlLXJlcXVlc3RIZWFkZXJzLgogKiAoNSkgTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9NYXAuaHRtbAogKiAoNikgRGVidWcgTG9nZ2luZyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICg3KSBIVFRQIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKiAoOCkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKi8KCmNvbmZpZyA9IG5vZGVTdGF0ZS5nZXQoJ25vZGVDb25maWcnKS5hc01hcCgpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"CONFIG_PROVIDER_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"name\":\"shared\",\"description\":\"set the same shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdzaGFyZWRWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzaGFyZWQgYWNyb3NzIGFsbCBuZXN0ZWQgam91cm5leXMuIEl0IGNvbnRhaW5zIGFuIGluZGljYXRvciBpbiB3aGljaCBsZXZlbCBpdCB3YXMgbGFzdCBzZXQuJyk7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"2997bd4d-14be-4dc6-8701-27f08d10b8b7\",\"name\":\"iddataweb Profile Normalization\",\"description\":\"Profile Normalization Script for idddataweb\",\"script\":\"LyovKgogKiBDb3B5cmlnaHQgMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4gTm90IGZvciBQcm9kdWN0aW9uIHVzZS4gCiAqIE1vZGlmaWVkIGJ5IFN0ZXBoZW4gUGF5bmUKICovCi8qIFNvY2lhbCBJZGVudGl0eSBQcm92aWRlciBQcm9maWxlIFRyYW5zZm9ybWF0aW9uIHNjcmlwdCBmb3IgSUQgRGF0YVdlYiAqLwppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKbG9nZ2VyLmVycm9yKCJpZGRhdGF3ZWJfU29jaWFsIElkZW50aXR5IFByb3ZpZGVyIFByb2ZpbGUgVHJhbnNmb3JtYXRpb24gc2NyaXB0OiBTdGFydCIpOwp1c2VyTmFtZSA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpLmdldCgibWFpbCIpOwpsb2dnZXIuZXJyb3IoImlkZGF0YXdlYl9Tb2NpYWwgSWRlbnRpdHkgUHJvdmlkZXIgUHJvZmlsZSBUcmFuc2Zvcm1hdGlvbiBzY3JpcHQ6IHVzZXJOYW1lIiArIHVzZXJOYW1lICk7CnVzZXJuYW1lID0gdXNlck5hbWU7CnNoYXJlZFN0YXRlLnB1dCgidXNlck5hbWUiLCB1c2VyTmFtZSk7CgpyZXR1cm4ganNvbihvYmplY3QoCiAgICAgICAgZmllbGQoImlkIiwgcmF3UHJvZmlsZS5zdWIpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUuYWNxdWlyZWRBdHRyaWJ1dGVzX0FjcXVpcmVkRnVsbE5hbWVfZm5hbWUuYXNTdHJpbmcoKSArICIgIiArIHJhd1Byb2ZpbGUuYWNxdWlyZWRBdHRyaWJ1dGVzX0FjcXVpcmVkRnVsbE5hbWVfbG5hbWUuYXNTdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmNhcGl0YWxpemUoKSApLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmFjcXVpcmVkQXR0cmlidXRlc19BY3F1aXJlZEZ1bGxOYW1lX2ZuYW1lLmFzU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5jYXBpdGFsaXplKCkgKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuYWNxdWlyZWRBdHRyaWJ1dGVzX0FjcXVpcmVkRnVsbE5hbWVfbG5hbWUuYXNTdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmNhcGl0YWxpemUoKSApLAogICAgICAgIGZpZWxkKCJwb3N0YWxBZGRyZXNzIiwgcmF3UHJvZmlsZS5hY3F1aXJlZEF0dHJpYnV0ZXNfQWNxdWlyZWRBZGRyZXNzX2FkZHJlc3MpLAogICAgICAgIGZpZWxkKCJhZGRyZXNzTG9jYWxpdHkiLCByYXdQcm9maWxlLmFjcXVpcmVkQXR0cmlidXRlc19BY3F1aXJlZEFkZHJlc3NfbG9jYWxpdHkpLAogICAgICAgIGZpZWxkKCJhZGRyZXNzUmVnaW9uIiwgcmF3UHJvZmlsZS5hY3F1aXJlZEF0dHJpYnV0ZXNfQWNxdWlyZWRBZGRyZXNzX2FkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMSksCiAgICAgICAgZmllbGQoInBvc3RhbENvZGUiLCByYXdQcm9maWxlLmFjcXVpcmVkQXR0cmlidXRlc19BY3F1aXJlZEFkZHJlc3NfcG9zdGFsX2NvZGUpLAogICAgICAgIGZpZWxkKCJjb3VudHJ5IiwgcmF3UHJvZmlsZS5hY3F1aXJlZEF0dHJpYnV0ZXNfQWNxdWlyZWRBZGRyZXNzX2NvdW50cnkpLAogICAgICAgIGZpZWxkKCJkcml2ZXJzTGljZW5zZSIsIHJhd1Byb2ZpbGUuYWNxdWlyZWRBdHRyaWJ1dGVzX0FjcXVpcmVkRHJpdmVyc0xpY2Vuc2VOdW1iZXJfYWNxdWlyZWREcml2ZXJzTGljZW5zZU51bWJlciksCiAgICAgICAgZmllbGQoImRyaXZlcnNMaWNlbnNlSXNzdWVyIiwgcmF3UHJvZmlsZS5hY3F1aXJlZEF0dHJpYnV0ZXNfRHJpdmVyc0xpY2Vuc2VJc3N1ZXJDb2RlX0RyaXZlcnNMaWNlbnNlSXNzdWVyQ29kZSksCiAgICAgICAgICBmaWVsZCgiRE9CIiwgcmF3UHJvZmlsZS5hY3F1aXJlZEF0dHJpYnV0ZXNfQWNxdWlyZWRET0JfbW9udGguYXNTdHJpbmcoKSArICIvIiArIHJhd1Byb2ZpbGUuYWNxdWlyZWRBdHRyaWJ1dGVzX0FjcXVpcmVkRE9CX2RheS5hc1N0cmluZygpICsgIi8iICsgcmF3UHJvZmlsZS5hY3F1aXJlZEF0dHJpYnV0ZXNfQWNxdWlyZWRET0JfeWVhci5hc1N0cmluZygpICksCgogICAgICAgIGZpZWxkKCJJRFdTY29yZSIsIHJhd1Byb2ZpbGUuYWNxdWlyZWRBdHRyaWJ1dGVzX0lEV1Njb3JlKSwKICAgICAgICBmaWVsZCgicG9saWN5RGVjaXNpb24iLCByYXdQcm9maWxlLnBvbGljeURlY2lzaW9uX2NvbmNsdXNpb24pLAogICAgICAgIGZpZWxkKCJwaG9uZSIsIHJhd1Byb2ZpbGUudXNlckF0dHJpYnV0ZXNfSW50ZXJuYXRpb25hbFRlbGVwaG9uZV9kaWFsQ29kZS5hc1N0cmluZygpICsgcmF3UHJvZmlsZS51c2VyQXR0cmlidXRlc19JbnRlcm5hdGlvbmFsVGVsZXBob25lX3RlbGVwaG9uZS5hc1N0cmluZygpKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCB1c2VyTmFtZSApCiAgICAgICAvL2ZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuYWNxdWlyZWRBdHRyaWJ1dGVzX0FjcXVpcmVkRnVsbE5hbWVfZm5hbWUuYXNTdHJpbmcoKSArICIuIiArIHJhd1Byb2ZpbGUuYWNxdWlyZWRBdHRyaWJ1dGVzX0FjcXVpcmVkRnVsbE5hbWVfbG5hbWUuYXNTdHJpbmcoKSApCgogICApCikK\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"f2107949-22f8-46c4-865d-ae1d1110a9cb\",\"name\":\"Set OATH Theme\",\"description\":\"Detect and preserve currently active theme before setting the new theme.\",\"script\":\"LyogU2V0IE9BVEggVGhlbWUKICogCiAqIERldGVjdCBhbmQgcHJlc2VydmUgY3VycmVudGx5IGFjdGl2ZSB0aGVtZSBiZWZvcmUgc2V0dGluZyB0aGUgbmV3IHRoZW1lLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICovCihmdW5jdGlvbiAoKSB7CiAgICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICAgIAogICAgICB2YXIgdGhlbWUgPSAiRXhwYW5zZV9PQVRIIjsKCiAgICAvLyBkbyBub3QgY2hhbmdlLCBtdXN0IGJlIGEgcmFuZG9tIGlkZW50aWZpZXIKICAgIHZhciBhbmNob3IgPSBnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4Jyk7CiAgCiAgICAgIHZhciBzY3JpcHQgPSAiIjsKICAgIHNjcmlwdCArPSAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0aGVtZS1pZC0iK2FuY2hvcisiXCIpLnZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RoZW1lLWlkJyk7IjsKICAgIHNjcmlwdCArPSAiY29uc29sZS5sb2coJ3RoZW1lLWlkPScrZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0aGVtZS1pZC0iK2FuY2hvcisiXCIpLnZhbHVlKTsiOwogICAgICBzY3JpcHQgKz0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibG9naW5CdXR0b25fMFwiKS5jbGljaygpOyI7CgogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlBvbGxpbmdXYWl0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuSGlkZGVuVmFsdWVDYWxsYmFjaywKICAgICAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKICAgICkKICAgIC8vIGRpc2NvdmVyIGFjdGl2ZSB0aGVtZSBmcm9tIFVJCiAgICBpZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKAogICAgICAgICAgICBuZXcgZnIuSGlkZGVuVmFsdWVDYWxsYmFjaygidGhlbWUtaWQtIithbmNob3IsICJmYWxzZSIpLAogICAgICAgICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkKICAgICAgICApLmJ1aWxkKCk7CiAgICB9CiAgICAgIC8vIGdldCBhY3RpdmUgdGhlbWUgZnJvbSBjYWxsYmFjayBhbmQgc2V0IG5ldyB0aGVtZQogICAgICBlbHNlIGlmIChjYWxsYmFja3Muc2l6ZSgpID09PSAyKSB7CiAgICAgICAgLy8gZGlkIHdlIGdldCB0aGUgaWQgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgdGhlbWU/CiAgICAgICAgaWYgKGNhbGxiYWNrcy5nZXQoMCkuZ2V0VmFsdWUoKSAhPT0gInRoZW1lLWlkLSIrYW5jaG9yKSB7CiAgICAgICAgICAgICAgc2hhcmVkU3RhdGUucHV0KCJ0aGVtZUlkIiwgY2FsbGJhY2tzLmdldCgwKS5nZXRWYWx1ZSgpKTsKICAgICAgICB9CiAgICAgICAgLy8gc2V0IG5ldyB0aGVtZQogICAgICAgIHZhciBzdGFnZSA9ICJ0aGVtZUlkPSIrdGhlbWU7CiAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICAgICAgbmV3IGZyLlBvbGxpbmdXYWl0Q2FsbGJhY2soIjAiLCAiUGxlYXNlIHdhaXQgLi4uIikKICAgICAgICApLndpdGhTdGFnZShzdGFnZSkuYnVpbGQoKTsKICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgLy8gY29udGludWUKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbyhvdXRjb21lKS5idWlsZCgpOwogICAgfQoKICAgICAvKgogICAgICAqIEdlbmVyYXRlIGEgdG9rZW4gaW4gdGhlIGRlc2lyZWQgZm9ybWF0LiBBbGwgJ3gnIGNoYXJhY3RlcnMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGEgcmFuZG9tIG51bWJlciAwLTkuCiAgICAgICogCiAgICAgICogRXhhbXBsZToKICAgICAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAgICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICAgICovCiAgICBmdW5jdGlvbiBnZW5lcmF0ZU51bWVyaWNUb2tlbihmb3JtYXQpIHsKICAgICAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbihjKSB7CiAgICAgICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxMHwwOwogICAgICAgICAgICB2YXIgdiA9IHI7CiAgICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDEwKTsKICAgICAgICB9KTsKICAgIH0KfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"157298c0-7d31-4059-a95b-eeb08473b7e5\",\"name\":\"Device Id (Match) - Client Side\",\"description\":\"Default global script for client side Device Id (Match) Authentication Module\",\"script\":\"dmFyIGZvbnREZXRlY3RvciA9IChmdW5jdGlvbiAoKSB7CiAgICAvKioKICAgICAqIEphdmFTY3JpcHQgY29kZSB0byBkZXRlY3QgYXZhaWxhYmxlIGF2YWlsYWJpbGl0eSBvZiBhCiAgICAgKiBwYXJ0aWN1bGFyIGZvbnQgaW4gYSBicm93c2VyIHVzaW5nIEphdmFTY3JpcHQgYW5kIENTUy4KICAgICAqCiAgICAgKiBBdXRob3IgOiBMYWxpdCBQYXRlbAogICAgICogV2Vic2l0ZTogaHR0cDovL3d3dy5sYWxpdC5vcmcvbGFiL2phdmFzY3JpcHQtY3NzLWZvbnQtZGV0ZWN0LwogICAgICogTGljZW5zZTogQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wCiAgICAgKiAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAgICAqIFZlcnNpb246IDAuMTUgKDIxIFNlcCAyMDA5KQogICAgICogICAgICAgICAgQ2hhbmdlZCBjb21wYXJpc2lvbiBmb250IHRvIGRlZmF1bHQgZnJvbSBzYW5zLWRlZmF1bHQtZGVmYXVsdCwKICAgICAqICAgICAgICAgIGFzIGluIEZGMy4wIGZvbnQgb2YgY2hpbGQgZWxlbWVudCBkaWRuJ3QgZmFsbGJhY2sKICAgICAqICAgICAgICAgIHRvIHBhcmVudCBlbGVtZW50IGlmIHRoZSBmb250IGlzIG1pc3NpbmcuCiAgICAgKiBWZXJzaW9uOiAwLjIgKDA0IE1hciAyMDEyKQogICAgICogICAgICAgICAgQ29tcGFyaW5nIGZvbnQgYWdhaW5zdCBhbGwgdGhlIDMgZ2VuZXJpYyBmb250IGZhbWlsaWVzIGllLAogICAgICogICAgICAgICAgJ21vbm9zcGFjZScsICdzYW5zLXNlcmlmJyBhbmQgJ3NhbnMnLiBJZiBpdCBkb2Vzbid0IG1hdGNoIGFsbCAzCiAgICAgKiAgICAgICAgICB0aGVuIHRoYXQgZm9udCBpcyAxMDAlIG5vdCBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbQogICAgICogVmVyc2lvbjogMC4zICgyNCBNYXIgMjAxMikKICAgICAqICAgICAgICAgIFJlcGxhY2VkIHNhbnMgd2l0aCBzZXJpZiBpbiB0aGUgbGlzdCBvZiBiYXNlRm9udHMKICAgICAqLwogICAgLyoKICAgICAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMgRm9yZ2VSb2NrIEFTLgogICAgICovCiAgICB2YXIgZGV0ZWN0b3IgPSB7fSwgYmFzZUZvbnRzLCB0ZXN0U3RyaW5nLCB0ZXN0U2l6ZSwgaCwgcywgZGVmYXVsdFdpZHRoID0ge30sIGRlZmF1bHRIZWlnaHQgPSB7fSwgaW5kZXg7CgogICAgLy8gYSBmb250IHdpbGwgYmUgY29tcGFyZWQgYWdhaW5zdCBhbGwgdGhlIHRocmVlIGRlZmF1bHQgZm9udHMuCiAgICAvLyBhbmQgaWYgaXQgZG9lc24ndCBtYXRjaCBhbGwgMyB0aGVuIHRoYXQgZm9udCBpcyBub3QgYXZhaWxhYmxlLgogICAgYmFzZUZvbnRzID0gWydtb25vc3BhY2UnLCAnc2Fucy1zZXJpZicsICdzZXJpZiddOwoKICAgIC8vd2UgdXNlIG0gb3IgdyBiZWNhdXNlIHRoZXNlIHR3byBjaGFyYWN0ZXJzIHRha2UgdXAgdGhlIG1heGltdW0gd2lkdGguCiAgICAvLyBBbmQgd2UgdXNlIGEgTExpIHNvIHRoYXQgdGhlIHNhbWUgbWF0Y2hpbmcgZm9udHMgY2FuIGdldCBzZXBhcmF0ZWQKICAgIHRlc3RTdHJpbmcgPSAibW1tbW1tbW1tbWxsaSI7CgogICAgLy93ZSB0ZXN0IHVzaW5nIDcycHggZm9udCBzaXplLCB3ZSBtYXkgdXNlIGFueSBzaXplLiBJIGd1ZXNzIGxhcmdlciB0aGUgYmV0dGVyLgogICAgdGVzdFNpemUgPSAnNzJweCc7CgogICAgaCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07CgogICAgLy8gY3JlYXRlIGEgU1BBTiBpbiB0aGUgZG9jdW1lbnQgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgdGV4dCB3ZSB1c2UgdG8gdGVzdAogICAgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIHMuc3R5bGUuZm9udFNpemUgPSB0ZXN0U2l6ZTsKICAgIHMuaW5uZXJIVE1MID0gdGVzdFN0cmluZzsKICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHQgd2lkdGggZm9yIHRoZSB0aHJlZSBiYXNlIGZvbnRzCiAgICAgICAgcy5zdHlsZS5mb250RmFtaWx5ID0gYmFzZUZvbnRzW2luZGV4XTsKICAgICAgICBoLmFwcGVuZENoaWxkKHMpOwogICAgICAgIGRlZmF1bHRXaWR0aFtiYXNlRm9udHNbaW5kZXhdXSA9IHMub2Zmc2V0V2lkdGg7IC8vd2lkdGggZm9yIHRoZSBkZWZhdWx0IGZvbnQKICAgICAgICBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dID0gcy5vZmZzZXRIZWlnaHQ7IC8vaGVpZ2h0IGZvciB0aGUgZGVmdWFsdCBmb250CiAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgIH0KCiAgICBkZXRlY3Rvci5kZXRlY3QgPSBmdW5jdGlvbihmb250KSB7CiAgICAgICAgdmFyIGRldGVjdGVkID0gZmFsc2UsIGluZGV4LCBtYXRjaGVkOwogICAgICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgICAgIHMuc3R5bGUuZm9udEZhbWlseSA9IGZvbnQgKyAnLCcgKyBiYXNlRm9udHNbaW5kZXhdOyAvLyBuYW1lIG9mIHRoZSBmb250IGFsb25nIHdpdGggdGhlIGJhc2UgZm9udCBmb3IgZmFsbGJhY2suCiAgICAgICAgICAgIGguYXBwZW5kQ2hpbGQocyk7CiAgICAgICAgICAgIG1hdGNoZWQgPSAocy5vZmZzZXRXaWR0aCAhPT0gZGVmYXVsdFdpZHRoW2Jhc2VGb250c1tpbmRleF1dIHx8IHMub2Zmc2V0SGVpZ2h0ICE9PSBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dKTsKICAgICAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgICAgICAgICAgZGV0ZWN0ZWQgPSBkZXRlY3RlZCB8fCBtYXRjaGVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGV0ZWN0ZWQ7CiAgICB9OwoKICAgIHJldHVybiBkZXRlY3RvcjsKfSgpKTsKLyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAxNCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGNvbGxlY3RTY3JlZW5JbmZvID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBzY3JlZW5JbmZvID0ge307CiAgICAgICAgaWYgKHNjcmVlbikgewogICAgICAgICAgICBpZiAoc2NyZWVuLndpZHRoKSB7CiAgICAgICAgICAgICAgICBzY3JlZW5JbmZvLnNjcmVlbldpZHRoID0gc2NyZWVuLndpZHRoOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLmhlaWdodCkgewogICAgICAgICAgICAgICAgc2NyZWVuSW5mby5zY3JlZW5IZWlnaHQgPSBzY3JlZW4uaGVpZ2h0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLnBpeGVsRGVwdGgpIHsKICAgICAgICAgICAgICAgIHNjcmVlbkluZm8uc2NyZWVuQ29sb3VyRGVwdGggPSBzY3JlZW4ucGl4ZWxEZXB0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3Qgc2NyZWVuIGluZm9ybWF0aW9uLiBzY3JlZW4gaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzY3JlZW5JbmZvOwogICAgfSwKICAgIGNvbGxlY3RUaW1lem9uZUluZm8gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHRpbWV6b25lSW5mbyA9ICB7fSwgb2Zmc2V0ID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOwoKICAgICAgICBpZiAob2Zmc2V0KSB7CiAgICAgICAgICAgIHRpbWV6b25lSW5mby50aW1lem9uZSA9IG9mZnNldDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbm5vdCBjb2xsZWN0IHRpbWV6b25lIGluZm9ybWF0aW9uLiB0aW1lem9uZSBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aW1lem9uZUluZm87CiAgICB9LAogICAgY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbyA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgaWYgKG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IucGx1Z2lucykgewogICAgICAgICAgICB2YXIgcGx1Z2luc0luZm8gPSB7fSwgaSwgcGx1Z2lucyA9IG5hdmlnYXRvci5wbHVnaW5zOwogICAgICAgICAgICBwbHVnaW5zSW5mby5pbnN0YWxsZWRQbHVnaW5zID0gIiI7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGx1Z2luc0luZm8uaW5zdGFsbGVkUGx1Z2lucyA9IHBsdWdpbnNJbmZvLmluc3RhbGxlZFBsdWdpbnMgKyBwbHVnaW5zW2ldLmZpbGVuYW1lICsgIjsiOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcGx1Z2luc0luZm87CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBicm93c2VyIHBsdWdpbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLnBsdWdpbnMgaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgICAgIHJldHVybiB7fTsKICAgICAgICB9CgogICAgfSwKLy8gR2V0dGluZyBnZW9sb2NhdGlvbiB0YWtlcyBzb21lIHRpbWUgYW5kIGlzIGRvbmUgYXN5bmNocm9ub3VzbHksIGhlbmNlIG5lZWQgYSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgb25jZSBnZW9sb2NhdGlvbiBpcyByZXRyaWV2ZWQuCiAgICBjb2xsZWN0R2VvbG9jYXRpb25JbmZvID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIGdlb2xvY2F0aW9uSW5mbyA9IHt9LAogICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgICAgICAgICAgZ2VvbG9jYXRpb25JbmZvLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGU7CiAgICAgICAgICAgICAgICBnZW9sb2NhdGlvbkluZm8ubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGU7CiAgICAgICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgICAgICB9LCBlcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3QgZ2VvbG9jYXRpb24gaW5mb3JtYXRpb24uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVycm9yLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgY2FsbGJhY2soZ2VvbG9jYXRpb25JbmZvKTsKICAgICAgICAgICAgfTsKICAgICAgICBpZiAobmF2aWdhdG9yICYmIG5hdmlnYXRvci5nZW9sb2NhdGlvbikgewogICAgICAgICAgICAvLyBOQjogSWYgdXNlciBjaG9vc2VzICdOb3Qgbm93JyBvbiBGaXJlZm94IG5laXRoZXIgY2FsbGJhY2sgZ2V0cyBjYWxsZWQKICAgICAgICAgICAgLy8gICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NTUzMwogICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBnZW9sb2NhdGlvbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgIH0KICAgIH0sCiAgICBjb2xsZWN0QnJvd3NlckZvbnRzSW5mbyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZm9udHNJbmZvID0ge30sIGksIGZvbnRzTGlzdCA9IFsiY3Vyc2l2ZSIsIm1vbm9zcGFjZSIsInNlcmlmIiwic2Fucy1zZXJpZiIsImZhbnRhc3kiLCJkZWZhdWx0IiwiQXJpYWwiLCJBcmlhbCBCbGFjayIsCiAgICAgICAgICAgICJBcmlhbCBOYXJyb3ciLCJBcmlhbCBSb3VuZGVkIE1UIEJvbGQiLCJCb29rbWFuIE9sZCBTdHlsZSIsIkJyYWRsZXkgSGFuZCBJVEMiLCJDZW50dXJ5IiwiQ2VudHVyeSBHb3RoaWMiLAogICAgICAgICAgICAiQ29taWMgU2FucyBNUyIsIkNvdXJpZXIiLCJDb3VyaWVyIE5ldyIsIkdlb3JnaWEiLCJHZW50aXVtIiwiSW1wYWN0IiwiS2luZyIsIkx1Y2lkYSBDb25zb2xlIiwiTGFsaXQiLAogICAgICAgICAgICAiTW9kZW5hIiwiTW9ub3R5cGUgQ29yc2l2YSIsIlBhcHlydXMiLCJUYWhvbWEiLCJUZVgiLCJUaW1lcyIsIlRpbWVzIE5ldyBSb21hbiIsIlRyZWJ1Y2hldCBNUyIsIlZlcmRhbmEiLAogICAgICAgICAgICAiVmVyb25hIl07CiAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gIiI7CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBmb250c0xpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGZvbnREZXRlY3Rvci5kZXRlY3QoZm9udHNMaXN0W2ldKSkgewogICAgICAgICAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzICsgZm9udHNMaXN0W2ldICsgIjsiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb250c0luZm87CiAgICB9LAogICAgZGV2aWNlUHJpbnQgPSB7fTsKCmRldmljZVByaW50LnNjcmVlbiA9IGNvbGxlY3RTY3JlZW5JbmZvKCk7CmRldmljZVByaW50LnRpbWV6b25lID0gY29sbGVjdFRpbWV6b25lSW5mbygpOwpkZXZpY2VQcmludC5wbHVnaW5zID0gY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbygpOwpkZXZpY2VQcmludC5mb250cyA9IGNvbGxlY3RCcm93c2VyRm9udHNJbmZvKCk7CgppZiAobmF2aWdhdG9yLnVzZXJBZ2VudCkgewogICAgZGV2aWNlUHJpbnQudXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKfQppZiAobmF2aWdhdG9yLmFwcE5hbWUpIHsKICAgIGRldmljZVByaW50LmFwcE5hbWUgPSBuYXZpZ2F0b3IuYXBwTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcENvZGVOYW1lKSB7CiAgICBkZXZpY2VQcmludC5hcHBDb2RlTmFtZSA9IG5hdmlnYXRvci5hcHBDb2RlTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcFZlcnNpb24pIHsKICAgIGRldmljZVByaW50LmFwcFZlcnNpb24gPSBuYXZpZ2F0b3IuYXBwVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbikgewogICAgZGV2aWNlUHJpbnQuYXBwTWlub3JWZXJzaW9uID0gbmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmJ1aWxkSUQpIHsKICAgIGRldmljZVByaW50LmJ1aWxkSUQgPSBuYXZpZ2F0b3IuYnVpbGRJRDsKfQppZiAobmF2aWdhdG9yLnBsYXRmb3JtKSB7CiAgICBkZXZpY2VQcmludC5wbGF0Zm9ybSA9IG5hdmlnYXRvci5wbGF0Zm9ybTsKfQppZiAobmF2aWdhdG9yLmNwdUNsYXNzKSB7CiAgICBkZXZpY2VQcmludC5jcHVDbGFzcyA9IG5hdmlnYXRvci5jcHVDbGFzczsKfQppZiAobmF2aWdhdG9yLm9zY3B1KSB7CiAgICBkZXZpY2VQcmludC5vc2NwdSA9IG5hdmlnYXRvci5vc2NwdTsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3QpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3QgPSBuYXZpZ2F0b3IucHJvZHVjdDsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3RTdWIpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3RTdWIgPSBuYXZpZ2F0b3IucHJvZHVjdFN1YjsKfQppZiAobmF2aWdhdG9yLnZlbmRvcikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yID0gbmF2aWdhdG9yLnZlbmRvcjsKfQppZiAobmF2aWdhdG9yLnZlbmRvclN1YikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yU3ViID0gbmF2aWdhdG9yLnZlbmRvclN1YjsKfQppZiAobmF2aWdhdG9yLmxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5sYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnVzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQudXNlckxhbmd1YWdlID0gbmF2aWdhdG9yLnVzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQuYnJvd3Nlckxhbmd1YWdlID0gbmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnN5c3RlbUxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5zeXN0ZW1MYW5ndWFnZSA9IG5hdmlnYXRvci5zeXN0ZW1MYW5ndWFnZTsKfQoKLy8gQXR0ZW1wdCB0byBjb2xsZWN0IGdlby1sb2NhdGlvbiBpbmZvcm1hdGlvbiBhbmQgcmV0dXJuIHRoaXMgd2l0aCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgovLyBPdGhlcndpc2UsIGlmIGdlby1sb2NhdGlvbiBmYWlscyBvciB0YWtlcyBsb25nZXIgdGhhbiAzMCBzZWNvbmRzLCBhdXRvLXN1Ym1pdCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgphdXRvU3VibWl0RGVsYXkgPSAzMDAwMDsKb3V0cHV0LnZhbHVlID0gSlNPTi5zdHJpbmdpZnkoZGV2aWNlUHJpbnQpOwpjb2xsZWN0R2VvbG9jYXRpb25JbmZvKGZ1bmN0aW9uKGdlb2xvY2F0aW9uSW5mbykgewogICAgZGV2aWNlUHJpbnQuZ2VvbG9jYXRpb24gPSBnZW9sb2NhdGlvbkluZm87CiAgICBvdXRwdXQudmFsdWUgPSBKU09OLnN0cmluZ2lmeShkZXZpY2VQcmludCk7CiAgICBzdWJtaXQoKTsKfSk7\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"158e500b-8180-4641-ad48-23577fe9d976\",\"name\":\"Admin_MfaOptIn\",\"description\":\"null\",\"script\":\"LyoKVGhpcyBjcmVhdGVzIHRoZSBmb2xsb3dpbmcgY2FsbGJhY2tzOgotIFRleHRPdXRwdXRDYWxsYmFjazogRGlzcGxheSB0aGUgc3RlcCB0aXRsZSBhbmQgZGVzY3JpcHRpb24KLSBDb25maXJtYXRpb25DYWxsYmFjazogRGlzcGxheSBhIGxpc3Qgb2YgYnV0dG9ucyBmb3IgY2hvaWNlcwotIEhpZGRlblZhbHVlQ2FsbGJhY2s6IENhcHR1cmVzIHRoZSAic2tpcCIgb3B0aW9uLCBpZiBzZWxlY3RlZAotIFNjcmlwdFRleHRPdXRwdXRDYWxsYmFjazogQ3JlYXRlcyBhICJTa2lwIGZvciBub3ciIGxpbmsgYnV0dG9uIGFuZCBwb3NpdGlvbnMgaXQgYmVsb3cgdGhlIGJ1dHRvbnMgCiovCgp2YXIgdG9rZW4gPSBnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4Jyk7CnZhciBsb2FkaW5nTWVzc2FnZSA9ICdMb2FkaW5nLi4uJzsKdmFyIGxpbmtCdXR0b24gPSAiPGJ1dHRvbiBpZD0nc2tpcC1saW5rLSIuY29uY2F0KHRva2VuKS5jb25jYXQoIicgY2xhc3M9J2J0biBidG4tYmxvY2sgYnRuLWxpbmsnIHR5cGU9c3VibWl0PlNraXAgZm9yIG5vdzwvYnV0dG9uPiIpOwp2YXIgbWVzc2FnZSA9ICI8aDIgY2xhc3M9aDI+U2V0IHVwIDItc3RlcCB2ZXJpZmljYXRpb248L2gyPjxkaXYgc3R5bGU9J21hcmdpbi1ib3R0b206MWVtJz5Qcm90ZWN0IHlvdXIgYWNjb3VudCBieSBhZGRpbmcgYSBzZWNvbmQgc3RlcCBhZnRlciBlbnRlcmluZyB5b3VyIHBhc3N3b3JkIHRvIHZlcmlmeSBpdCdzIHlvdSBzaWduaW5nIGluLjwvZGl2PiI7CnZhciBjaG9pY2VzID0gWydTZXQgdXAnXTsKdmFyIGRlZmF1bHRDaG9pY2UgPSAwOwp2YXIgc2tpcFZhbHVlID0gJ1NraXAnOwoKLy8gVGhpcyB3aWxsIHJ1biByZWN1cnNpdmVseSBpbiB0aGUgYnJvd3NlciB1bnRpbCByZWZlcmVuY2VzIGNhbiBiZSBvYnRhaW5lZCB0byBrZXkgRE9NIGVsZW1lbnRzLCBhdCB3aGljaCBwb2ludC4KLy8gaXQgd2lsbCBjdXN0b21pemUgdGhlIERPTS4gIFRoaXMgaXMgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIFVJIHJlbmRlcmluZyBjYWxsYmFja3MuCnZhciBzZXR1cFBhZ2VTY3JpcHQgPQogICd2YXIgc2V0dXBQYWdlID0gZnVuY3Rpb24oKSB7Jy5jb25jYXQoCiAgJyAgdmFyIHNraXBJbnB1dEVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2tpcC1pbnB1dC0nKS5jb25jYXQodG9rZW4pLmNvbmNhdCgnIik7JykuY29uY2F0KAogICcgIHZhciBtZXNzYWdlRWxlbTsnKS5jb25jYXQoCiAgJyAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiY2FsbGJhY2stY29tcG9uZW50IikuZm9yRWFjaCgnKS5jb25jYXQoCiAgJyAgICBmdW5jdGlvbiAoZSkgeycpLmNvbmNhdCgKICAnICAgICAgdmFyIG0gPSBlLmZpcnN0RWxlbWVudENoaWxkOycpLmNvbmNhdCgKICAnICAgICAgaWYgKG0uZmlyc3RDaGlsZCAmJiBtLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gIiN0ZXh0IiAmJiBtLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAiJykuY29uY2F0KGxvYWRpbmdNZXNzYWdlKS5jb25jYXQoJyIpIHsnKS5jb25jYXQoCiAgJyAgICAgICAgbWVzc2FnZUVsZW0gPSBtOycpLmNvbmNhdCgKICAnICAgICAgfScpLmNvbmNhdCgKICAnICAgIH0nKS5jb25jYXQoCiAgJyAgKTsnKS5jb25jYXQoCiAgJyAgaWYgKCFza2lwSW5wdXRFbGVtIHx8ICFtZXNzYWdlRWxlbSkgeycpLmNvbmNhdCgKICAnICAgIHJldHVybiBzZXRUaW1lb3V0KHNldHVwUGFnZSwgNTApOycpLmNvbmNhdCgKICAnICB9JykuY29uY2F0KAogICcgIHZhciBza2lwQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7JykuY29uY2F0KAogICcgIHNraXBDb250YWluZXIuc3R5bGUgPSAid2lkdGg6MTAwJSI7JykuY29uY2F0KAogICcgIHNraXBDb250YWluZXIuaW5uZXJIVE1MID0gIicpLmNvbmNhdChsaW5rQnV0dG9uKS5jb25jYXQoJyI7JykuY29uY2F0KAogICcgIHNraXBJbnB1dEVsZW0ucGFyZW50Tm9kZS5hcHBlbmQoc2tpcENvbnRhaW5lcik7JykuY29uY2F0KAogICcgIG1lc3NhZ2VFbGVtLmFsaWduID0gImNlbnRlciI7JykuY29uY2F0KAogICcgIG1lc3NhZ2VFbGVtLmlubmVySFRNTCA9ICInKS5jb25jYXQobWVzc2FnZSkuY29uY2F0KCciOycpLmNvbmNhdCgKICAnICB2YXIgYmluZFNraXBMaW5rID0gZnVuY3Rpb24oKSB7JykuY29uY2F0KAogICcgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNraXAtbGluay0nKS5jb25jYXQodG9rZW4pLmNvbmNhdCgnIikub25jbGljayA9IGZ1bmN0aW9uKCkgeycpLmNvbmNhdCgKICAnICAgICAgc2tpcElucHV0RWxlbS52YWx1ZSA9ICInKS5jb25jYXQoc2tpcFZhbHVlKS5jb25jYXQoJyI7JykuY29uY2F0KAogICcgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9naW5CdXR0b25fMCIpLmNsaWNrKCk7JykuY29uY2F0KAogICcgICAgICByZXR1cm4gZmFsc2U7JykuY29uY2F0KAogICcgICAgfTsnKS5jb25jYXQoCiAgJyAgfTsnKS5jb25jYXQoCiAgJyAgc2V0VGltZW91dChiaW5kU2tpcExpbmssIDEwMCk7JykuY29uY2F0KAogICd9OycpLmNvbmNhdCgKICAnc2V0dXBQYWdlKCk7Jyk7Cgp2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5Db25maXJtYXRpb25DYWxsYmFjaywKICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5IaWRkZW5WYWx1ZUNhbGxiYWNrLAogIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawopCgp3aXRoIChmcikgewogIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBBY3Rpb24uc2VuZCgKICAgICAgbmV3IFRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgIFRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgIGxvYWRpbmdNZXNzYWdlCiAgICAgICksCiAgICAgIG5ldyBDb25maXJtYXRpb25DYWxsYmFjaygKICAgICAgICAgIENvbmZpcm1hdGlvbkNhbGxiYWNrLklORk9STUFUSU9OLAogICAgICAgICAgY2hvaWNlcywKICAgICAgICAgIGRlZmF1bHRDaG9pY2UKICAgICAgKSwKICAgICAgbmV3IEhpZGRlblZhbHVlQ2FsbGJhY2soJ3NraXAtaW5wdXQtJy5jb25jYXQodG9rZW4pLCAnZmFsc2UnKSwKICAgICAgbmV3IFNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzZXR1cFBhZ2VTY3JpcHQpCiAgICApLmJ1aWxkKCkKICB9IGVsc2UgewogICAgaWYgKGNhbGxiYWNrcy5nZXQoMikuZ2V0VmFsdWUoKSA9PSBza2lwVmFsdWUpIHsKICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8oc2tpcFZhbHVlKS5idWlsZCgpOwogICAgfSBlbHNlIHsKICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8oY2hvaWNlc1tjYWxsYmFja3MuZ2V0KDEpLmdldFNlbGVjdGVkSW5kZXgoKV0pLmJ1aWxkKCk7CiAgICB9CiAgfQp9CgogLyoKICAqIEdlbmVyYXRlIGEgdG9rZW4gaW4gdGhlIGRlc2lyZWQgZm9ybWF0LiBBbGwgJ3gnIGNoYXJhY3RlcnMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGEgcmFuZG9tIG51bWJlciAwLTkuCiAgKiAKICAqIEV4YW1wbGU6CiAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAqICd4eHgteHh4JyBwcm9kdWNlcyAnNDMyLTUyMScKICAqLwpmdW5jdGlvbiBnZW5lcmF0ZU51bWVyaWNUb2tlbihmb3JtYXQpIHsKICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbihjKSB7CiAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkqMTB8MDsKICAgIHZhciB2ID0gcjsKICAgIHJldHVybiB2LnRvU3RyaW5nKDEwKTsKICB9KTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"a064f7b7-29c5-480b-ac09-d3d122829278\",\"name\":\"Sanitize objectAttributes\",\"description\":\"Sanitize objectAttributes\",\"script\":\"LyoKewogICAgInVzZXJOYW1lIjogInNob2xtZXMiLAogICAgImdpdmVuTmFtZSI6ICJTaGVybG9jayIsCiAgICAic24iOiAiSG9sbWVzIiwKICAgICJtYWlsIjogImluZm85MThAMDYxNTJhbGVydHMuc2VjdXJpdHkub3JnIiwKICAgICJ0ZWxlcGhvbmVOdW1iZXIiOiAsCiAgICAicG9zdGFsQWRkcmVzcyI6ICIyMjFCIEJha2VyIFN0cmVldCIsCiAgICAiY2l0eSI6ICJMb25kb24iLAogICAgInN0YXRlUHJvdmluY2UiOiAsCiAgICAicG9zdGFsQ29kZSI6ICJOVzEiLAogICAgImNvdW50cnkiOiAiVW5pdGVkIFN0YXRlcyIsCiAgICAicHJlZmVyZW5jZXMiOiB7CiAgICAgICAgIm1hcmtldGluZyI6IGZhbHNlLAogICAgICAgICJ1cGRhdGVzIjogdHJ1ZQogICAgfQp9CiovCmxvZ2dlci5lcnJvcigiU2FuaXRpemUgb2JqZWN0QXR0cmlidXRlczogc3RhcnQiKTsKb3V0Y29tZSA9ICJ0cnVlIjsKdmFyIGF0dHJzID0gc2hhcmVkU3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIik7CmlmIChhdHRycykgewogIHZhciBrZXlzID0gWwogICAgInVzZXJOYW1lIiwKICAgICJnaXZlbk5hbWUiLAogICAgInNuIiwKICAgICJtYWlsIiwKICAgICJ0ZWxlcGhvbmVOdW1iZXIiLAogICAgInBvc3RhbEFkZHJlc3MiLAogICAgImNpdHkiLAogICAgInN0YXRlUHJvdmluY2UiLAogICAgInBvc3RhbENvZGUiLAogICAgImNvdW50cnkiLAogICAgImZySW5kZXhlZFN0cmluZzIiCiAgXQogIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICBpZiAoYXR0cnMuZ2V0KGtleSkgJiYgYXR0cnMuZ2V0KGtleSkudG9TdHJpbmcoKSA9PSAiIikgewogICAgICBsb2dnZXIuZXJyb3IoIlNhbml0aXplIG9iamVjdEF0dHJpYnV0ZXM6IHJlbW92ZSAiLmNvbmNhdChrZXkpKTsKICAgICAgYXR0cnMucmVtb3ZlKGtleSk7CiAgICB9CiAgfSkKfQppZiAodHJhbnNpZW50U3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikgJiYgdHJhbnNpZW50U3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikuZ2V0KCJwYXNzd29yZCIpLnRvU3RyaW5nKCkgIT09ICIiKSB7CiAgbG9nZ2VyLmVycm9yKCJTYW5pdGl6ZSBvYmplY3RBdHRyaWJ1dGVzOiBwcmVzZXJ2ZSBwYXNzd29yZCBpbiBzaGFyZWQgc3RhdGUiKTsKICBzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoInBhc3N3b3JkIiwgdHJhbnNpZW50U3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikuZ2V0KCJwYXNzd29yZCIpLnRvU3RyaW5nKCkpOwp9CmxvZ2dlci5lcnJvcigiU2FuaXRpemUgb2JqZWN0QXR0cmlidXRlczogZW5kIik7CgovKgogKiBQcm9wZXJseSBzZXQgYXR0cmlidXRlcyBpbiBzaGFyZWQgc3RhdGUgZm9yIHVzZSB3aXRoIHRoZSBDcmVhdGUvUGF0Y2ggT2JqZWN0IG5vZGVzLgogKi8KZnVuY3Rpb24gc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7CiAgICBpZiAoc2hhcmVkU3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikpIHsKICAgICAgICBzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKS5wdXQobmFtZSwgdmFsdWUpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgSlNPTi5wYXJzZSgie1wiIituYW1lKyJcIjoiK3ZhbHVlKyJ9IikpOwogICAgfQp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"4c7bb7bb-c5d6-47ac-92dc-256fb8121fa9\",\"name\":\"Admin_MfaRequiredCheck\",\"description\":\"null\",\"script\":\"aWYgKCJmYWxzZSIgPT0gInRydWUiKSB7CiAgb3V0Y29tZSA9ICJSZXF1aXJlZCI7Cn0gZWxzZSB7CiAgb3V0Y29tZSA9ICJPcHRpb25hbCI7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"13cd3c60-a04b-4455-b028-fbfd01ed88b1\",\"name\":\"AAD Passthru ROPC\",\"description\":\"Azure AD pass through authentication using Resource Owner Password Credential flow\",\"script\":\"LyogQUFEIFBhc3N0aHJ1IFJPUEMKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQXp1cmUgQUQgcGFzcyB0aHJvdWdoIGF1dGhlbnRpY2F0aW9uIHVzaW5nIFJlc291cmNlIE93bmVyIFBhc3N3b3JkIENyZWRlbnRpYWwgZmxvdwogKiAKICogVGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIG5vdCB3b3JrIHByb3Blcmx5IGFzIGlzLiAKICogSXQgcmVxdWlyZXMgdGhlIFBsYXRmb3JtIFVzZXJuYW1lIGFuZCBQbGF0Zm9ybSBQYXNzd29yZCBjb2xsZWN0b3Igbm9kZXMKICogYmVmb3JlIGl0IGNhbiBvcGVyYXRlLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIFZhbGlkCiAqIC0gSW52YWxpZAogKiAtIEV4cGlyZWQKICogLSBEaXNhYmxlZAogKiAtIEVycm9yCiAqLwpsb2dnZXIubWVzc2FnZSgiQUFEIFBhc3N0aHJ1IFJPUEM6IHN0YXJ0Iik7CgppZiAoc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpICYmIHRyYW5zaWVudFN0YXRlLmdldCgicGFzc3dvcmQiKSkgewogICAgICAvKgogICAgICogQkVHSU4gU0NSSVBUIENPTkZJR1VSQVRJT04KICAgICAqCiAgICAgKiBSRVBMQUNFIFdJVEggWU9VUiBPV04gQVpVUkUgQUQgU0VUVElOR1MKICAgICAqCiAgICAgKiBBQURfVEVOQU5UX0lEIGlzIHlvdXIgdGVuYW50IElEOiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS9hY3RpdmUtZGlyZWN0b3J5L2Z1bmRhbWVudGFscy9hY3RpdmUtZGlyZWN0b3J5LWhvdy10by1maW5kLXRlbmFudAogICAgICogQUFEX0NMSUVOVF9JRCBpcyB5b3VyIHJlZ2lzdGVyZWQgYXBwIElEOiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS9hY3RpdmUtZGlyZWN0b3J5L2RldmVsb3AvcXVpY2tzdGFydC1yZWdpc3Rlci1hcHAKICAgICAqLwogICAgdmFyIEFBRF9URU5BTlRfSUQgPSAiNzExZmZhOWMtNTk3Mi00NzEzLWFjZTMtNjg4Yzk3MzI2MTRhIjsKICAgIHZhciBBQURfQ0xJRU5UX0lEID0gIjUxZjEzMGVjLWQyOWQtNDQxOS1hNDkyLTAwMTFkMDljMWExNiI7CiAgICAvKgogICAgICogRU5EIFNDUklQVCBDT05GSUdVUkFUSU9OCiAgICAgKi8KICAgICAgCiAgICAvLyBBenVyZSBBRCBST1BDIENvbmZpZ3VyYXRpb24KICAgIHZhciBBQURfU0NPUEUgPSAicHJvZmlsZSI7CiAgICAgIHZhciBBQURfUkVTT1VSQ0UgPSAiaHR0cHM6Ly9ncmFwaC5taWNyb3NvZnQuY29tLyIKICAgIHZhciBBQURfT0FVVEgyX1RPS0VOX1VSSSA9ICJodHRwczovL2xvZ2luLndpbmRvd3MubmV0LyIuY29uY2F0KEFBRF9URU5BTlRfSUQpLmNvbmNhdCgiL29hdXRoMi90b2tlbiIpOwoKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldE1ldGhvZCgnUE9TVCcpOwogICAgcmVxdWVzdC5zZXRVcmkoQUFEX09BVVRIMl9UT0tFTl9VUkkpOwogICAgcmVxdWVzdC5nZXRIZWFkZXJzKCkuYWRkKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICB2YXIgcGFyYW1zID0gcmVxdWVzdC5nZXRGb3JtKCk7CiAgICBwYXJhbXMuYWRkKCJyZXNvdXJjZSIsIEFBRF9SRVNPVVJDRSk7CiAgICBwYXJhbXMuYWRkKCJjbGllbnRfaWQiLCBBQURfQ0xJRU5UX0lEKTsKICAgIHBhcmFtcy5hZGQoImdyYW50X3R5cGUiLCAicGFzc3dvcmQiKTsKICAgIHBhcmFtcy5hZGQoInNjb3BlIiwgQUFEX1NDT1BFKTsKICAgIHBhcmFtcy5hZGQoInVzZXJuYW1lIiwgc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKTsKICAgIHBhcmFtcy5hZGQoInBhc3N3b3JkIiwgdHJhbnNpZW50U3RhdGUuZ2V0KCJwYXNzd29yZCIpKTsKICAgIHJlcXVlc3QuZ2V0RW50aXR5KCkuc2V0U3RyaW5nKHBhcmFtcy50b1N0cmluZygpKTsKCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAvL2xvZ2dlci5tZXNzYWdlKCJBQUQgUGFzc3RocnUgUk9QQzogSlNPTiByZXN1bHQ6ICIgKyBKU09OLnN0cmluZ2lmeShyZXN1bHQpKTsKCiAgICAgIGlmIChyZXNwb25zZS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkgPT09IDIwMCkgewogICAgICAgICAgb3V0Y29tZSA9ICJWYWxpZCIKICAgICAgICB0cmFuc2llbnRTdGF0ZS5wdXQoImFhZEFjY2Vzc1Rva2VuIiwgcmVzdWx0LmFjY2Vzc190b2tlbik7CiAgICB9IGVsc2UgewogICAgICAgIC8qIE91dGNvbWVzOgogICAgICAgICAqIC0gVmFsaWQKICAgICAgICAgKiAtIEludmFsaWQKICAgICAgICAgKiAtIEV4cGlyZWQKICAgICAgICAgKiAtIERpc2FibGVkCiAgICAgICAgICogLSBFcnJvcgogICAgICAgICAqCiAgICAgICAgICogRXhwZWN0ZWQgRXJyb3IgQ29kZXM6CiAgICAgICAgICogNTAxMjYgLSBFcnJvciB2YWxpZGF0aW5nIGNyZWRlbnRpYWxzIGR1ZSB0byBpbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkLgogICAgICAgICAqIDUwMDU1IC0gVGhlIHBhc3N3b3JkIGlzIGV4cGlyZWQuCiAgICAgICAgICogNTAwNTcgLSBUaGUgdXNlciBhY2NvdW50IGlzIGRpc2FibGVkLgogICAgICAgICAqIDUwMTk2IC0gVGhlIHNlcnZlciB0ZXJtaW5hdGVkIGFuIG9wZXJhdGlvbiBiZWNhdXNlIGl0IGVuY291bnRlcmVkIGEgY2xpZW50IHJlcXVlc3QgbG9vcC4gUGxlYXNlIGNvbnRhY3QgeW91ciBhcHAgdmVuZG9yLgogICAgICAgICAqLwogICAgICAgIGlmIChyZXN1bHQuZXJyb3JfY29kZXMuaW5jbHVkZXMoNTAxMjYpKSB7CiAgICAgICAgICAgIG91dGNvbWUgPSAiSW52YWxpZCI7CiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuZXJyb3JfY29kZXMuaW5jbHVkZXMoNTAwNTUpKSB7CiAgICAgICAgICAgIG91dGNvbWUgPSAiRXhwaXJlZCI7CiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuZXJyb3JfY29kZXMuaW5jbHVkZXMoNTAwNTcpKSB7CiAgICAgICAgICAgIG91dGNvbWUgPSAiRGlzYWJsZWQiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG91dGNvbWUgPSAiRXJyb3IiOwogICAgICAgIH0KICAgICAgICBsb2dnZXIubWVzc2FnZSgiQUFEIFBhc3N0aHJ1IFJPUEM6IGVycm9yID0gIi5jb25jYXQocmVzdWx0LmVycm9yKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIkFBRCBQYXNzdGhydSBST1BDOiBlcnJvcl9kZXNjcmlwdGlvbiA9ICIuY29uY2F0KHJlc3VsdC5lcnJvcl9kZXNjcmlwdGlvbikpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBQUQgUGFzc3RocnUgUk9QQzogZXJyb3JfY29kZXMgPSAiLmNvbmNhdChyZXN1bHQuZXJyb3JfY29kZXMpKTsKICAgIH0KfSBlbHNlIHsKICAgICAgb3V0Y29tZSA9ICJFcnJvciI7CiAgICAgIGxvZ2dlci5tZXNzYWdlKCJBQUQgUGFzc3RocnUgUk9QQzogTm8gdXNlciBvciBwYXNzd29yZCBmb3VuZCBpbiBzaGFyZWQgc3RhdGUhIFVzZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgY29sbGVjdG9yIG5vZGVzIGJlZm9yZSB0aGlzIHNjcmlwdCB0byBwb3B1bGF0ZSBzaGFyZWQgYW5kIHRyYW5zaWVudCBzdGF0ZXMhJyIpOwp9CmxvZ2dlci5tZXNzYWdlKCJBQUQgUGFzc3RocnUgUk9QQzogRW5kIChvdXRjb21lPSIuY29uY2F0KG91dGNvbWUpLmNvbmNhdCgiKSIpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0},{\"_id\":\"13b6a418-4ccc-41b6-86ce-0a13f352da22\",\"name\":\"Admin_HasOnboarded\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKKGZ1bmN0aW9uKCkgewogIHZhciBmciA9IG5ldyBKYXZhSW1wb3J0ZXIoCiAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGVzLAogICAgb3JnLmZvcmdlcm9jay5ndWljZS5jb3JlCiAgKTsKCiAgd2l0aCAoZnIpIHsKICAgIHRyeSB7CgogICAgICBvdXRjb21lID0gJ0ZhbHNlJzsKCiAgICAgIHZhciByZWFsbSA9IHNoYXJlZFN0YXRlLmdldCgncmVhbG0nKTsKICAgICAgdmFyIHV1aWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogICAgICB2YXIgaWRlbnRpdHlQcm92aWRlciA9IEluamVjdG9ySG9sZGVyLmdldEluc3RhbmNlKElkZW50aXR5UHJvdmlkZXIpOwogICAgICB2YXIgaWRlbnRpdHkgPSBpZGVudGl0eVByb3ZpZGVyLmdldElkZW50aXR5KHV1aWQsIHJlYWxtKTsKICAgICAgdmFyIGF0dHJzID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlcygpOwoKICAgICAgaWYgKGF0dHJzLmNvbnRhaW5zS2V5KCdmci1pZG0tb25ib2FyZERhdGUnKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCdBZG1pbiBoYXMgb25ib2FyZCBkYXRlJyk7CiAgICAgICAgb3V0Y29tZSA9ICdUcnVlJzsKICAgICAgfQoKICAgIH0gY2F0Y2ggKGUpIHsKCiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRldGVybWluZSBpZiBhZG1pbiBoYXMgb25ib2FyZGVkOiB7fScsIGUpOwogICAgICBvdXRjb21lID0gJ0Vycm9yJzsKCiAgICB9CiAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0}],\"resultCount\":177,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" + "size": 463944, + "text": "{\"result\":[{\"_id\":\"703dab1a-1921-4981-98dd-b8e5349d8548\",\"name\":\"Device Id (Match) - Server Side\",\"description\":\"Default global script for server side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAyMyBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIFNjYWxhckNvbXBhcmF0b3IgPSB7fSwgU2NyZWVuQ29tcGFyYXRvciA9IHt9LCBNdWx0aVZhbHVlQ29tcGFyYXRvciA9IHt9LCBVc2VyQWdlbnRDb21wYXJhdG9yID0ge30sIEdlb2xvY2F0aW9uQ29tcGFyYXRvciA9IHt9OwoKdmFyIGNvbmZpZyA9IHsKICAgIHByb2ZpbGVFeHBpcmF0aW9uOiAzMCwgICAgICAgICAgICAgIC8vaW4gZGF5cwogICAgbWF4UHJvZmlsZXNBbGxvd2VkOiA1LAogICAgbWF4UGVuYWx0eVBvaW50czogMCwKICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBzY3JlZW46IHsKICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICAgIGNvbXBhcmF0b3I6IFNjcmVlbkNvbXBhcmF0b3IsCiAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDUwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHBsdWdpbnM6IHsKICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2luczogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmb250czogewogICAgICAgICAgICBpbnN0YWxsZWRGb250czogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogU2NhbGFyQ29tcGFyYXRvciwKICAgICAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdXNlckFnZW50OiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgICBjb21wYXJhdG9yOiBVc2VyQWdlbnRDb21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBpZ25vcmVWZXJzaW9uOiB0cnVlLAogICAgICAgICAgICAgICAgcGVuYWx0eVBvaW50czogMTAwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdlb2xvY2F0aW9uOiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSwKICAgICAgICAgICAgY29tcGFyYXRvcjogR2VvbG9jYXRpb25Db21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBhbGxvd2VkUmFuZ2U6IDEwMCwgICAgICAgICAgICAvL2luIG1pbGVzCiAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJhdG9yIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCgp2YXIgYWxsLCBhbnksIGNhbGN1bGF0ZURpc3RhbmNlLCBjYWxjdWxhdGVJbnRlcnNlY3Rpb24sIGNhbGN1bGF0ZVBlcmNlbnRhZ2UsIG51bGxPclVuZGVmaW5lZCwgc3BsaXRBbmRUcmltLAogICAgdW5kZWZpbmVkTG9jYXRpb247CgovLyBDb21wYXJpc29uUmVzdWx0CgovKioKICogQ29uc3RydWN0cyBhbiBpbnN0YW5jZSBvZiBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gcGVuYWx0eSBwb2ludHMuCiAqCiAqIEBwYXJhbSBwZW5hbHR5UG9pbnRzIChOdW1iZXIpIFRoZSBwZW5hbHR5IHBvaW50cyBmb3IgdGhlIGNvbXBhcmlzb24gKGRlZmF1bHRzIHRvIDApLgogKiBAcGFyYW0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSAoYm9vbGVhbikgV2hldGhlciB0aGUgY3VycmVudCB2YWx1ZSBjb250YWlucyBtb3JlIGluZm9ybWF0aW9uCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIHRoZSBzdG9yZWQgdmFsdWUgKGRlZmF1bHRzIHRvIGZhbHNlKS4KICovCmZ1bmN0aW9uIENvbXBhcmlzb25SZXN1bHQoKSB7CgogICAgdmFyIHBlbmFsdHlQb2ludHMgPSAwLAogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBmYWxzZTsKCiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQpIHsKICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBhcmd1bWVudHNbMV07CiAgICB9CgogICAgaWYgKGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkICYmIGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgaWYgKHR5cGVvZihhcmd1bWVudHNbMF0pID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSA9IGFyZ3VtZW50c1swXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIH0KICAgIH0KCiAgICB0aGlzLnBlbmFsdHlQb2ludHMgPSBwZW5hbHR5UG9pbnRzOwogICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZTsKCn0KCkNvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUyA9IG5ldyBDb21wYXJpc29uUmVzdWx0KDApOwoKLyoqCiAqIFN0YXRpYyBtZXRob2QgZm9yIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcuCiAqCiAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkuCiAqLwpDb21wYXJpc29uUmVzdWx0LmlzU3VjY2Vzc2Z1bCA9ICBmdW5jdGlvbihjb21wYXJpc29uUmVzdWx0KSB7CiAgICByZXR1cm4gY29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKTsKfTsKCgovKioKICogU3RhdGljIG1ldGhvZCBmb3IgZnVuY3Rpb25hbCBwcm9ncmFtbWluZy4KICoKICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gIGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHJldHVybiBjb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU7Cn07CgovKioKICogQ29tcGFyaXNvbiBmdW5jdGlvbiB0aGF0IGNhbiBiZSBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCB0byBhcnJheS5zb3J0CiAqLwpDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUgPSBmdW5jdGlvbihmaXJzdCwgc2Vjb25kKSB7CiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGZpcnN0KSAmJiBudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAwOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoZmlyc3QpKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAxOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoZmlyc3QucGVuYWx0eVBvaW50cyAhPT0gc2Vjb25kLnBlbmFsdHlQb2ludHMpIHsKICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnBlbmFsdHlQb2ludHMgLSBzZWNvbmQucGVuYWx0eVBvaW50czsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gKGZpcnN0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCkgLSAoc2Vjb25kLmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCk7CiAgICAgICAgfQogICAgfQp9OwoKLyoqCiAqIEFtYWxnYW1hdGVzIHRoZSBnaXZlbiBDb21wYXJpc29uUmVzdWx0IGludG8gdGhpcyBDb21wYXJpc29uUmVzdWx0LgogKgogKiBAcGFyYW0gY29tcGFyaXNvblJlc3VsdCBUaGUgQ29tcGFyaXNvblJlc3VsdCB0byBpbmNsdWRlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5wcm90b3R5cGUuYWRkQ29tcGFyaXNvblJlc3VsdCA9IGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHRoaXMucGVuYWx0eVBvaW50cyArPSBjb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHM7CiAgICBpZiAoY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKSB7CiAgICAgICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlOwogICAgfQp9OwoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBubyBwZW5hbHR5IHBvaW50cyBoYXZlIGJlZW4gYXNzaWduZWQgZm9yIHRoZSBjb21wYXJpc29uLgogKgogKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgY29tcGFyaXNvbiB3YXMgc3VjY2Vzc2Z1bC4KICovCkNvbXBhcmlzb25SZXN1bHQucHJvdG90eXBlLmlzU3VjY2Vzc2Z1bCA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZCh0aGlzLnBlbmFsdHlQb2ludHMpIHx8IHRoaXMucGVuYWx0eVBvaW50cyA9PT0gMDsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gc2ltcGxlIG9iamVjdHMgKFN0cmluZ3xOdW1iZXIpIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybwogKiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIGN1cnJlbnQgdmFsdWUuCiAqIEBwYXJhbSBzdG9yZWRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIHN0b3JlZCB2YWx1ZS4KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0LgogKi8KU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlID0gZnVuY3Rpb24gKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUsIGNvbmZpZykgewogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlN0cmluZ0NvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOnN0b3JlZFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoc3RvcmVkVmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOmNvbmZpZzogIiArIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpOwogICAgfQogICAgaWYgKGNvbmZpZy5wZW5hbHR5UG9pbnRzID09PSAwKSB7CiAgICAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUzsKICAgIH0KCiAgICBpZiAoIW51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgfHwgY3VycmVudFZhbHVlICE9PSBzdG9yZWRWYWx1ZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoIW51bGxPclVuZGVmaW5lZChjdXJyZW50VmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KHRydWUpOwogICAgfQoKICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7Cn07CgovKioKICogQ29tcGFyZXMgdHdvIHNjcmVlbnMgYW5kIGlmIHRoZXkgYXJlIGVxdWFsIHRoZW4gcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB6ZXJvIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLAogKiBvdGhlcndpc2UgcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiB7CiAqICAgICAgICAgICAgInNjcmVlbldpZHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBoZWlnaHQuCiAqICAgICAgICAgICAgInNjcmVlbkNvbG91ckRlcHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBjb2xvdXIgZGVwdGguCiAqICAgICAgICB9CiAqIEBwYXJhbSBzdG9yZWRWYWx1ZTogewogKiAgICAgICAgICAgICJzY3JlZW5XaWR0aCI6IChOdW1iZXIpIFRoZSBzdG9yZWQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIHN0b3JlZCBjbGllbnQgc2NyZWVuIGhlaWdodC4KICogICAgICAgICAgICAic2NyZWVuQ29sb3VyRGVwdGgiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGNsaWVudCBzY3JlZW4gY29sb3VyIGRlcHRoLgogKiAgICAgICAgfQogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgInBlbmFsdHlQb2ludHMiOiAoTnVtYmVyKSBUaGUgbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzLgogKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovClNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTY3JlZW5Db21wYXJhdG9yLmNvbXBhcmU6Y3VycmVudFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICBjdXJyZW50VmFsdWUgPSB7c2NyZWVuV2lkdGg6IG51bGwsIHNjcmVlbkhlaWdodDogbnVsbCwgc2NyZWVuQ29sb3VyRGVwdGg6IG51bGx9OwogICAgfQogICAgaWYgKG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBzdG9yZWRWYWx1ZSA9IHtzY3JlZW5XaWR0aDogbnVsbCwgc2NyZWVuSGVpZ2h0OiBudWxsLCBzY3JlZW5Db2xvdXJEZXB0aDogbnVsbH07CiAgICB9CgogICAgdmFyIGNvbXBhcmlzb25SZXN1bHRzID0gWwogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuV2lkdGgsIHN0b3JlZFZhbHVlLnNjcmVlbldpZHRoLCBjb25maWcpLAogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuSGVpZ2h0LCBzdG9yZWRWYWx1ZS5zY3JlZW5IZWlnaHQsIGNvbmZpZyksCiAgICAgICAgU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlKGN1cnJlbnRWYWx1ZS5zY3JlZW5Db2xvdXJEZXB0aCwgc3RvcmVkVmFsdWUuc2NyZWVuQ29sb3VyRGVwdGgsIGNvbmZpZyldOwoKICAgIGlmIChhbGwoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKSkgewogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChhbnkoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSkpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgfQp9OwoKLyoqCiAqIFNwbGl0cyBib3RoIHZhbHVlcyB1c2luZyBkZWxpbWl0ZXIsIHRyaW1zIGV2ZXJ5IHZhbHVlIGFuZCBjb21wYXJlcyBjb2xsZWN0aW9ucyBvZiB2YWx1ZXMuCiAqIFJldHVybnMgemVyby1yZXN1bHQgZm9yIHNhbWUgbXVsdGktdmFsdWUgYXR0cmlidXRlcy4KICoKICogSWYgY29sbGVjdGlvbnMgYXJlIG5vdCBzYW1lIGNoZWNrcyBpZiBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaXMgbGVzcyBvciBlcXVhbCBtYXhEaWZmZXJlbmNlcyBvcgogKiBwZXJjZW50YWdlIG9mIGRpZmZlcmVuY2UgaXMgbGVzcyBvciBlcXVhbCBtYXhQZXJjZW50YWdlRGlmZmVyZW5jZS4KICoKICogSWYgeWVzIHRoZW4gcmV0dXJucyB6ZXJvLXJlc3VsdCB3aXRoIGFkZGl0aW9uYWwgaW5mbywgZWxzZSByZXR1cm5zIHBlbmFsdHlQb2ludHMtcmVzdWx0LgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlOiAoU3RyaW5nKSBUaGUgc3RvcmVkIHZhbHVlLgogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgIm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlIjogKE51bWJlcikgVGhlIG1heCBkaWZmZXJlbmNlIHBlcmNlbnRhZ2UgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgaXMgYXNzaWduZWQuCiAqICAgICAgICAgICAgIm1heERpZmZlcmVuY2VzIjogKE51bWJlcikgVGhlIG1heCBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgcG9pbnRzIGFyZSBhc3NpZ25lZC4KICogICAgICAgICAgICAicGVuYWx0eVBvaW50cyI6IChOdW1iZXIpIFRoZSBudW1iZXIgb2YgcGVuYWx0eSBwb2ludHMuCiAgKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovCk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgdmFyIGRlbGltaXRlciA9ICI7IiwKICAgICAgICBjdXJyZW50VmFsdWVzID0gc3BsaXRBbmRUcmltKGN1cnJlbnRWYWx1ZSwgZGVsaW1pdGVyKSwKICAgICAgICBzdG9yZWRWYWx1ZXMgPSBzcGxpdEFuZFRyaW0oc3RvcmVkVmFsdWUsIGRlbGltaXRlciksCiAgICAgICAgbWF4TnVtYmVyT2ZFbGVtZW50cyA9IE1hdGgubWF4KGN1cnJlbnRWYWx1ZXMubGVuZ3RoLCBzdG9yZWRWYWx1ZXMubGVuZ3RoKSwKICAgICAgICBudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9IGNhbGN1bGF0ZUludGVyc2VjdGlvbihjdXJyZW50VmFsdWVzLCBzdG9yZWRWYWx1ZXMpLmxlbmd0aCwKICAgICAgICBudW1iZXJPZkRpZmZlcmVuY2VzID0gbWF4TnVtYmVyT2ZFbGVtZW50cyAtIG51bWJlck9mVGhlU2FtZUVsZW1lbnRzLAogICAgICAgIHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzID0gY2FsY3VsYXRlUGVyY2VudGFnZShudW1iZXJPZkRpZmZlcmVuY2VzLCBtYXhOdW1iZXJPZkVsZW1lbnRzKTsKCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKHN0b3JlZFZhbHVlKSAmJiAhbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UobnVtYmVyT2ZUaGVTYW1lRWxlbWVudHMgKyAiIG9mICIgKyBtYXhOdW1iZXJPZkVsZW1lbnRzICsgIiBhcmUgc2FtZSIpOwogICAgfQoKICAgIGlmIChtYXhOdW1iZXJPZkVsZW1lbnRzID09PSAwKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBubyBhdHRyaWJ1dGVzIGZvdW5kIGluIGJvdGggcHJvZmlsZXMiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9PT0gbWF4TnVtYmVyT2ZFbGVtZW50cykgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJJZ25vcmVkIGJlY2F1c2UgYWxsIGF0dHJpYnV0ZXMgYXJlIHNhbWUiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZkRpZmZlcmVuY2VzID4gY29uZmlnLm1heERpZmZlcmVuY2VzKSB7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJXb3VsZCBiZSBpZ25vcmVkIGlmIG5vdCBtb3JlIHRoYW4gIiArIGNvbmZpZy5tYXhEaWZmZXJlbmNlcyArICIgZGlmZmVyZW5jZXMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KCiAgICBpZiAocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgPiBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgKyAiIHBlcmNlbnRzIGFyZSBkaWZmZXJlbnQiKTsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIldvdWxkIGJlIGlnbm9yZWQgaWYgbm90IG1vcmUgdGhhbiAiICsgY29uZmlnLm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlICsgIiBwZXJjZW50Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChjb25maWcucGVuYWx0eVBvaW50cyk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBudW1iZXIgb2YgZGlmZmVyZW5jZXMoIiArIG51bWJlck9mRGlmZmVyZW5jZXMgKyAiKSBub3QgbW9yZSB0aGFuICIKICAgICAgICAgICAgKyBjb25maWcubWF4RGlmZmVyZW5jZXMpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzICsgIiBwZXJjZW50cyBhcmUgZGlmZmVyZW50Iik7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBub3QgbW9yZSB0aGFuICIgKyBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UgKyAiIHBlcmNlbnQiKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdCh0cnVlKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gVXNlciBBZ2VudCBTdHJpbmdzIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybyBwZW5hbHR5CiAqIHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlIChTdHJpbmcpIFRoZSBzdG9yZWQgdmFsdWUuCiAqIEBwYXJhbSBjb25maWc6IHsKICogICAgICAgICAgICAiaWdub3JlVmVyc2lvbiI6IChib29sZWFuKSBJZiB0aGUgdmVyc2lvbiBudW1iZXJzIGluIHRoZSBVc2VyIEFnZW50IFN0cmluZ3Mgc2hvdWxkIGJlIGlnbm9yZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb21wYXJpc29uLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBBIENvbXBhcmlzb25SZXN1bHQuCiAqLwpVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiVXNlckFnZW50Q29tcGFyYXRvci5jb21wYXJlOmN1cnJlbnRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgaWYgKGNvbmZpZy5pZ25vcmVWZXJzaW9uKSB7CiAgICAgICAgLy8gcmVtb3ZlIHZlcnNpb24gbnVtYmVyCiAgICAgICAgY3VycmVudFZhbHVlID0gbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgPyBudWxsIDogY3VycmVudFZhbHVlLnJlcGxhY2UoL1tcZFwuXSsvZywgIiIpLnRyaW0oKTsKICAgICAgICBzdG9yZWRWYWx1ZSA9IG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkgPyBudWxsIDogc3RvcmVkVmFsdWUucmVwbGFjZSgvW1xkXC5dKy9nLCAiIikudHJpbSgpOwogICAgfQoKICAgIHJldHVybiBTY2FsYXJDb21wYXJhdG9yLmNvbXBhcmUoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gbG9jYXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50IGEgZGVncmVlIG9mIGRpZmZlcmVuY2UuCiAqCiAqIEBwYXJhbSBjdXJyZW50VmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgY3VycmVudCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGN1cnJlbnQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcGFyYW0gc3RvcmVkVmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxhdGl0dWRlLgogKiAgICAgICAgICAgICJsb25naXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJhbGxvd2VkUmFuZ2UiOiAoTnVtYmVyKSBUaGUgbWF4IGRpZmZlcmVuY2UgYWxsb3dlZCBpbiB0aGUgdHdvIGxvY2F0aW9ucywgYmVmb3JlIHRoZSBwZW5hbHR5IGlzIGFzc2lnbmVkLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KKiAgICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0CiAqLwpHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiR2VvbG9jYXRpb25Db21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICAvLyBDaGVjayBmb3IgdW5kZWZpbmVkIHN0b3JlZCBvciBjdXJyZW50IGxvY2F0aW9ucwoKICAgIGlmICh1bmRlZmluZWRMb2NhdGlvbihjdXJyZW50VmFsdWUpICYmIHVuZGVmaW5lZExvY2F0aW9uKHN0b3JlZFZhbHVlKSkgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CiAgICBpZiAodW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiAhdW5kZWZpbmVkTG9jYXRpb24oc3RvcmVkVmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KICAgIGlmICghdW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiB1bmRlZmluZWRMb2NhdGlvbihzdG9yZWRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgLy8gQm90aCBsb2NhdGlvbnMgZGVmaW5lZCwgdGhlcmVmb3JlIHBlcmZvcm0gY29tcGFyaXNvbgoKICAgIHZhciBkaXN0YW5jZSA9IGNhbGN1bGF0ZURpc3RhbmNlKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUpOwoKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJEaXN0YW5jZSBiZXR3ZWVuICgiICsgY3VycmVudFZhbHVlLmxhdGl0dWRlICsgIiwiICsgY3VycmVudFZhbHVlLmxvbmdpdHVkZSArICIpIGFuZCAoIiArCiAgICAgICAgICAgIHN0b3JlZFZhbHVlLmxhdGl0dWRlICsgIiwiICsgc3RvcmVkVmFsdWUubG9uZ2l0dWRlICsgIikgaXMgIiArIGRpc3RhbmNlICsgIiBtaWxlcyIpOwogICAgfQoKICAgIGlmIChwYXJzZUZsb2F0KGRpc3RhbmNlLnRvUHJlY2lzaW9uKDUpKSA9PT0gMCkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJMb2NhdGlvbiBpcyB0aGUgc2FtZSIpOwogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CgogICAgaWYgKGRpc3RhbmNlIDw9IGNvbmZpZy5hbGxvd2VkUmFuZ2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlRvbGVyYXRlZCBiZWNhdXNlIGRpc3RhbmNlIG5vdCBtb3JlIHRoZW4gIiArIGNvbmZpZy5hbGxvd2VkUmFuZ2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiV291bGQgYmUgaWdub3JlZCBpZiBkaXN0YW5jZSBub3QgbW9yZSB0aGVuICIgKyBjb25maWcuYWxsb3dlZFJhbmdlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KfTsKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi8vICAgICAgICAgICAgICAgICAgICBEZXZpY2UgUHJpbnQgTG9naWMgLSBETyBOT1QgTU9ESUZZICAgICAgICAgICAgICAgICAgICAgLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwoKLy8gVXRpbGl0eSBmdW5jdGlvbnMKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgZXZhbHVhdGluZyBmdW5jdGlvbiBmIG9uIGVhY2ggZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYWxsID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn07CgovKioKICogUmV0dXJucyB0cnVlIGlmIGV2YWx1YXRpbmcgZnVuY3Rpb24gZiBvbiBhbnkgZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYW55ID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGxvY2F0aW9uIGlzIG51bGwgb3IgaGFzIHVuZGVmaW5lZCBsb25naXR1ZGUgb3IgbGF0aXR1ZGUgdmFsdWVzLgogKgogKiBAcGFyYW0gbG9jYXRpb246IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBsb25naXR1ZGUuCiAqICAgICAgICB9CiAqIEByZXR1cm4gYm9vbGVhbgogKi8KdW5kZWZpbmVkTG9jYXRpb24gPSBmdW5jdGlvbihsb2NhdGlvbikgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZChsb2NhdGlvbikgfHwgbnVsbE9yVW5kZWZpbmVkKGxvY2F0aW9uLmxhdGl0dWRlKSB8fCBudWxsT3JVbmRlZmluZWQobG9jYXRpb24ubG9uZ2l0dWRlKTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLgogKgogKiBAcGFyYW0gdmFsdWU6IGEgdmFsdWUgb2YgYW55IHR5cGUKICogQHJldHVybiBib29sZWFuCiAqLwpudWxsT3JVbmRlZmluZWQgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7Cn07CgovKioKICogQ2FsY3VsYXRlcyB0aGUgZGlzdGFuY2VzIGJldHdlZW4gdGhlIHR3byBsb2NhdGlvbnMuCiAqCiAqIEBwYXJhbSBmaXJzdDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBmaXJzdCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGZpcnN0IGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIHNlY29uZDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcmV0dXJuIE51bWJlciBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdHdvIGxvY2F0aW9ucy4KICovCmNhbGN1bGF0ZURpc3RhbmNlID0gZnVuY3Rpb24oZmlyc3QsIHNlY29uZCkgewogICAgdmFyIGZhY3RvciA9IChNYXRoLlBJIC8gMTgwKSwKICAgICAgICB0aGV0YSwKICAgICAgICBkaXN0OwogICAgZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkZWdyZWVzKSB7CiAgICAgICAgcmV0dXJuIGRlZ3JlZXMgKiBmYWN0b3I7CiAgICB9CiAgICBmdW5jdGlvbiByYWRpYW5zVG9EZWdyZWVzKHJhZGlhbnMpIHsKICAgICAgICByZXR1cm4gcmFkaWFucyAvIGZhY3RvcjsKICAgIH0KICAgIHRoZXRhID0gZmlyc3QubG9uZ2l0dWRlIC0gc2Vjb25kLmxvbmdpdHVkZTsKICAgIGRpc3QgPSBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKyBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHRoZXRhKSk7CiAgICBkaXN0ID0gTWF0aC5hY29zKGRpc3QpOwogICAgZGlzdCA9IHJhZGlhbnNUb0RlZ3JlZXMoZGlzdCk7CiAgICBkaXN0ID0gZGlzdCAqIDYwICogMS4xNTE1OwogICAgcmV0dXJuIGRpc3Q7Cn07CgovKioKICogQ29udmVydHMgYSBTdHJpbmcgaG9sZGluZyBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMgaW50byBhbiBhcnJheS4KICoKICogQHBhcmFtIHRleHQgKFN0cmluZykgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMuCiAqIEBwYXJhbSBkZWxpbWl0ZXIgKFN0cmluZykgVGhlIGNoYXJhY3RlciBkZWxpbWl0aW5nIHZhbHVlcyB3aXRoaW4gdGhlIHRleHQgU3RyaW5nLgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMuCiAqLwpzcGxpdEFuZFRyaW0gPSBmdW5jdGlvbih0ZXh0LCBkZWxpbWl0ZXIpIHsKCiAgICB2YXIgcmVzdWx0cyA9IFtdLAogICAgICAgIGksCiAgICAgICAgdmFsdWVzLAogICAgICAgIHZhbHVlOwogICAgaWYgKHRleHQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KCiAgICB2YWx1ZXMgPSB0ZXh0LnNwbGl0KGRlbGltaXRlcik7CiAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFsdWUgPSB2YWx1ZXNbaV0udHJpbSgpOwogICAgICAgIGlmICh2YWx1ZSAhPT0gIiIpIHsKICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdHM7Cn07CgovKioKICogQ29udmVydHMgdmFsdWUgdG8gYSBwZXJjZW50YWdlIG9mIHJhbmdlLgogKgogKiBAcGFyYW0gdmFsdWUgKE51bWJlcikgVGhlIGFjdHVhbCBudW1iZXIgdG8gYmUgY29udmVydGVkIHRvIGEgcGVyY2VudGFnZS4KICogQHBhcmFtIHJhbmdlIChOdW1iZXIpIFRoZSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzIChpLmUuIHJlcHJlc2VudHMgMTAwJSkuCiAqIEByZXR1cm4gKE51bWJlcikgVGhlIHBlcmNlbnRhZ2UuCiAqLwpjYWxjdWxhdGVQZXJjZW50YWdlID0gZnVuY3Rpb24odmFsdWUsIHJhbmdlKSB7CiAgICBpZiAocmFuZ2UgPT09IDApIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBwYXJzZUZsb2F0KCh2YWx1ZSAvIHJhbmdlKS50b1ByZWNpc2lvbigyKSkgKiAxMDA7Cn07CgovKioKICogQ3JlYXRlcyBhIG5ldyBhcnJheSBjb250YWluaW5nIG9ubHkgdGhvc2UgZWxlbWVudHMgZm91bmQgaW4gYm90aCBhcnJheXMgcmVjZWl2ZWQgYXMgYXJndW1lbnRzLgogKgogKiBAcGFyYW0gZmlyc3QgKEFycmF5KSBUaGUgZmlyc3QgYXJyYXkuCiAqIEBwYXJhbSBzZWNvbmQgKEFycmF5KSBUaGUgc2Vjb25kIGFycmF5LgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGVsZW1lbnRzIHRoYXQgZm91bmQgaW4gZmlyc3QgYW5kIHNlY29uZC4KICovCmNhbGN1bGF0ZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGZpcnN0LCBzZWNvbmQpIHsKICAgIHJldHVybiBmaXJzdC5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgIHJldHVybiBzZWNvbmQuaW5kZXhPZihlbGVtZW50KSAhPT0gLTE7CiAgICB9KTsKfTsKCmZ1bmN0aW9uIGdldFZhbHVlKG9iaiwgYXR0cmlidXRlUGF0aCkgewogICAgdmFyIHZhbHVlID0gb2JqLAogICAgICAgIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cmlidXRlUGF0aC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICB2YWx1ZSA9IHZhbHVlW2F0dHJpYnV0ZVBhdGhbaV1dOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwp9CgoKZnVuY3Rpb24gaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWcpIHsKICAgIHJldHVybiBhdHRyaWJ1dGVDb25maWcuY29tcGFyYXRvciAhPT0gdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcsIGF0dHJpYnV0ZVBhdGgpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBbXSwKICAgICAgICBhdHRyaWJ1dGVOYW1lLAogICAgICAgIGF0dHJQYXRocywKICAgICAgICBhdHRyUGF0aCwKICAgICAgICBpOwoKICAgIGZvciAoYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVDb25maWcpIHsKICAgICAgICBpZiAoYXR0cmlidXRlQ29uZmlnLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZU5hbWUpKSB7CgogICAgICAgICAgICBpZiAoaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWdbYXR0cmlidXRlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBhdHRyUGF0aCA9IGF0dHJpYnV0ZVBhdGguc2xpY2UoKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRoLnB1c2goYXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVQYXRocy5wdXNoKGF0dHJQYXRoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJQYXRoID0gYXR0cmlidXRlUGF0aC5zbGljZSgpOwogICAgICAgICAgICAgICAgYXR0clBhdGgucHVzaChhdHRyaWJ1dGVOYW1lKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRocyA9IGdldEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZ1thdHRyaWJ1dGVOYW1lXSwgYXR0clBhdGgpOwogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGF0dHJQYXRocy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVBhdGhzLnB1c2goYXR0clBhdGhzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYXR0cmlidXRlUGF0aHM7Cn0KCmZ1bmN0aW9uIGdldERldmljZVByaW50QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnKSB7CiAgICByZXR1cm4gZ2V0QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnLCBbXSk7Cn0KCmZ1bmN0aW9uIGhhc1JlcXVpcmVkQXR0cmlidXRlcyhkZXZpY2VQcmludCwgYXR0cmlidXRlQ29uZmlnKSB7CgogICAgdmFyIGF0dHJpYnV0ZVBhdGhzID0gZ2V0RGV2aWNlUHJpbnRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcpLAogICAgICAgIGksCiAgICAgICAgYXR0clZhbHVlLAogICAgICAgIGF0dHJDb25maWc7CgogICAgZm9yIChpID0gMDsgaSA8IGF0dHJpYnV0ZVBhdGhzLmxlbmd0aDsgaSsrKSB7CgogICAgICAgIGF0dHJWYWx1ZSA9IGdldFZhbHVlKGRldmljZVByaW50LCBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICBpZiAoYXR0ckNvbmZpZy5yZXF1aXJlZCAmJiBhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBsb2dnZXIud2FybmluZygiRGV2aWNlIFByaW50IHByb2ZpbGUgbWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUsICIgKyBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZSBwcmludCBoYXMgcmVxdWlyZWQgYXR0cmlidXRlcyIpOwogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGF0dHJpYnV0ZUNvbmZpZywgZGV2aWNlUHJpbnQsIGRldmljZVByaW50UHJvZmlsZXMsIG1heFBlbmFsdHlQb2ludHMpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBnZXREZXZpY2VQcmludEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZyksCiAgICAgICAgZGFvID0gc2hhcmVkU3RhdGUuZ2V0KCdfRGV2aWNlSWREYW8nKSwKICAgICAgICByZXN1bHRzLAogICAgICAgIGosCiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQsCiAgICAgICAgaSwKICAgICAgICBjdXJyZW50VmFsdWUsCiAgICAgICAgc3RvcmVkVmFsdWUsCiAgICAgICAgYXR0ckNvbmZpZywKICAgICAgICBjb21wYXJpc29uUmVzdWx0LAogICAgICAgIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICBzZWxlY3RlZFByb2ZpbGUsCiAgICAgICAgY3VyRGV2aWNlUHJpbnRQcm9maWxlLAogICAgICAgIHZhbHM7CgogICAgcmVzdWx0cyA9IFtdOwogICAgZm9yIChqID0gMDsgaiA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBjdXJEZXZpY2VQcmludFByb2ZpbGUgPSBKU09OLnBhcnNlKG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvbihkZXZpY2VQcmludFByb2ZpbGVzW2pdKSk7CiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQgPSBuZXcgQ29tcGFyaXNvblJlc3VsdCgpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdHRyaWJ1dGVQYXRocy5sZW5ndGg7IGkrKykgewoKICAgICAgICAgICAgY3VycmVudFZhbHVlID0gZ2V0VmFsdWUoZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgc3RvcmVkVmFsdWUgPSBnZXRWYWx1ZShjdXJEZXZpY2VQcmludFByb2ZpbGUuZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICAgICAgaWYgKHN0b3JlZFZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb21wYXJpc29uUmVzdWx0ID0gbmV3IENvbXBhcmlzb25SZXN1bHQoYXR0ckNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbXBhcmlzb25SZXN1bHQgPSBhdHRyQ29uZmlnLmNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBhdHRyQ29uZmlnLmFyZ3MpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJDb21wYXJpbmcgYXR0cmlidXRlIHBhdGg6ICIgKyBhdHRyaWJ1dGVQYXRoc1tpXQogICAgICAgICAgICAgICAgICAgICsgIiwgQ29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkgKyAiLCBwZW5hbHR5UG9pbnRzPSIKICAgICAgICAgICAgICAgICAgICArIGNvbXBhcmlzb25SZXN1bHQucGVuYWx0eVBvaW50cyArICIsIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU9IgogICAgICAgICAgICAgICAgICAgICsgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5hZGRDb21wYXJpc29uUmVzdWx0KGNvbXBhcmlzb25SZXN1bHQpOwogICAgICAgIH0KICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIkFnZ3JlZ2F0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKSArICIsIHBlbmFsdHlQb2ludHM9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICAgICArIGFnZ3JlZ2F0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmVzdWx0cy5wdXNoKHsKICAgICAgICAgICAga2V5OiBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICAgICAgdmFsdWU6IGRldmljZVByaW50UHJvZmlsZXNbal0KICAgICAgICB9KTsKICAgIH0KCiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXN1bHRzLnNvcnQoZnVuY3Rpb24oYSwgYikgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUoYS5rZXksIGIua2V5KTsKICAgIH0pOwogICAgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0ID0gcmVzdWx0c1swXS5rZXk7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU2VsZWN0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKQogICAgICAgICAgICArICIsIHBlbmFsdHlQb2ludHM9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgfQoKICAgIHNlbGVjdGVkUHJvZmlsZSA9IG51bGw7CiAgICBpZiAoc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgPD0gbWF4UGVuYWx0eVBvaW50cykgewogICAgICAgIHNlbGVjdGVkUHJvZmlsZSA9IHJlc3VsdHNbMF0udmFsdWU7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTZWxlY3RlZCBwcm9maWxlOiAiICsgc2VsZWN0ZWRQcm9maWxlICsKICAgICAgICAgICAgICAgICIgd2l0aCAiICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgKyAiIHBlbmFsdHkgcG9pbnRzIik7CiAgICAgICAgfQogICAgfQoKICAgIGlmIChzZWxlY3RlZFByb2ZpbGUgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyogdXBkYXRlIHByb2ZpbGUgKi8KICAgIHNlbGVjdGVkUHJvZmlsZS5wdXQoInNlbGVjdGlvbkNvdW50ZXIiLAogICAgICAgIGphdmEubGFuZy5JbnRlZ2VyLnZhbHVlT2YocGFyc2VJbnQoc2VsZWN0ZWRQcm9maWxlLmdldCgic2VsZWN0aW9uQ291bnRlciIpLCAxMCkgKyAxKSk7CiAgICBzZWxlY3RlZFByb2ZpbGUucHV0KCJsYXN0U2VsZWN0ZWREYXRlIiwgamF2YS5sYW5nLkxvbmcudmFsdWVPZihuZXcgRGF0ZSgpLmdldFRpbWUoKSkpOwogICAgc2VsZWN0ZWRQcm9maWxlLnB1dCgiZGV2aWNlUHJpbnQiLCBkZXZpY2VQcmludCk7CgogICAgdmFscyA9IFtdOwogICAgZm9yIChpID0gMDsgaSA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YWxzLnB1c2gob3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uKGRldmljZVByaW50UHJvZmlsZXNbaV0pKTsKICAgIH0KCiAgICBkYW8uc2F2ZURldmljZVByb2ZpbGVzKHVzZXJuYW1lLCByZWFsbSwgdmFscyk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIG1hdGNoRGV2aWNlUHJpbnQoKSB7CgogICAgaWYgKCF1c2VybmFtZSkgewogICAgICAgIGxvZ2dlci5lcnJvcigiVXNlcm5hbWUgbm90IHNldC4gQ2Fubm90IGNvbXBhcmUgdXNlcidzIGRldmljZSBwcmludCBwcm9maWxlcy4iKTsKICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICB9IGVsc2UgewoKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImNsaWVudCBkZXZpY2VQcmludDogIiArIGNsaWVudFNjcmlwdE91dHB1dERhdGEpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGdldFByb2ZpbGVzID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRXhwaXJlZFByb2ZpbGUoZGV2aWNlUHJpbnRQcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cGlyYXRpb25EYXRlID0gbmV3IERhdGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNlbGVjdGVkRGF0ZTsKICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uRGF0ZS5zZXREYXRlKGV4cGlyYXRpb25EYXRlLmdldERhdGUoKSAtIGNvbmZpZy5wcm9maWxlRXhwaXJhdGlvbik7CgogICAgICAgICAgICAgICAgICAgIGxhc3RTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShkZXZpY2VQcmludFByb2ZpbGUubGFzdFNlbGVjdGVkRGF0ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0U2VsZWN0ZWREYXRlIDwgZXhwaXJhdGlvbkRhdGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICBkYW8gPSBzaGFyZWRTdGF0ZS5nZXQoJ19EZXZpY2VJZERhbycpLAogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVzLAogICAgICAgICAgICAgICAgICAgICAgICBpdGVyOwoKICAgICAgICAgICAgICAgICAgICBwcm9maWxlcyA9IGRhby5nZXREZXZpY2VQcm9maWxlcyh1c2VybmFtZSwgcmVhbG0pOwoKICAgICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaXRlciA9IHByb2ZpbGVzLml0ZXJhdG9yKCk7CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgPSBpdGVyLm5leHQoKS5nZXRPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFeHBpcmVkUHJvZmlsZShwcm9maWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChwcm9maWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoInN0b3JlZCBub24tZXhwaXJlZCBwcm9maWxlczogIiArIHJlc3VsdHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRldmljZVByaW50ID0gSlNPTi5wYXJzZShjbGllbnRTY3JpcHRPdXRwdXREYXRhKSwKICAgICAgICAgICAgZGV2aWNlUHJpbnRQcm9maWxlcyA9IGdldFByb2ZpbGVzKCk7CgogICAgICAgIGlmICghaGFzUmVxdWlyZWRBdHRyaWJ1dGVzKGRldmljZVByaW50LCBjb25maWcuYXR0cmlidXRlcykpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZVByaW50Lmhhc1JlcXVpcmVkQXR0cmlidXRlczogZmFsc2UiKTsKICAgICAgICAgICAgLy8gV2lsbCBmYWlsIHRoaXMgbW9kdWxlIGJ1dCBmYWxsLXRocm91Z2ggdG8gbmV4dCBtb2R1bGUuIFdoaWNoIHNob3VsZCBiZSBPVFAuCiAgICAgICAgICAgIGF1dGhTdGF0ZSA9IEZBSUxFRDsKICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGNvbmZpZy5hdHRyaWJ1dGVzLCBkZXZpY2VQcmludCwgZGV2aWNlUHJpbnRQcm9maWxlcywgY29uZmlnLm1heFBlbmFsdHlQb2ludHMpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJkZXZpY2VQcmludC5oYXNWYWxpZFByb2ZpbGU6IHRydWUiKTsKICAgICAgICAgICAgYXV0aFN0YXRlID0gU1VDQ0VTUzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiZGV2aWNlUHJpbnQuaGFzVmFsaWRQcm9maWxlOiBmYWxzZSIpOwogICAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoJ2RldmljZVByaW50UHJvZmlsZScsIEpTT04uc3RyaW5naWZ5KGRldmljZVByaW50KSk7CiAgICAgICAgICAgIC8vIFdpbGwgZmFpbCB0aGlzIG1vZHVsZSBidXQgZmFsbC10aHJvdWdoIHRvIG5leHQgbW9kdWxlLiBXaGljaCBzaG91bGQgYmUgT1RQLgogICAgICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICAgICAgfQogICAgfQp9CgptYXRjaERldmljZVByaW50KCk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"bae52680-c1ea-4a4b-be80-25db364d822a\",\"name\":\"wks-ReadUserName\",\"description\":\"Reading userName from Query Parameter \",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKb3V0Y29tZSA9ICJmYWxzZSI7CmlmIChyZXF1ZXN0UGFyYW1ldGVycy5nZXQoInVzZXJOYW1lIikpIHsKICAgIHZhciB1c2VyTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChyZXF1ZXN0UGFyYW1ldGVycy5nZXQoInVzZXJOYW1lIikuZ2V0KDApKTsKICAgIHZhciBvYmplY3RBdHRyaWJ1dGVzID0gewogICAgICB1c2VyTmFtZTogdXNlck5hbWUKICAgIH0KICBzaGFyZWRTdGF0ZS5wdXQoIm9iamVjdEF0dHJpYnV0ZXMiLCBvYmplY3RBdHRyaWJ1dGVzKTsKICBvdXRjb21lID0gInRydWUiOwp9Ci8qCmlmIChyZXF1ZXN0UGFyYW1ldGVycy5nZXQoImVtYWlsIikpIHsKICAgIHZhciBleHRlcm5hbGVtYWlsID0gcmVxdWVzdFBhcmFtZXRlcnMuZ2V0KCJlbWFpbCIpLmdldCgwKTsKICAgIHZhciBkZWNvZGVkRW1haWwgPSBkZWNvZGVVUklDb21wb25lbnQoZXh0ZXJuYWxlbWFpbCk7CiAgICB2YXIgb2JqZWN0QXR0cmlidXRlcyA9IHsKICAgICAgZnJJbmRleGVkU3RyaW5nNTogZGVjb2RlZEVtYWlsCiAgICB9CiAgc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgb2JqZWN0QXR0cmlidXRlcyk7CiAgb3V0Y29tZSA9ICJ0cnVlIjsKfQoqLwoKCgoK\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"8862ca8f-7770-4af5-a888-ac0df0947f36\",\"name\":\"LinkedIn Profile Normalization\",\"description\":\"Normalizes raw profile data from LinkedIn\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5maXJzdE5hbWUubG9jYWxpemVkLmdldCgwKSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3ROYW1lLmxvY2FsaXplZC5nZXQoMCkpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucHJvZmlsZVBpY3R1cmUuZGlzcGxheUltYWdlKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVsZW1lbnRzLmdldCgwKS5nZXQoImhhbmRsZX4iKS5lbWFpbEFkZHJlc3MpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZWxlbWVudHMuZ2V0KDApLmdldCgiaGFuZGxlfiIpLmVtYWlsQWRkcmVzcykpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"0cc09f53-7183-4829-a93a-1b3308318ba9\",\"name\":\"havePush.js\",\"description\":\"null\",\"script\":\"dmFyIHB1c2hEZXZpY2VQcm9maWxlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKSwgInB1c2hEZXZpY2VQcm9maWxlcyIpOwppZihwdXNoRGV2aWNlUHJvZmlsZXMubGVuPjApIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7Cn0KZWxzZSB7CiAgb3V0Y29tZSA9ICJmYWxzZSI7Cgp9Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3f93ef6e-e54a-4393-aba1-f322656db28a\",\"name\":\"OAuth2 Authorize Endpoint Data Provider Script\",\"description\":\"Default global script for OAuth2 Authorize Endpoint Data Provider\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcmV0dXJuIGFkZGl0aW9uYWwgZGF0YSB3aGVuIGF1dGhvcml6ZSByZXF1ZXN0IGlzIGNhbGxlZC4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LgogKgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cwogKgogKiBsb2dnZXIgLSBEZWJ1ZyAoMykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSAiU2NyaXB0ZWRBdXRob3JpemVFbmRwb2ludERhdGFQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FVVEhPUklaRV9FTkRQT0lOVF9EQVRBX1BST1ZJREVSLgogKgogKiBzY3JpcHROYW1lIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHNjcmlwdAogKgogKiBSZXR1cm4gLSBhIE1hcDxTdHJpbmcsIFN0cmluZz4gb2YgYWRkaXRpb25hbCBkYXRhICg0KS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgzKSBEZWJ1ZyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBhdXRob3JpemUgZW5kcG9pbnQgZGF0YSBwcm92aWRlciBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCi8qIEVYQU1QTEUKdmFyIG1hcCA9IG5ldyBqYXZhLnV0aWwuSGFzaE1hcCgpOwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGEoKSB7CgogICAgLy9JZiBjb25zdGFudCBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkCiAgICBtYXAucHV0KCJoZWxsbyIsICJ3b3JsZCIpOwoKICAgIC8vSWYgc29tZSBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkIGZyb20gdGhpcmQgcGFydHkgc2VydmljZQogICAgYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCk7CgogICAgLy9JZiB0aGVyZSBpcyBhIG5lZWQgdG8gcmV0dXJuIHNvbWUgdXNlciBzZXNzaW9uIGRhdGEKICAgIGFkZEFkZGl0aW9uYWxEYXRhRnJvbVNlc3Npb25Qcm9wZXJ0aWVzKCkKCiAgICByZXR1cm4gbWFwOwp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCkgewogIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLlNlcnZlckV4Y2VwdGlvbgogICAgKTsKICB0cnkgewogICAgICAgIC8vT2J0YWluIGFkZGl0aW9uYWwgZGF0YSBieSBwZXJmb3JtaW5nIGEgUkVTVCBjYWxsIHRvIGFuIGV4dGVybmFsIHNlcnZpY2UKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgICAgIHJlcXVlc3Quc2V0VXJpKCJodHRwczovL3RoaXJkLnBhcnR5LmFwcC9oZWxsby5qc3AiKTsKICAgICAgICByZXF1ZXN0LnNldE1ldGhvZCgiUE9TVCIpOwogICAgICAgIC8vcmVxdWVzdC5zZXRFbnRpdHkoImZvbz1iYXImaGVsbG89d29ybGQiKTsKICAgICAgICByZXF1ZXN0LnNldEVudGl0eShqc29uKG9iamVjdCgKICAgICAgICAgICAgICAgICAgICBmaWVsZCgiZm9vIiwgImJhciIpKSkpOwogICAgICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXRPclRocm93KCk7CiAgICAgICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwogICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICBtYXAucHV0KCJzb21lS2V5IixyZXN1bHQuZ2V0KCJzb21lS2V5IikpOwogIH0gY2F0Y2ggKGVycikgewogICAgIHRocm93IG5ldyBmckphdmEuU2VydmVyRXhjZXB0aW9uKGVycik7CiAgfQp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tU2Vzc2lvblByb3BlcnRpZXMoKSB7CiAgLy9BZGQgYWRkaXRpb25hbCBkYXRhIGZyb20gc2Vzc2lvbiBwcm9wZXJ0eSB2YWx1ZXMKICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeyAvLyBzZXNzaW9uIGlzIG5vdCBhdmFpbGFibGUgZm9yIHJlc291cmNlIG93bmVyIHBhc3N3b3JkIGNyZWRlbnRpYWxzIGdyYW50CiAgICAgbWFwLnB1dCgiaXBBZGRyZXNzIiwgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgiSG9zdCIpKQogICB9Cn07CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKSk7Cn07CgphZGRBZGRpdGlvbmFsRGF0YSgpOwoqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e232cff3-2460-47cd-80b2-36c86c0d0f06\",\"name\":\"Alpha endUserUIClient OAuth2 Access Token Modification Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBpZiAoc2NvcGVzLmNvbnRhaW5zKCdmcjphdXRvYWNjZXNzOionKSB8fCBzY29wZXMuY29udGFpbnMoJ2ZyOmlnYToqJykgfHwgc2NvcGVzLmNvbnRhaW5zKCdmcjppZGM6YW5hbHl0aWNzOionKSkgewogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBjb20uc3VuLmlkZW50aXR5LmlkbS5JZFR5cGUKICAgICk7CiAgICB2YXIgZ3JvdXBzID0gW107CiAgICBpZGVudGl0eS5nZXRNZW1iZXJzaGlwcyhmci5JZFR5cGUuR1JPVVApLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkgewogICAgICBncm91cHMucHVzaChncm91cC5nZXRBdHRyaWJ1dGUoJ2NuJykudG9BcnJheSgpWzBdKTsKICAgIH0pOwogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ2dyb3VwcycsIGdyb3Vwcyk7CiAgfQp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6aa47a41-af3d-4df3-a7a1-b1766cfeaf6b\",\"name\":\"wks-NEO-Twillio\",\"description\":\"null\",\"script\":\"LyoqCiAqIEBmaWxlIFRoaXMgc2NyaXB0IGRlbGl2ZXJzIGEgbWVzc2FnZSB3aXRoIHZhbHVlcyBmcm9tIHNoYXJlZCBzdGF0ZSB2aWEgVHdpbGlvIFNNUywgdXNpbmcgdGhlIGN1cnJlbnQgdXNlcidzIHRlbGVwaG9uZU51bWJlcgogKiBAdmVyc2lvbiAwLjEuMQogKiBAa2V5d29yZHMgc21zIG90cCBtZmEgdHdpbGlvIAogKi8KCi8qKgogKiBFbnZpcm9ubWVudCBzcGVjaWZpYyBUd2lsaW8gY29uZmlnIAogKi8KCnZhciB0d2lsaW9BY2NvdW50U2lkID0gIjxzZWNyZXQ+IjsgICAKdmFyIHR3aWxpb0FwaUtleVNpZCA9ICI8c2VjcmV0PiI7CnZhciB0d2lsaW9BcGlLZXlTZWNyZXQgPSAiPHNlY3JldD4iOwp2YXIgdHdpbGlvTWVzc2FnaW5nU2VydmljZVNpZCA9ICI8c2VjcmV0PiI7CnZhciB0d2lsaW9QaG9uZU51bWJlckZyb20gPSAiPHNlY3JldD4iOyAgICAKCi8qKgogKiBGdWxsIENvbmZpZ3VyYXRpb24gCiAqLwoKdmFyIGNvbmZpZyA9IHsKICAgIGFjY291bnRTaWQ6IHR3aWxpb0FjY291bnRTaWQsICAgIAogICAgYXBpS2V5U2lkOiB0d2lsaW9BcGlLZXlTaWQsCiAgICBhcGlLZXlTZWNyZXQ6IHR3aWxpb0FwaUtleVNlY3JldCwKICAgIHBob25lTnVtYmVyRnJvbTogdHdpbGlvUGhvbmVOdW1iZXJGcm9tLCAKICAgIG1lc3NhZ2luZ1NlcnZpY2VTaWQ6IHR3aWxpb01lc3NhZ2luZ1NlcnZpY2VTaWQsIAogICAgYmFzZVVyaTogImh0dHBzOi8vYXBpLnR3aWxpby5jb20vMjAxMC0wNC0wMSIsCiAgICBzaGFyZWRTdGF0ZUlkRmllbGQ6ICJfaWQiLAogICAgcGhvbmVOdW1iZXJGaWVsZDogInRlbGVwaG9uZU51bWJlciIsCiAgICBtZXNzYWdlVGVtcGxhdGU6ICJZb3VyIHNlY3VyaXR5IGNvZGUgaXMge3tvbmVUaW1lUGFzc3dvcmR9fSIsCiAgICBub2RlTmFtZTogInR3aWxpb1NtcyIKfTsKCi8qKgogKiBOb2RlIG91dGNvbWVzCiAqLwoKIHZhciBOb2RlT3V0Y29tZSA9IHsKICAgIERFTElWRVJFRDogICJkZWxpdmVyZWQiLAogICAgQVVUSEZBSUxFRDogImF1dGhGYWlsZWQiLAogICAgTk9QSE9ORTogICAgIm5vUGhvbmUiLAogICAgRVJST1I6ICAgICAgImVycm9yIgp9OwoKLyoqCiAqIEV4dGVybmFsIGRlcGVuZGVuY2llcwogKi8KCnZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sudXRpbC5lbmNvZGUuQmFzZTY0LAogICAgamF2YS5sYW5nLlN0cmluZwopOwoKLyoqCiAqIEFkZCB0aGUgbm9kZSBpbmZvIHByZWZpeCB0byBhIGxvZyBtZXNzYWdlCiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gdGhlIG1lc3NhZ2UgYm9keQogKiBAcmV0dXJucyBhIHRhZ2dlZCB2ZXJzaW9uIG9mIHRoZSBtZXNzYWdlCiAqLwpmdW5jdGlvbiB0YWcobWVzc2FnZSkgewogICAgcmV0dXJuICIqKioiLmNvbmNhdChjb25maWcubm9kZU5hbWUpLmNvbmNhdCgiICIpLmNvbmNhdChtZXNzYWdlKTsKfQoKLyoqCiAqIExvZyBhbiBIVFRQIHJlc3BvbnNlCiAqIAogKiBAcGFyYW0ge1Jlc3BvbnNlfSBIVFRQIHJlc3BvbnNlIG9iamVjdAogKi8KZnVuY3Rpb24gbG9nUmVzcG9uc2UocmVzcG9uc2UpIHsKICAgIGxvZ2dlci5tZXNzYWdlKHRhZygiU2NyaXB0ZWQgTm9kZSBIVFRQIFJlc3BvbnNlOiAiICsgcmVzcG9uc2UuZ2V0U3RhdHVzKCkgKyAiLCBCb2R5OiAiICsgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpKTsKfQoKLyoqCiAqIFJlc29sdmUgaGFuZGxlYmFyIHBsYWNlaG9sZGVycyBmcm9tIHNoYXJlZCBzdGF0ZQogKiAKICogQHBhcmFtIHt0ZW1wbGF0ZX0gaGFuZGxlYmFyIHRlbXBsYXRlCiAqLwpmdW5jdGlvbiByZXNvbHZlUGxhY2Vob2xkZXJzKHRlbXBsYXRlKSB7CiAgY29uc3QgcmVnZXggPSAve3suKj99fS9nOwogIGNvbnN0IHZhcmlhYmxlcyA9IHRlbXBsYXRlLm1hdGNoKHJlZ2V4KTsKCiAgaWYgKCF2YXJpYWJsZXMpIHsKICAgIHJldHVybiB0ZW1wbGF0ZTsKICB9CiAgCiAgdmFyIHJlc3VsdCA9IHRlbXBsYXRlOwogIAogIHZhcmlhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIHN1YihlbGVtZW50KSB7IAogICAgdmFyIHZhck5hbWUgPSBlbGVtZW50LnJlcGxhY2UoL1t7fV0vZywiIik7CiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShlbGVtZW50LHNoYXJlZFN0YXRlLmdldCh2YXJOYW1lKSk7CiAgfSk7CiAgCiAgcmV0dXJuIHJlc3VsdDsKfQoKLyoqCiAqIFNlbmQgYW4gU01TIHZpYSBUd2lsaW8KICogCiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIHRleHQgb2YgdGhlIG1lc3NhZ2UgdG8gc2VuZAogKiBAcGFyYW0ge3N0cmluZ30gbnVtYmVyRnJvbSAtIFRoZSBvcmlnaW5hdGluZyBwaG9uZSBudW1iZXIvc2hvcnRjb2RlCiAqIEBwYXJhbSB7c3RyaW5nfSBudW1iZXJUbyAtIFRoZSBwaG9uZSBudW1iZXIgdG8gc2VuZCB0bwogKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnaW5nU2VydmljZVNpZCAtIFR3aWxpbyBtZXNzYWdpbmcgc2VydmljZSBTSUQKICogQHBhcmFtIHtzdHJpZ30gdXJpIC0gVGhlIFVSSSBvZiB0aGUgVHdpbGlvIEFQSSBlbmRwb2ludCAKICogQHBhcmFtIHtzdHJpbmd9IHNpZCAtIFRoZSBUd2lsaW8gYWNjb3VudCBvciBBUEkga2V5IFNJRAogKiBAcGFyYW0geyp9IHNlY3JldCAtIFRoZSBUd2lsaW8gYWNjb3VudCBhdXRoa2V5IG9yIEFQSSBrZXkgc2VjcmV0CiAqIEByZXR1cm5zIC0gQSBub2RlIG91dGNvbWUgCiAqLwpmdW5jdGlvbiBzZW5kU01TKG1lc3NhZ2UsIG51bWJlckZyb20sIG51bWJlclRvLCBtZXNzYWdpbmdTZXJ2aWNlU2lkLCB1cmksIHNpZCwgc2VjcmV0KSB7CgogICAgbG9nZ2VyLm1lc3NhZ2UodGFnKCJDYWxsaW5nIFR3aWxpbyBlbmRwb2ludCAiICsgdXJpKSk7CiAgICBsb2dnZXIubWVzc2FnZSh0YWcoIlNlbmRpbmcgdG8gIiArIG51bWJlclRvKSk7CgogICAgLy8gVHdpbGlvIHNlZW1zIG5vdCB0byBleHBlY3QgdGhlIGZvcm0gdmFsdWVzIHRvIGJlIFVSTCBlbmNvZGVkCgogICAgY29uc3QgcmVxdWVzdEJvZHkgPSAiQm9keT0iLmNvbmNhdChlbmNvZGVVUklDb21wb25lbnQobWVzc2FnZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoIiZGcm9tPSIpLmNvbmNhdChudW1iZXJGcm9tKSAgCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoIiZUbz0iKS5jb25jYXQobnVtYmVyVG8pCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoIiZNZXNzYWdpbmdTZXJ2aWNlU2lkPSIpLmNvbmNhdChtZXNzYWdpbmdTZXJ2aWNlU2lkKTsKICAKICAgIGxvZ2dlci5tZXNzYWdlKHRhZygiTWVzc2FnZSBib2R5ICIgKyByZXF1ZXN0Qm9keSkpOwoKICAgIGNvbnN0IGJhc2ljQXV0aCA9IGZyLkJhc2U2NC5lbmNvZGUoZnIuU3RyaW5nKHNpZC5jb25jYXQoIjoiKS5jb25jYXQoc2VjcmV0KSkuZ2V0Qnl0ZXMoKSk7CiAgICAKICAgIHZhciByZXNwb25zZTsKCiAgICB0cnkgewogICAgICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIlBPU1QiKTsKICAgICAgICByZXF1ZXN0LnNldFVyaSh1cmkpOwogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIgKyBiYXNpY0F1dGgpOwogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgcmVxdWVzdC5nZXRFbnRpdHkoKS5zZXRTdHJpbmcocmVxdWVzdEJvZHkpOwoKICAgICAgICByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIH0KICAgIGNhdGNoIChlKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKHRhZygiRXhjZXB0aW9uIGNhbGxpbmcgdHdpbGlvIGVuZHBvaW50ICIgKyBlKSk7CiAgICAgICAgcmV0dXJuIE5vZGVPdXRjb21lLkVSUk9SOwogICAgfQoKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLmdldFN0YXR1cygpLmdldENvZGUoKTsKCiAgICBpZiAoc3RhdHVzID09PSA0MDEpIHsKICAgICAgICBsb2dnZXIuZXJyb3IodGFnKCJUd2lsaW8gYXV0aGVudGljYXRpb24gZmFpbGVkIikpOwogICAgICAgIHJldHVybiBOb2RlT3V0Y29tZS5BVVRIRkFJTEVEOyAgICAKICAgIH0KCiAgICBpZiAoc3RhdHVzICE9PSAyMDEpIHsKICAgICAgICBsb2dnZXIuZXJyb3IodGFnKCJCYWQgSFRUUCByZXNwb25zZSBmcm9tIFR3aWxpbzogIiArIHN0YXR1cykpOwogICAgICAgIHJldHVybiBOb2RlT3V0Y29tZS5FUlJPUjsgICAgCiAgICB9CgogICAgdmFyIHJlc3BvbnNlSnNvbiA9IHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpOwoKICAgIGlmICghcmVzcG9uc2VKc29uKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKHRhZygiTm8gcmVzcG9uc2UgYm9keSIpKTsKICAgICAgICByZXR1cm4gTm9kZU91dGNvbWUuRVJST1I7ICAgIAogICAgfQoKICAgIHZhciByZXNwb25zZU9iaiA9IEpTT04ucGFyc2UocmVzcG9uc2VKc29uKTsKCiAgICBpZiAoIXJlc3BvbnNlT2JqKSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKHRhZygiQ291bGRuJ3QgcGFyc2UgcmVzcG9uc2UgYm9keSIpKTsKICAgICAgICByZXR1cm4gTm9kZU91dGNvbWUuRVJST1I7ICAgIAogICAgfQoKICAgIGlmICghKHJlc3BvbnNlT2JqLmhhc093blByb3BlcnR5KCJzaWQiKSkpIHsKICAgICAgICBsb2dnZXIuZXJyb3IodGFnKCJObyBzaWQgcHJvcGVydHkgaW4gVHdpbGlvIHJlc3BvbnNlIikpOwogICAgICAgIHJldHVybiBOb2RlT3V0Y29tZS5FUlJPUjsKICAgIH0gIAoKICAgIGxvZ2dlci5tZXNzYWdlKHRhZygibWVzc2FnZSBkZWxpdmVyZWQgc3VjY2Vzc2Z1bGx5IikpOwogICAgcmV0dXJuIE5vZGVPdXRjb21lLkRFTElWRVJFRDsKfQoKLyoqCiAqIE5vZGUgZW50cnkgcG9pbnQKICovCgpsb2dnZXIubWVzc2FnZSh0YWcoIm5vZGUgZXhlY3V0aW5nIikpOwoKdmFyIGlkOwp2YXIgdGVsZXBob25lTnVtYmVyczsKdmFyIG51bWJlclRvOwoKaWYgKCEoaWQgPSBzaGFyZWRTdGF0ZS5nZXQoY29uZmlnLnNoYXJlZFN0YXRlSWRGaWVsZCkpKSB7CiAgICBsb2dnZXIuZXJyb3IodGFnKCJObyBpZCBpbiBzaGFyZWQgc3RhdGUiKSk7CiAgICBvdXRjb21lID0gTm9kZU91dGNvbWUuRVJST1I7Cn0KZWxzZSBpZiAoISh0ZWxlcGhvbmVOdW1iZXJzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShpZCwgY29uZmlnLnBob25lTnVtYmVyRmllbGQpKSkgewogICAgbG9nZ2VyLmVycm9yKHRhZygiTm8gcGhvbmUgbnVtYmVycyBmb3IgdXNlciIpKTsKICAgIG91dGNvbWUgPSBOb2RlT3V0Y29tZS5OT1BIT05FOwp9CmVsc2UgaWYgKCEobnVtYmVyVG8gPSB0ZWxlcGhvbmVOdW1iZXJzLnRvQXJyYXkoKVswXSkpIHsKICAgIGxvZ2dlci5lcnJvcih0YWcoIm5vIHRlbGVwaG9uZU51bWJlciIpKTsKICAgIG91dGNvbWUgPSBOb2RlT3V0Y29tZS5OT1BIT05FOwp9CmVsc2UgaWYgKG51bWJlclRvID09PSAiIikgewogICAgbG9nZ2VyLmVycm9yKHRhZygiYmxhbmsgdGVsZXBob25lTnVtYmVyIikpOwogICAgb3V0Y29tZSA9IE5vZGVPdXRjb21lLk5PUEhPTkU7Cn0KZWxzZSB7CiAgICB2YXIgbWVzc2FnZSA9IHJlc29sdmVQbGFjZWhvbGRlcnMoY29uZmlnLm1lc3NhZ2VUZW1wbGF0ZSk7CiAgICB2YXIgdHdpbGlvVXJpID0gY29uZmlnLmJhc2VVcmkuY29uY2F0KCIvQWNjb3VudHMvIikuY29uY2F0KGNvbmZpZy5hY2NvdW50U2lkKS5jb25jYXQoIi9NZXNzYWdlcy5qc29uIik7CiAgICBvdXRjb21lID0gc2VuZFNNUyhtZXNzYWdlLCBjb25maWcucGhvbmVOdW1iZXJGcm9tLCBudW1iZXJUbywgY29uZmlnLm1lc3NhZ2luZ1NlcnZpY2VTaWQsIHR3aWxpb1VyaSwgY29uZmlnLmFwaUtleVNpZCwgY29uZmlnLmFwaUtleVNlY3JldCk7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"400e48ba-3f13-4144-ac7b-f824ea8e98c5\",\"name\":\"OAuth2 JWT Issuer Script\",\"description\":\"Default global script for scripted JWT Issuers\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgdG8gZGVyaXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIGR5bmFtaWMgSldUIGlzc3VlciBmcm9tIHRoZSBpc3N1ZXIgc3RyaW5nLgogKiBBIEpXVCBpc3N1ZXIgaXMgbWFkZSB1cCBvZiB0aGUgZm9sbG93aW5nOgogKiAgIC0gaXNzdWVyIC0gdGhlIGlkZW50aWZpZXIgb2YgdGhlIGVudGl0eSB0aGF0IGlzc3VlcyBKV1RzCiAqICAgLSByZXNvdXJjZSBvd25lciBzdWJqZWN0IGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCBpZGVudGlmaWVzIHRoZSByZXNvdXJjZSBvd25lcgogKiAgIC0gY29uc2VudGVkIHNjb3BlIGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCByZXByZXNlbnRzIHNjb3BlIHRoYXQgdGhlIHJlc291cmNlIG93bmVyCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYWxyZWFkeSBjb25zZW50ZWQgdG8gZXh0ZXJuYWxseQogKiAgIC0gYXV0aG9yaXplZCBzdWJqZWN0cyAtIHRoZSBzZXQgb2YgcHJpbmNpcGFsIGlkZW50aWZpZXJzIHRoYXQgYXJlIGF1dGhvcml6ZWQgdG8gYmUgdXNlZCBhcyByZXNvdXJjZSBvd25lcnMKICogICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgaXNzdWVyCiAqICAgLSBKV0tzIC0gZWl0aGVyIGEgc2V0IG9mIEpXS3Mgb3IgY29ubmVjdGlvbiBkZXRhaWxzIGZvciBvYnRhaW5pbmcgdGhhdCBzZXQsIHRoYXQgYXJlIHRoZSBwdWJsaWMga2V5cyB0aGF0CiAqICAgICAgICAgICAgY2FuIHZlcmlmeSB0aGUgc2lnbmF0dXJlIG9uIHRoZSBpc3N1ZWQgSldUcy4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIGlzc3VlciAtIFN0cmluZwogKiAgICAgICAgICBUaGUgaXNzdWVyIGZyb20gdGhlIGJlYXJlciBKV1QuCiAqIHJlYWxtIC0gU3RyaW5nCiAqICAgICAgICAgVGhlIHBhdGggb2YgdGhlIHJlYWxtIHRoYXQgaXMgaGFuZGxpbmcgdGhlIHJlcXVlc3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIHNjcmlwdCBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5PQVVUSDJfU0NSSVBURURfSldUX0lTU1VFUi4KICogaHR0cENsaWVudCAtIEhUVFAgQ2xpZW50ICgxKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgSFRUUCBDbGllbnQgaW5zdGFuY2U6CiAqICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC4KICogaWRSZXBvc2l0b3J5IC0gSWRlbnRpdHkgUmVwb3NpdG9yeSAoMikuIEFsd2F5cyBwcmVzZW50LgogKiBzZWNyZXRzIC0gU2VjcmV0cyBhY2Nlc3NvciAoMykuIEFsd2F5cyBwcmVzZW50LgogKgogKiBSZXR1cm4gLSBvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLlRydXN0ZWRKd3RJc3N1ZXJDb25maWcgKDQpIC0gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRydXN0ZWQgSldUIGlzc3Vlci4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgyKSBTY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuYW0vc2NyaXB0aW5nL2FwaS9pZGVudGl0eS9TY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeS5odG1sLgogKiAoMykgU2NyaXB0ZWRTZWNyZXRzIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5hbS9zY3JpcHRpbmcvYXBpL3NlY3JldHMvU2NyaXB0ZWRTZWNyZXRzLmh0bWwuCiAqICg0KSBUcnVzdGVkSnd0SXNzdWVyQ29uZmlnIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1RydXN0ZWRKd3RJc3N1ZXJDb25maWcuaHRtbC4KICovCgovKiBFWEFNUExFCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVHJ1c3RlZEp3dElzc3VlckNvbmZpZywKICAgICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbnMKICAgICk7CgogICAgdmFyIGlzcyA9IGlkUmVwb3NpdG9yeS5nZXRJZGVudGl0eShpc3N1ZXIpOwogICAgaWYgKGlzcyA9PSBudWxsKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoJ05vIGlzc3VlciBmb3VuZCBmb3I6ICcraXNzdWVyKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGxvZ2dlci5tZXNzYWdlKCdGb3VuZCBpc3N1ZXI6ICcraXNzKTsKICAgIC8vIGluIHRoaXMgZXhhbXBsZSBlaXRoZXIgYSBKV0sgc2V0IG9yIGEgVVJJIHRvIGEgSldLIHNldCBhcmUgaW4gdGhlIHBvc3RhbEFkZHJlc3MgYXR0cmlidXRlCiAgICB2YXIgandrc0F0dHJzID0gaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygncG9zdGFsQWRkcmVzcycpOwogICAgdmFyIGp3a1NldCA9IGp3a3NBdHRycy5sZW5ndGggPT09IDAgPyBudWxsIDogandrc0F0dHJzWzBdOwogICAgdmFyIGNvbmZpZyA9IG5ldyBmckphdmEuVHJ1c3RlZEp3dElzc3VlckNvbmZpZygKICAgICAgICBpc3N1ZXIsCiAgICAgICAgJ3N1YicsCiAgICAgICAgJ3Njb3BlJywKICAgICAgICAvLyBpbiB0aGlzIGV4YW1wbGUsIHZhbGlkIHN1YmplY3RzIGFyZSBzdG9yZWQgaW4gdGhlIG1haWwgYXR0cmlidXRlCiAgICAgICAgaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygnbWFpbCcpLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCd7JykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCdodHRwJykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgICc1IG1pbnV0ZXMnLAogICAgICAgICcxIG1pbnV0ZScKICAgICk7CiAgICByZXR1cm4gY29uZmlnOwp9KCkpOwoqLw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_SCRIPTED_JWT_ISSUER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"73cecbfc-dad0-4395-be6a-6858ee3a80e5\",\"name\":\"Microsoft Profile Normalization\",\"description\":\"Normalizes raw profile data from Microsoft\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlOYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbk5hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5zdXJuYW1lKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"b7259916-71ed-4675-8c5a-de86a80e4aed\",\"name\":\"FrodoTestScript2\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"39e615b2-898e-4178-ba30-f58bcc095797\",\"name\":\"Save MFA Preference\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkKKTsKd2l0aCAoZnIpIHsKICAKICB2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCiAgdmFyIG1mYVByZWZBdHRyaWJ1dGUgPSAiZnItYXR0ci1pbXVsdGkyIgogIHZhciBtZmFUeXBlID0gIiI7CiAgCiAgaWYgKHNoYXJlZFN0YXRlLmdldCgid2ViLWF1dGhuLWNoYWxsZW5nZSIpICE9IG51bGwpIHsKICAgIG1mYVR5cGUgPSAid2ViYXV0aG4iOwogIH0gZWxzZSBpZiAoc2hhcmVkU3RhdGUuZ2V0KCJwdXNoUmVnaXN0cmF0aW9uVGltZW91dCIpICE9IG51bGwpIHsKICAgICAgIG1mYVR5cGUgPSAicHVzaCIKICB9CiAgCiAgaWRSZXBvc2l0b3J5LmFkZEF0dHJpYnV0ZSh1c2VybmFtZSwgbWZhUHJlZkF0dHJpYnV0ZSwgW21mYVR5cGVdKTsKICAKICBvdXRjb21lID0gInRydWUiCn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"dbe0bf9a-72aa-49d5-8483-9db147985a47\",\"name\":\"ADFS Profile Normalization (JS)\",\"description\":\"Normalizes raw profile data from ADFS\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIHRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIKICogaW4gYSBzdGFuZGFyZCBmb3JtIGV4cGVjdGVkIGJ5IHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogcmF3UHJvZmlsZSAtIFRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvdmlkZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIuCiAqICAgICAgICAgICAgICBKc29uVmFsdWUgKDEpLgogKiBsb2dnZXIgLSBUaGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiByZWFsbSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqIHJlcXVlc3RIZWFkZXJzIC0gVHJlZU1hcCAoMikuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFjY2Vzc2luZyBoZWFkZXJzIGluIHRoZSBsb2dpbiByZXF1ZXN0OgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1yZXF1ZXN0SGVhZGVycy4KICogcmVxdWVzdFBhcmFtZXRlcnMgLSBUcmVlTWFwICgyKS4KICogICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFyYW1ldGVycy4KICogc2VsZWN0ZWRJZHAgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgVGhlIHNvY2lhbCBpZGVudGl0eSBwcm92aWRlciBuYW1lLiBGb3IgZXhhbXBsZTogZ29vZ2xlLgogKiBzaGFyZWRTdGF0ZSAtIExpbmtlZEhhc2hNYXAgKDMpLgogKiAgICAgICAgICAgICAgIFRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgc3RhdGUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRyZWUgYW5kIGFsbG93cyBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gdGhlIHN0YXRlbGVzcyBub2RlczoKICogICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoLW5vZGVzL2NvcmUtYWN0aW9uLmh0bWwjYWNjZXNzaW5nLXRyZWUtc3RhdGUuCiAqIHRyYW5zaWVudFN0YXRlIC0gTGlua2VkSGFzaE1hcCAoMykuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCBmb3Igc3RvcmluZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdGhhdCBtdXN0IG5vdCBsZWF2ZSB0aGUgc2VydmVyIHVuZW5jcnlwdGVkLAogKiAgICAgICAgICAgICAgICAgIGFuZCB0aGF0IG1heSBub3QgbmVlZCB0byBwZXJzaXN0IGJldHdlZW4gYXV0aGVudGljYXRpb24gcmVxdWVzdHMgZHVyaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBzZXNzaW9uOgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGgtbm9kZXMvY29yZS1hY3Rpb24uaHRtbCNhY2Nlc3NpbmctdHJlZS1zdGF0ZS4KICoKICogUmV0dXJuIC0gYSBKc29uVmFsdWUgKDEpLgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqCiAqICAgICAgICAgIFRoaXMgc2NyaXB0J3MgbGFzdCBzdGF0ZW1lbnQgc2hvdWxkIHJlc3VsdCBpbiBhIEpzb25WYWx1ZSAoMSkgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAqICAgICAgICAgIHsKICogICAgICAgICAgICAgIHsiZGlzcGxheU5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZW1haWwiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZmFtaWx5TmFtZSI6ICJjb3JyZXNwb25kaW5nLXNvY2lhbC1pZGVudGl0eS1wcm92aWRlci12YWx1ZSJ9LAogKiAgICAgICAgICAgICAgeyJnaXZlbk5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiaWQiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsibG9jYWxlIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InBob3RvVXJsIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InVzZXJuYW1lIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0KICogICAgICAgICAgfQogKgogKiAgICAgICAgICBUaGUgY29uc3VtZXIgb2YgdGhpcyBkYXRhIGRlZmluZXMgd2hpY2gga2V5cyBhcmUgcmVxdWlyZWQgYW5kIHdoaWNoIGFyZSBvcHRpb25hbC4KICogICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlIGFuZCwKICogICAgICAgICAgdWx0aW1hdGVseSwgdGhlIG1hbmFnZWQgb2JqZWN0IGNyZWF0ZWQvdXBkYXRlZCB3aXRoIHRoaXMgZGF0YQogKiAgICAgICAgICB3aWxsIGV4cGVjdCBjZXJ0YWluIGtleXMgdG8gYmUgcG9wdWxhdGVkLgogKiAgICAgICAgICBJbiBzb21lIGNvbW1vbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB0aGUgZm9sbG93aW5nIGtleXMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vdCBlbXB0eToKICogICAgICAgICAgdXNlcm5hbWUsIGdpdmVuTmFtZSwgZmFtaWx5TmFtZSwgZW1haWwuCiAqCiAqICAgICAgICAgIEZyb20gUkZDNDUxNzogQSB2YWx1ZSBvZiB0aGUgRGlyZWN0b3J5IFN0cmluZyBzeW50YXggaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKICogICAgICAgICAgYXJiaXRyYXJ5IGNoYXJhY3RlcnMgZnJvbSB0aGUgVW5pdmVyc2FsIENoYXJhY3RlciBTZXQgKFVDUykuCiAqICAgICAgICAgIEEgemVyby1sZW5ndGggY2hhcmFjdGVyIHN0cmluZyBpcyBub3QgcGVybWl0dGVkLgogKgogKiAoMSkgSnNvblZhbHVlIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2pzb24vSnNvblZhbHVlLmh0bWwuCiAqICgyKSBUcmVlTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9UcmVlTWFwLmh0bWwuCiAqICgzKSBMaW5rZWRIYXNoTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqLwoKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQogICAgKTsKCiAgICB2YXIgbm9ybWFsaXplZFByb2ZpbGVEYXRhID0gZnJKYXZhLkpzb25WYWx1ZS5qc29uKGZySmF2YS5Kc29uVmFsdWUub2JqZWN0KCkpOwogIAogICAgICAvL2xvZ2dlci5tZXNzYWdlKCdTZWd1aW4gcmF3UHJvZmlsZTogJytyYXdQcm9maWxlKTsKCiAgICBub3JtYWxpemVkUHJvZmlsZURhdGEucHV0KCdpZCcsIHJhd1Byb2ZpbGUuZ2V0KCdzdWInKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2Rpc3BsYXlOYW1lJywgcmF3UHJvZmlsZS5nZXQoJ2dpdmVuTmFtZScpLmFzU3RyaW5nKCkgKyAnICcgKyByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2VtYWlsJywgcmF3UHJvZmlsZS5nZXQoJ21haWwnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2dpdmVuTmFtZScsIHJhd1Byb2ZpbGUuZ2V0KCdnaXZlbk5hbWUnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2ZhbWlseU5hbWUnLCByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ3VzZXJuYW1lJywgcmF3UHJvZmlsZS5nZXQoJ3VwbicpLmFzU3RyaW5nKCkpOwogICAgbm9ybWFsaXplZFByb2ZpbGVEYXRhLnB1dCgncm9sZXMnLCByYXdQcm9maWxlLmdldCgncm9sZXMnKS5hc1N0cmluZygpKTsKICAKICAgICAgLy9sb2dnZXIubWVzc2FnZSgnU2VndWluIG5vcm1hbGl6ZWRQcm9maWxlRGF0YTogJytub3JtYWxpemVkUHJvZmlsZURhdGEpOwoKICAgIHJldHVybiBub3JtYWxpemVkUHJvZmlsZURhdGE7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"cf63df8d-30e4-4839-b671-5b24006a3204\",\"name\":\"MutilevelSelect\",\"description\":\"null\",\"script\":\"Ly8gbGVnYWN5IC0gbXVsdGlwbGUgY2hvaWNlIGNhbGxiYWNrcwoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0LAogIG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXNwb25zZSwKICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLkNob2ljZUNhbGxiYWNrLAogIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ29uZmlybWF0aW9uQ2FsbGJhY2ssCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuSGlkZGVuVmFsdWVDYWxsYmFjaywKICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2ssCiAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0SW5wdXRDYWxsYmFjaywKICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuQm9vbGVhbkF0dHJpYnV0ZUlucHV0Q2FsbGJhY2sKKTsKCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogIHJldHVybiBmb3JtYXQucmVwbGFjZSgvW3hdL2csIGZ1bmN0aW9uKGMpIHsKICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpKjEwfDA7CiAgICAgIHZhciB2ID0gcjsKICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTApOwogIH0pOwp9CgpmdW5jdGlvbiBnZXRDb3VudHJpZXMoZGF0YSkgewogIHZhciBjID0gW107CiAgZGF0YS5mb3JFYWNoKGU9PmMucHVzaChlLm5hbWUpKTsKICByZXR1cm4gYzsKfQoKZnVuY3Rpb24gZ2V0U3RhdGVzKGRhdGEsIGMpIHsKICB2YXIgcyA9IFtdOwogIGRhdGFbY10uc3RhdGVzLmZvckVhY2goZT0+cy5wdXNoKGUubmFtZSkpOwogIHJldHVybiBzOwp9CgpmdW5jdGlvbiBnZXRDaXRpZXMoZGF0YSwgYywgcykgewogIHZhciBjaSA9IFtdOwogIGRhdGFbY10uc3RhdGVzW3NdLmNpdGllcy5mb3JFYWNoKGU9PmNpLnB1c2goZS5uYW1lKSk7CiAgcmV0dXJuIGNpOwp9CgpmdW5jdGlvbiBnZXREYXRhKCkgewogIHZhciByZXF1ZXN0VVJMID0gJ2h0dHBzOi8vZ2lzdC5naXRodWJ1c2VyY29udGVudC5jb20vYXRvbWljc2FtdXJhaS80OGM4OTFlOGE3OGU4YWEzNDBjMGZmZjk2ZDQ4MDZmNC9yYXcvOTk0NjFmZjdjZDNjYTFiMGI3YTU1MTk0MjkxNTM1N2UzYTQzOGFiNS9jb3VudHJ5LXN0YXRlLWNpdHkuanNvbic7CiAgdmFyIHJlcXVlc3QgPSBuZXcgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QoKTsKICByZXF1ZXN0LnNldFVyaShyZXF1ZXN0VVJMKTsKICByZXF1ZXN0LnNldE1ldGhvZCgnR0VUJyk7CiAgcmVxdWVzdC5nZXRIZWFkZXJzKCkuYWRkKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsnKTsKICAKICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7ICAKICB2YXIgcmVzcG9uc2VDb2RlID0gcmVzcG9uc2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpOwogIGlmIChyZXNwb25zZUNvZGUgPT09IDIwMCkgewogICAgcmV0dXJuIEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCihmdW5jdGlvbiAoKSB7CiAgdHJ5IHsKICAgIHZhciBhbmNob3IgPSBnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4Jyk7CiAgICB2YXIgZGF0YSA9IGdldERhdGEoKTsKICAgIHZhciBzdGF0ZXMgPSBbXTsKICAgIHZhciBjaXRpZXMgPSBbXTsKICAgIHZhciBzZWxlY3RlZENvdW50cnkgPSAwOwogICAgdmFyIHNlbGVjdGVkU3RhdGUgPSAwOwogICAgc2VsZWN0ZWRDb3VudHJ5ID0gc2hhcmVkU3RhdGUuZ2V0KCdzZWxlY3RlZENvdW50cnknKT9wYXJzZUludChub2RlU3RhdGUuZ2V0KCdzZWxlY3RlZENvdW50cnknKSk6MDsKICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogc2VsZWN0ZWQgY291bnRyeSB7fScsIHNlbGVjdGVkQ291bnRyeSk7CiAgICBzZWxlY3RlZFN0YXRlID0gc2hhcmVkU3RhdGUuZ2V0KCdzZWxlY3RlZFN0YXRlJyk/cGFyc2VJbnQobm9kZVN0YXRlLmdldCgnc2VsZWN0ZWRTdGF0ZScpKTowOwogICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOwogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgdmFyIGNiTGlzdCA9IFtdOwogICAgICB2YXIgY291bnRyeUNiID0gbmV3IGZyLkNob2ljZUNhbGxiYWNrKCdTZWxlY3QgY291bnRyeScsIGdldENvdW50cmllcyhkYXRhKSwgc2VsZWN0ZWRDb3VudHJ5LCBmYWxzZSk7CiAgICAgIGNvdW50cnlDYi5zZXRTZWxlY3RlZEluZGV4KHNlbGVjdGVkQ291bnRyeSk7CiAgICAgIGNiTGlzdC5wdXNoKGNvdW50cnlDYik7CiAgICAgIHN0YXRlcyA9IGdldFN0YXRlcyhkYXRhLCBzZWxlY3RlZENvdW50cnkpOwogICAgICB2YXIgc3RhdGVDYiA9IG5ldyBmci5DaG9pY2VDYWxsYmFjaygnU2VsZWN0IHN0YXRlJywgc3RhdGVzLCBzZWxlY3RlZFN0YXRlLCBmYWxzZSk7CiAgICAgIHN0YXRlQ2Iuc2V0U2VsZWN0ZWRJbmRleChzZWxlY3RlZFN0YXRlKTsKICAgICAgY2JMaXN0LnB1c2goc3RhdGVDYik7CiAgICAgIGNpdGllcyA9IGdldENpdGllcyhkYXRhLCBzZWxlY3RlZENvdW50cnksIHNlbGVjdGVkU3RhdGUpOwogICAgICBjYkxpc3QucHVzaChuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKDAsIGBMaXN0IG9mIGNpdGllcyBpbiAke3N0YXRlc1tzZWxlY3RlZFN0YXRlXX1gKSk7CiAgICAgIGNpdGllcy5mb3JFYWNoKGU9PnsKICAgICAgICBjYkxpc3QucHVzaChuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKDAsIGUpKTsKICAgICAgfSk7CgogICAgICB2YXIgc2NyaXB0ID0gYAogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygnc2NyaXB0IGVudGVyJyk7CiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtdWx0aXNlbGVjdF9fb3B0aW9uJykuZm9yRWFjaChmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBjb25zdCBodkNiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdGlvbkNoYW5nZWQnKTsKICAgICAgICAgICAgICBjb25zdCBldiA9IG5ldyBFdmVudCgiY2hhbmdlIik7CiAgICAgICAgICAgICAgaHZDYi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJ3RydWUnKTsKICAgICAgICAgICAgICBjb25zb2xlLmxvZygnaW52b2tpbmcgY2hhbmdlIG9uIGhpZGRlbiB2YWx1ZSBpbnB1dCcpOwogICAgICAgICAgICAgIGh2Q2IuZGlzcGF0Y2hFdmVudChldik7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3N1Ym1pdHRpbmcuLi4nKTsKICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9naW5CdXR0b25fMCcpLmNsaWNrKCk7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9KQogICAgICAgICAgfSkKICAgICAgICB9LCA1MCk7CiAgICAgIGA7CiAgICAgIGNiTGlzdC5wdXNoKG5ldyBmci5IaWRkZW5WYWx1ZUNhbGxiYWNrKCdzZWxlY3Rpb25DaGFuZ2VkJywgJ2ZhbHNlJykpOwogICAgICBjYkxpc3QucHVzaChuZXcgZnIuQ29uZmlybWF0aW9uQ2FsbGJhY2soMCwgWydGaW5pc2gnXSwgMCkpOwogICAgICBjYkxpc3QucHVzaChuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkpOwogICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZC5hcHBseShudWxsLCBjYkxpc3QpLmJ1aWxkKCk7CiAgICB9IGVsc2UgewogICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IGhpZGRlbiB0ZXh0IGlucHV0OiB7fScsIGNhbGxiYWNrcy5nZXQoY2FsbGJhY2tzLnNpemUoKS0zKS5nZXRWYWx1ZSgpKTsKICAgICAgaWYgKGNhbGxiYWNrcy5nZXQoY2FsbGJhY2tzLnNpemUoKS0zKS5nZXRWYWx1ZSgpID09ICd0cnVlJykgeyAvLyBjaGVjayB2YWx1ZSBvZiB0ZXh0IGlucHV0IGNhbGxiYWNrCiAgICAgICAgLy8gb25lIG9mIHRoZSBjYXRlZ29yeSBwaWNrZXJzIHdhcyBjaGFuZ2VkCiAgICAgICAgaWYoc2VsZWN0ZWRDb3VudHJ5ICE9IGNhbGxiYWNrcy5nZXQoMCkuZ2V0U2VsZWN0ZWRJbmRleGVzKClbMF0pIHsKICAgICAgICAgIHNlbGVjdGVkU3RhdGUgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZWxlY3RlZFN0YXRlID0gY2FsbGJhY2tzLmdldCgxKS5nZXRTZWxlY3RlZEluZGV4ZXMoKVswXTsKICAgICAgICB9CiAgICAgICAgc2VsZWN0ZWRDb3VudHJ5ID0gY2FsbGJhY2tzLmdldCgwKS5nZXRTZWxlY3RlZEluZGV4ZXMoKVswXTsKICAgICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNldCBzZWxlY3RlZCBjb3VudHJ5IHt9Jywgc2VsZWN0ZWRDb3VudHJ5KTsKICAgICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNldCBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOyAgCiAgICAgICAgc2hhcmVkU3RhdGUucHV0KCdzZWxlY3RlZENvdW50cnknLCBzZWxlY3RlZENvdW50cnkpOwogICAgICAgIHNoYXJlZFN0YXRlLnB1dCgnc2VsZWN0ZWRTdGF0ZScsIHNlbGVjdGVkU3RhdGUpOwogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKCd1cGRhdGUnKS5idWlsZCgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIHVzZXIgY2xpY2tlZCAiZmluaXNoIgogICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKCdjb21wbGV0ZScpLmJ1aWxkKCk7CiAgICAgIH0KICAgIH0KICB9IGNhdGNoIChlKSB7CiAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IGVycm9yOiB7fSAnICsgZSwgZSk7CiAgICBvdXRjb21lID0gJ2Vycm9yJwogIH0KfSkoKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"name\":\"Check Username\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"07ee6240-d106-4e25-a781-5fcabc477d22\",\"name\":\"FrodoSPAdapter\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_SP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"f203173e-bceb-4e8e-8bde-52f2616b7278\",\"name\":\"pwdlessSet.js\",\"description\":\"null\",\"script\":\"aWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwpzZXRDdXN0b21BdHRyVmFsdWUoImN1c3RvbV9wYXNzd29yZGxlc3MiLCB0cnVlKTsKaWRSZXBvc2l0b3J5LnNldEF0dHJpYnV0ZShpZCwgImFzc2lnbmVkRGFzaGJvYXJkIixbInJlZ2lzdGVyV2ViQXV0aE5EZXZpY2UiLCJzZXRVc2VybmFtZUxlc3MiLCJwZWVyUmVjb3ZlcnlFbWFpbCIsInBlZXJSZWNvdmVyeTFGQSIsICJyZWdpc3RlclB1c2giXSk7CgoKICAgIApvdXRjb21lID0gInRydWUiOwoKZnVuY3Rpb24gc2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSxjdXN0b21BdHRyVmFsdWUpCnsKICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCAnZnItaWRtLWN1c3RvbS1hdHRycycpOwogIGlmIChmcklkbUN1c3RvbUF0dHJpYnV0ZXMpCiAgewogICAgdmFyIGZySWRtQ3VzdG9tQXR0cmlidXRlc09iamVjdCA9IEpTT04ucGFyc2UoU3RyaW5nKGZySWRtQ3VzdG9tQXR0cmlidXRlcy50b0FycmF5KClbMF0pKTsKICAgIGZySWRtQ3VzdG9tQXR0cmlidXRlc09iamVjdFtjdXN0b21BdHRyTmFtZV0gPSBjdXN0b21BdHRyVmFsdWU7CiAgICB2YXIganNvbl9zdHJpbmcgPSBKU09OLnN0cmluZ2lmeShmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QpOwogICAgaWRSZXBvc2l0b3J5LnNldEF0dHJpYnV0ZShpZCwgImZyLWlkbS1jdXN0b20tYXR0cnMiLFtqc29uX3N0cmluZ10pOwogIH0KfQo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"58c824ae-84ed-4724-82cd-db128fc3f6c\",\"name\":\"Normalized Profile to Managed User\",\"description\":\"Converts a normalized social profile into a managed user\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgbWFuYWdlZFVzZXIgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlck5hbWUiLCBub3JtYWxpemVkUHJvZmlsZS51c2VybmFtZSkpKQoKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgicG9zdGFsQWRkcmVzcyIsIG5vcm1hbGl6ZWRQcm9maWxlLnBvc3RhbEFkZHJlc3MpCmlmIChub3JtYWxpemVkUHJvZmlsZS5hZGRyZXNzTG9jYWxpdHkuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgiY2l0eSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NMb2NhbGl0eSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24uaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dCgic3RhdGVQcm92aW5jZSIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NSZWdpb24pCmlmIChub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInBvc3RhbENvZGUiLCBub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxDb2RlKQppZiAobm9ybWFsaXplZFByb2ZpbGUuY291bnRyeS5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KCJjb3VudHJ5Iiwgbm9ybWFsaXplZFByb2ZpbGUuY291bnRyeSkKaWYgKG5vcm1hbGl6ZWRQcm9maWxlLnBob25lLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoInRlbGVwaG9uZU51bWJlciIsIG5vcm1hbGl6ZWRQcm9maWxlLnBob25lKQoKLy8gaWYgdGhlIGdpdmVuTmFtZSBhbmQgZmFtaWx5TmFtZSBpcyBudWxsIG9yIGVtcHR5Ci8vIHRoZW4gYWRkIGEgYm9vbGVhbiBmbGFnIHRvIHRoZSBzaGFyZWQgc3RhdGUgdG8gaW5kaWNhdGUgbmFtZXMgYXJlIG5vdCBwcmVzZW50Ci8vIHRoaXMgY291bGQgYmUgdXNlZCBlbHNld2hlcmUKLy8gZm9yIGVnLiB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gYSBzY3JpcHRlZCBkZWNpc2lvbiBub2RlIHRvIGJ5LXBhc3MgcGF0Y2hpbmcKLy8gdGhlIHVzZXIgb2JqZWN0IHdpdGggYmxhbmsgdmFsdWVzIHdoZW4gZ2l2ZW5OYW1lICBhbmQgZmFtaWx5TmFtZSBpcyBub3QgcHJlc2VudApib29sZWFuIG5vR2l2ZW5OYW1lID0gbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lLmFzU3RyaW5nKCk/LnRyaW0oKSkKYm9vbGVhbiBub0ZhbWlseU5hbWUgPSBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZmFtaWx5TmFtZS5hc1N0cmluZygpPy50cmltKCkpCnNoYXJlZFN0YXRlLnB1dCgibmFtZUVtcHR5T3JOdWxsIiwgbm9HaXZlbk5hbWUgJiYgbm9GYW1pbHlOYW1lKQoKcmV0dXJuIG1hbmFnZWRVc2VyCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"59f84396-71e4-4c1d-a6ae-c4fc624d9752\",\"name\":\"Test-Script-1\",\"description\":\"A test script that uses an environment variable and a secret variable\",\"script\":\"Ly8gQ2FsY3VsYXRlIEU9bWNeMiB1c2luZyBtID0gNDIKY29uc3QgYzIgPSBzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi50ZXN0LnZhcmlhYmxlLmxpZ2h0Iik7CmNvbnNvbGUubG9nKGBFID0gJHs0MiAqIGMyICogYzJ9YCk7Ci8vIENhbGN1bGF0ZSB0aGUgYXJlYSBvZiBhIGNpcmNsZSB3aXRoIHJhZGl1cyByID0gNDIKY29uc3QgcGkgPSBwYXJzZUZsb2F0KHN5c3RlbUVudi5nZXRQcm9wZXJ0eSgiZXN2LnRlc3Quc2VjcmV0LnBpIikpOwpjb25zb2xlLmxvZyhgQSA9ICR7cGkgKiA0MiAqIDQyfWApOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"29be3f4a-cf40-4aca-8fe3-de40c9a801dd\",\"name\":\"hasWebAuthN.js\",\"description\":\"null\",\"script\":\"dmFyIHdlYmF1dGhuRGV2aWNlUHJvZmlsZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHNoYXJlZFN0YXRlLmdldCgiX2lkIiksICJ3ZWJhdXRobkRldmljZVByb2ZpbGVzIikudG9TdHJpbmcoKTsKc2hhcmVkU3RhdGUucHV0KCJkZWJ1ZyIsd2ViYXV0aG5EZXZpY2VQcm9maWxlcyk7CmlmKHdlYmF1dGhuRGV2aWNlUHJvZmlsZXMubGVuZ3RoPjIpIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7Cn0KZWxzZSB7CiAgb3V0Y29tZSA9ICJmYWxzZSI7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"13aaf8de-cd8c-4b0e-9167-39ca1fb590a4\",\"name\":\"timerButton.js\",\"description\":\"null\",\"script\":\"Ly8gVGltZXIgQnV0dG9uIG5vZGUKLy8gT3V0Y29tZXM6IFsgInRydWUiLCAidGltZXIiIF0KCgpERUxBWT0xMDsKTUVTU0FHRT0iU2tpcCB0byB5b3VyIHByZWZlcnJlZCBtZXRob2QuLi4gIjsKQlVUVE9OVEVYVD0iU2VsZWN0IGFub3RoZXIgbG9naW4gbWV0aG9kIjsKCnZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5OYW1lQ2FsbGJhY2ssCiAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKKQoKZnVuY3Rpb24gY3JlYXRlU2NyaXB0KCkgewogICAgcmV0dXJuIFN0cmluZygiIFxuXAogICAgICAgIHZhciBDT1VOVCA9ICIgKyBERUxBWSArICI7IFxuXAogICAgICAgIGZ1bmN0aW9uIGdvKG9icykgeyBcblwKICAgICAgICAgICAgY29uc3QgcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtdnYtYXM9XCJEVU1NWVwiXScpWzBdOyBcblwKICAgICAgICAgICAgaWYgKHApIHsgXG5cCiAgICAgICAgICAgICAgICBwLmhpZGRlbiA9IHRydWU7IFxuXAogICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbGFiZWxbZm9yPScgKyBwLmlkICsgJ10nKS5oaWRkZW4gPSB0cnVlOyBcblwKICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignYnV0dG9uW3R5cGU9c3VibWl0XScpLmlubmVyVGV4dCA9ICciICsgQlVUVE9OVEVYVCArICInOyBcblwKICAgICAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7IFxuXAogICAgICAgICAgICAgICAgYi5jbGFzc0xpc3QuYWRkKFwiYnRuXCIsIFwibXQtM1wiLCBcImJ0bi1zZWNvbmRhcnlcIik7IFxuXAogICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSAnIiArIE1FU1NBR0UgKyAiJyArIENPVU5UICsgJ3MnOyBcblwKICAgICAgICAgICAgICAgIGIub25jbGljayA9IGZ1bmN0aW9uKCkgeyBwLnZhbHVlPSdfX19USU1FX19fJzsgcC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnKSk7IH07IFxuXAogICAgICAgICAgICAgICAgcC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShiLCBwLm5leHRTaWJsaW5nKTsgXG5cCiAgICAgICAgICAgICAgICB2YXIgdCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgeyBcblwKICAgICAgICAgICAgICAgICAgICBpZiAoQ09VTlQgPT0gMSkgeyBcblwKICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0KTsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgIHAudmFsdWU9J19fX1RJTUVfX18nOyBwLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcpKTsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dpbkJ1dHRvbl8wJykuY2xpY2soKTsgfSwgMjAwKTsgXG5cCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgXG5cCiAgICAgICAgICAgICAgICAgICAgICAgIENPVU5ULS07IFxuXAogICAgICAgICAgICAgICAgICAgICAgICBiLmlubmVySFRNTCA9ICciICsgTUVTU0FHRSArICInICsgQ09VTlQgKyAncyc7IFxuXAogICAgICAgICAgICAgICAgICAgIH0gXG5cCiAgICAgICAgICAgICAgICB9LCAxMDAwICk7IFxuXAogICAgICAgICAgICAgICAgaWYgKG9icykgb2JzLmRpc2Nvbm5lY3QoKTsgXG5cCiAgICAgICAgICAgICAgICByZXR1cm47IFxuXAogICAgICAgICAgICB9IFxuXAogICAgICAgIH0gXG5cCiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2RhdGEtdnYtYXM9XCJEVU1NWVwiXScpWzBdKSBnbygpOyBcblwKICAgICAgICBlbHNlIHsgXG5cCiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucywgb2JzKSA9PiB7IGdvKG9icyk7IH0pOyBcblwKICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7IFxuXAogICAgICAgIH0gXG5cCiAgICAiKTsKfQoKCmlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKGNyZWF0ZVNjcmlwdCgpKSwKICAgICAgICBuZXcgZnIuTmFtZUNhbGxiYWNrKCJEVU1NWSIpCiAgICApLmJ1aWxkKCkKfSBlbHNlIHsKICAgIHZhciBjYiA9IGNhbGxiYWNrcy5nZXQoMSkuZ2V0TmFtZSgpOwogICAgaWYgKGNiID09PSAiX19fVElNRV9fXyIpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidGltZXIiKS5idWlsZCgpOwogICAgfSBlbHNlIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7CiAgICB9Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"95143d29-e417-49a8-a86c-a3b4cf8fd8ed\",\"name\":\"MultilevelSelect\",\"description\":\"null\",\"script\":\"CmZ1bmN0aW9uIGdldENvdW50cmllcyhkYXRhKSB7CiAgdmFyIGMgPSBbXTsKICBkYXRhLmZvckVhY2goZT0+Yy5wdXNoKGUubmFtZSkpOwogIHJldHVybiBjOwp9CgpmdW5jdGlvbiBnZXRTdGF0ZXMoZGF0YSwgYykgewogIHZhciBzID0gW107CiAgZGF0YVtjXS5zdGF0ZXMuZm9yRWFjaChlPT5zLnB1c2goZS5uYW1lKSk7CiAgcmV0dXJuIHM7Cn0KCmZ1bmN0aW9uIGdldENpdGllcyhkYXRhLCBjLCBzKSB7CiAgdmFyIGNpID0gW107CiAgZGF0YVtjXS5zdGF0ZXNbc10uY2l0aWVzLmZvckVhY2goZT0+Y2kucHVzaChlLm5hbWUpKTsKICByZXR1cm4gY2k7Cn0KCmZ1bmN0aW9uIGdldERhdGEoKSB7CiAgdmFyIHJlcXVlc3RPcHRpb25zID0gewogICAgbWV0aG9kOiAnR0VUJywKICB9CgogIHZhciByZXF1ZXN0VVJMID0gJ2h0dHBzOi8vZ2lzdC5naXRodWJ1c2VyY29udGVudC5jb20vYXRvbWljc2FtdXJhaS80OGM4OTFlOGE3OGU4YWEzNDBjMGZmZjk2ZDQ4MDZmNC9yYXcvOTk0NjFmZjdjZDNjYTFiMGI3YTU1MTk0MjkxNTM1N2UzYTQzOGFiNS9jb3VudHJ5LXN0YXRlLWNpdHkuanNvbic7CiAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3RVUkwsIHJlcXVlc3RPcHRpb25zKS5nZXQoKTsKCiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7CiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXNwb25zZS50ZXh0KCkpOwogIH0gZWxzZSB7CiAgICBudWxsOwogIH0KfQoKKGZ1bmN0aW9uICgpIHsKICB0cnkgewogICAgdmFyIGRhdGEgPSBnZXREYXRhKCk7CiAgICB2YXIgc3RhdGVzID0gW107CiAgICB2YXIgY2l0aWVzID0gW107CiAgICB2YXIgc2VsZWN0ZWRDb3VudHJ5ID0gMDsKICAgIHZhciBzZWxlY3RlZFN0YXRlID0gMDsKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIHNlbGVjdGVkQ291bnRyeSA9IG5vZGVTdGF0ZS5nZXQoJ3NlbGVjdGVkQ291bnRyeScpP3BhcnNlSW50KG5vZGVTdGF0ZS5nZXQoJ3NlbGVjdGVkQ291bnRyeScpKTowOwogICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNlbGVjdGVkIGNvdW50cnkge30nLCBzZWxlY3RlZENvdW50cnkpOwogICAgICBzZWxlY3RlZFN0YXRlID0gbm9kZVN0YXRlLmdldCgnc2VsZWN0ZWRTdGF0ZScpP3BhcnNlSW50KG5vZGVTdGF0ZS5nZXQoJ3NlbGVjdGVkU3RhdGUnKSk6MDsKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOwogICAgICBjYWxsYmFja3NCdWlsZGVyLmNob2ljZUNhbGxiYWNrKCdTZWxlY3QgY291bnRyeScsIGdldENvdW50cmllcyhkYXRhKSwgc2VsZWN0ZWRDb3VudHJ5LCBmYWxzZSk7CiAgICAgIHN0YXRlcyA9IGdldFN0YXRlcyhkYXRhLCBzZWxlY3RlZENvdW50cnkpOwogICAgICBjYWxsYmFja3NCdWlsZGVyLmNob2ljZUNhbGxiYWNrKCdTZWxlY3Qgc3RhdGUnLCBzdGF0ZXMsIHNlbGVjdGVkU3RhdGUsIGZhbHNlKTsKICAgICAgY2l0aWVzID0gZ2V0Q2l0aWVzKGRhdGEsIHNlbGVjdGVkQ291bnRyeSwgc2VsZWN0ZWRTdGF0ZSk7CiAgICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogaGVyZSAxJyk7CiAgICAgIGNpdGllcy5mb3JFYWNoKGU9PnsKICAgICAgICBjYWxsYmFja3NCdWlsZGVyLnRleHRPdXRwdXRDYWxsYmFjaygwLCBlKTsKICAgICAgfSk7CiAgICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogaGVyZSAyJyk7CiAgICAgIGNhbGxiYWNrc0J1aWxkZXIuY29uZmlybWF0aW9uQ2FsbGJhY2soMCwgWydVcGRhdGUnLCAnQ29tcGxldGUnXSwgMCk7CiAgICAgIGxvZ2dlci5lcnJvcignc2FuZGxvZzogaGVyZSAzOiB7fScsIGNhbGxiYWNrcy5nZXRDaG9pY2VDYWxsYmFja3MoKS5zaXplKCkpOwogICAgICBjYWxsYmFja3MuZ2V0Q2hvaWNlQ2FsbGJhY2tzKCkuZ2V0KDApLnNldFNlbGVjdGVkSW5kZXgoc2VsZWN0ZWRDb3VudHJ5KTsKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBoZXJlIDQnKTsKICAgICAgY2FsbGJhY2tzLmdldENob2ljZUNhbGxiYWNrcygpLmdldCgxKS5zZXRTZWxlY3RlZEluZGV4KHNlbGVjdGVkU3RhdGUpOwoKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBoZXJlIDUnKTsKICAgICAgdmFyIHNjcmlwdCA9IGAKICAgICAgICAgIGZ1bmN0aW9uIHNob3dPcmdEZXRhaWxzKCkgewogICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3cmFwcGVyJyk7CiAgICAgICAgICAgIHdyYXBwZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmViZWdpbicsICc8ZGl2PnRlc3Q8L2Rpdj4nKTsKICAgICAgICAgIH0KICAgICAgICAgIHNldFRpbWVvdXQoc2hvd09yZ0RldGFpbHMsIDEwMCk7CiAgICAgICAgICBgOwogICAgICAvLyBjYWxsYmFja3NCdWlsZGVyLnNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpOwogICAgICAvLyBjYWxsYmFja3NCdWlsZGVyLmhpZGRlblZhbHVlQ2FsbGJhY2soJ3NlbGVjdGlvbkNoYW5nZWQnLCAnZmFsc2UnKQogICAgfSBlbHNlIHsKICAgICAgc2VsZWN0ZWRDb3VudHJ5ID0gY2FsbGJhY2tzLmdldENob2ljZUNhbGxiYWNrcygpLmdldCgwKVswXTsKICAgICAgbG9nZ2VyLmVycm9yKCdzYW5kbG9nOiBzZXQgc2VsZWN0ZWQgY291bnRyeSB7fScsIHNlbGVjdGVkQ291bnRyeSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ3NlbGVjdGVkQ291bnRyeScsIHNlbGVjdGVkQ291bnRyeSk7CiAgICAgIHNlbGVjdGVkU3RhdGUgPSBjYWxsYmFja3MuZ2V0Q2hvaWNlQ2FsbGJhY2tzKCkuZ2V0KDEpWzBdOwogICAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IHNldCBzZWxlY3RlZCBzdGF0ZSB7fScsIHNlbGVjdGVkU3RhdGUpOwogICAgICBub2RlU3RhdGUucHV0U2hhcmVkKCdzZWxlY3RlZFN0YXRlJywgc2VsZWN0ZWRTdGF0ZSk7CiAgICAgIGlmIChjYWxsYmFja3MuZ2V0Q29uZmlybWF0aW9uQ2FsbGJhY2tzKCkuZ2V0KDApID09IDApIHsKICAgICAgICBvdXRjb21lID0gJ3VwZGF0ZSc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3V0Y29tZSA9ICdjb21wbGV0ZSc7CiAgICAgIH0KICAgIH0KICB9IGNhdGNoIChlKSB7CiAgICBsb2dnZXIuZXJyb3IoJ3NhbmRsb2c6IGVycm9yOiB7fSAnICsgZSwgZSk7CiAgICBvdXRjb21lID0gJ2Vycm9yJwogIH0KfSkoKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"23143919-6b78-40c3-b25e-beca19b229e0\",\"name\":\"GitHub Profile Normalization (VS)\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJHaXRIdWIgcmF3UHJvZmlsZTogIityYXdQcm9maWxlKQoKcmV0dXJuIGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZmlyc3RfbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3RfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5waWN0dXJlLmRhdGEudXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLmVtYWlsKSkp\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e387c5d7-ceb8-459e-87e6-d09eca512385\",\"name\":\"resetPushBomb.js\",\"description\":\"null\",\"script\":\"dmFyIF9pZCA9IHNoYXJlZFN0YXRlLmdldCgiX2lkIik7CnZhciBhdHRyaWJ1dGUgPSAiZnItYXR0ci1zdHIyIjsKCmlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoX2lkLCBhdHRyaWJ1dGUsWyIiXSk7CgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"248b8a56-df81-4b1b-b4ba-45d994f6504c\",\"name\":\"SAML2 IDP Adapter Script\",\"description\":\"Default global script for SAML2 IDP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9TQU1MMklkZW50aXR5UHJvdmlkZXJBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBJZHBBZGFwdGVyU2NyaXB0SGVscGVyICgxKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgSWRwQWRhcHRlclNjcmlwdEhlbHBlciBjb250YWluaW5nIGhlbHBlciBtZXRob2RzLiBTZWUgSmF2YWRvYyBmb3IgbW9yZSBkZXRhaWxzLgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgyKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDMpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDQpCiAqICAgICBUaGUgb3JpZ2luYWwgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IGZyb20gU1AKICogcmVxSWQgLSBTdHJpbmcKICogICAgIFRoZSBpZCB0byB1c2UgZm9yIGNvbnRpbnVhdGlvbiBvZiBwcm9jZXNzaW5nIGlmIHRoZSBhZGFwdGVyIHJlZGlyZWN0cwogKiByZXMgLSBSZXNwb25zZSAoNSkKICogICAgIFRoZSBTQU1MIFJlc3BvbnNlCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNikKICogICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLiBUaGUgcmVmZXJlbmNlIHR5cGUgb2YgdGhpcyBpcyBPYmplY3QgYW5kIHdvdWxkIG5lZWQgdG8gYmUgY2FzdGVkIHRvIFNTT1Rva2VuLgogKiByZWxheVN0YXRlIC0gU3RyaW5nCiAqICAgICBUaGUgcmVsYXlTdGF0ZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgcmVkaXJlY3QKICogZmF1bHRDb2RlIC0gU3RyaW5nCiAqICAgICB0aGUgZmF1bHQgY29kZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogZmF1bHREZXRhaWwgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBkZXRhaWwgdGhhdCB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBTQU1MIHJlc3BvbnNlCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwuCiAqICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuPHNjcmlwdCBuYW1lPgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb24gKDcpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL0F1dGhuUmVxdWVzdC5odG1sLgogKiAoNSkgUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvUmVzcG9uc2UuaHRtbC4KICogKDYpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBJRFAgQWRhcHRlciBzY3JpcHRlZCBwbHVnaW4uCiAqLwoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2luZ2xlU2lnbk9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlU2lnbk9uICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlQXV0aGVudGljYXRpb246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVBdXRoZW50aWNhdGlvbiAoKSB7CiAgICByZXR1cm4gZmFsc2U7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNlbmRSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgcmVxSWQKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIGJyb3dzZXIgcmVkaXJlY3Rpb24gaGFwcGVuZWQgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2VuZFJlc3BvbnNlICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2lnblJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIHJlcwogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTaWduUmVzcG9uc2UgKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgZmF1bHRDb2RlCiAqICAgICBmYXVsdERldGFpbAogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlICgpIHsKfQ==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"484e6246-dbc6-4288-97e6-54e55431402e\",\"name\":\"Apple Profile Normalization\",\"description\":\"Normalizes raw profile data from Apple\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICoKICogSW4gc29tZSBjb21tb24gZGVmYXVsdCBjb25maWd1cmF0aW9ucywgdGhlIGZvbGxvd2luZyBrZXlzIGFyZSByZXF1aXJlZCB0byBiZSBub3QgZW1wdHk6CiAqIHVzZXJuYW1lLCBnaXZlbk5hbWUsIGZhbWlseU5hbWUsIGVtYWlsLgogKgogKiBGcm9tIFJGQzQ1MTc6IEEgdmFsdWUgb2YgdGhlIERpcmVjdG9yeSBTdHJpbmcgc3ludGF4IGlzIGEgc3RyaW5nIG9mIG9uZSBvciBtb3JlCiAqIGFyYml0cmFyeSBjaGFyYWN0ZXJzIGZyb20gdGhlIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0IChVQ1MpLgogKiBBIHplcm8tbGVuZ3RoIGNoYXJhY3RlciBzdHJpbmcgaXMgbm90IHBlcm1pdHRlZC4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKU3RyaW5nIGVtYWlsID0gImNoYW5nZUBtZS5jb20iClN0cmluZyBzdWJqZWN0SWQgPSByYXdQcm9maWxlLnN1YgpTdHJpbmcgZmlyc3ROYW1lID0gIiAiClN0cmluZyBsYXN0TmFtZSA9ICIgIgpTdHJpbmcgdXNlcm5hbWUgPSBzdWJqZWN0SWQKU3RyaW5nIG5hbWUKCmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgiZW1haWwiKSAmJiByYXdQcm9maWxlLmVtYWlsLmlzTm90TnVsbCgpKXsgLy8gVXNlciBjYW4gZWxlY3QgdG8gbm90IHNoYXJlIHRoZWlyIGVtYWlsCiAgICBlbWFpbCA9IHJhd1Byb2ZpbGUuZW1haWwuYXNTdHJpbmcoKQogICAgdXNlcm5hbWUgPSBlbWFpbAp9CmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgibmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5pc05vdE51bGwoKSkgewogICAgaWYgKHJhd1Byb2ZpbGUubmFtZS5pc0RlZmluZWQoImZpcnN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5maXJzdE5hbWUuaXNOb3ROdWxsKCkpIHsKICAgICAgICBmaXJzdE5hbWUgPSByYXdQcm9maWxlLm5hbWUuZmlyc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KICAgIGlmIChyYXdQcm9maWxlLm5hbWUuaXNEZWZpbmVkKCJsYXN0TmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5sYXN0TmFtZS5pc05vdE51bGwoKSkgewogICAgICAgIGxhc3ROYW1lID0gcmF3UHJvZmlsZS5uYW1lLmxhc3ROYW1lLmFzU3RyaW5nKCkKICAgIH0KfQoKbmFtZSA9IChmaXJzdE5hbWU/LnRyaW0oKSA/IGZpcnN0TmFtZSA6ICIiKSArIChsYXN0TmFtZT8udHJpbSgpID8gKChmaXJzdE5hbWU/LnRyaW0oKSA/ICIgIiA6ICIiKSArIGxhc3ROYW1lKSA6ICIiKQpuYW1lID0gICghbmFtZT8udHJpbSgpKSA/ICIgIiA6IG5hbWUKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCBzdWJqZWN0SWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIG5hbWUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIGVtYWlsKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgZmlyc3ROYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIGxhc3ROYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCB1c2VybmFtZSkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3c9d3b4a-b38c-4c77-a8d7-4b937e48f62f\",\"name\":\"selectFavFactor.js\",\"description\":\"null\",\"script\":\"Ly8gRGlzcGxheXMgTUZBIG9wdGlvbnMgZmlsdGVyZWQgYnkgdXNlcnMgcHJlZmVyZW5jZXMKdmFyIHdlYmF1dGhuRGV2aWNlUHJvZmlsZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHNoYXJlZFN0YXRlLmdldCgiX2lkIiksICJ3ZWJhdXRobkRldmljZVByb2ZpbGVzIikudG9TdHJpbmcoKTsKdmFyIHB1c2hEZXZpY2VQcm9maWxlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKSwgInB1c2hEZXZpY2VQcm9maWxlcyIpLnRvU3RyaW5nKCk7Cgp2YXIgaGFzV2ViQXV0aE49ZmFsc2U7CnZhciBoYXNQdXNoPWZhbHNlOwoKaWYod2ViYXV0aG5EZXZpY2VQcm9maWxlcy5sZW5ndGg+MikgewogICAgaGFzV2ViQXV0aE4gPSB0cnVlOwp9CmlmKHB1c2hEZXZpY2VQcm9maWxlcy5sZW5ndGg+MikgewogICAgaGFzUHVzaCA9IHRydWU7Cn0KCgptZmFzID0geyAKICAgICAgICAgICJQdXNoIjogIlB1c2ggbm90aWZpY2F0aW9uIHZpYSBhdXRoZW50aWNhdG9yIGFwcCIsIAogICAgICAgICAiV2ViQXV0aE4iOiAiU2VjdXJpdHkgS2V5L1RvdWNoSUQvV2luZG93c0hlbGxvL1Bhc3NLZXkiLCAKICAgICAgICAgICAvLyJRUiIgOiAiUVIgQ29kZSBDYXNjYWRlZCBDb250ZXh0IChXZWJBdXRoTikiLAogICAgICAgICAgICJTTVMiIDogIlNNUyBDYXNjYWRlZCBDb250ZXh0IChXZWJBdXRoTikiLAogICAgICAgICAgLy8iRW1haWwiIDogIkUtbWFpbCBDYXNjYWRlZCBDb250ZXh0IChXZWJBdXRoTikiLAogICAgICAgICAgLy8gIlNNU01MIiA6ICJTTVMgTWFnaWMgTGluayIKICAgICAgIH07CgoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ2hvaWNlQ2FsbGJhY2sKKQoKdmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKCi8vIEFkZCBlbnRyeSB0byBtdWx0aSB2YWx1ZQp2YXIgY2hvaWNlcyA9IFtdOwppZihoYXNQdXNoPT10cnVlKXsKICAgICAgY2hvaWNlcy5wdXNoKG1mYXMuUHVzaCk7Cn0KaWYoaGFzV2ViQXV0aE49PXRydWUpewogICAgICBjaG9pY2VzLnB1c2gobWZhcy5XZWJBdXRoTik7CiAgICAgIC8vY2hvaWNlcy5wdXNoKG1mYXMuUVIpOwogICAgICAvL2Nob2ljZXMucHVzaChtZmFzLlNNUyk7CiAgICAvL2Nob2ljZXMucHVzaChtZmFzLkVtYWlsKTsKCn0KLy9jaG9pY2VzLnB1c2gobWZhcy5TTVNNTCk7CmZ1bmN0aW9uIHNldEN1c3RvbUF0dHJWYWx1ZSAoY3VzdG9tQXR0ck5hbWUsY3VzdG9tQXR0clZhbHVlKQp7CiAgdmFyIGlkID0gc2hhcmVkU3RhdGUuZ2V0KCdfaWQnKTsKICB2YXIgZnJJZG1DdXN0b21BdHRyaWJ1dGVzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShpZCwgJ2ZyLWlkbS1jdXN0b20tYXR0cnMnKTsKICBpZiAoZnJJZG1DdXN0b21BdHRyaWJ1dGVzKQogIHsKICAgIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QgPSBKU09OLnBhcnNlKFN0cmluZyhmcklkbUN1c3RvbUF0dHJpYnV0ZXMudG9BcnJheSgpWzBdKSk7CiAgICBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdID0gY3VzdG9tQXR0clZhbHVlOwogICAgdmFyIGpzb25fc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0KTsKICAgIGlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoaWQsICJmci1pZG0tY3VzdG9tLWF0dHJzIixbanNvbl9zdHJpbmddKTsKICB9Cn0KCgovL0NhbGxiYWNrIHRvIHByZXNlbnQgYW5kIHJldHJpZXZlIHNlbGVjdGVkIG9yZyBhbmQgc2V0Ci8vc2VsZWN0ZWQgdGhlbWUgZm9yIHNldHRpbmcgaW4gdGhlIG5leHQgbm9kZQoKCgp3aXRoIChmcikgewogICAgICBpZiAoY2hvaWNlcy5sZW5ndGggPCAyKSBhY3Rpb24gPSBBY3Rpb24uZ29UbyhvdXRjb21lKS5idWlsZCgpOwogICAgZWxzZSB7CiAgICAgICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soCiAgICAgICAgICAgICAgICAgICAgICAiU3Ryb25nIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkLiBQbGVhc2Ugc2VsZWN0IHlvdXIgcHJlZmVycmVkIGZvcm0gb2Ygc3Ryb25nIGF1dGhlbnRpY2F0aW9uIGZyb20gdGhlIGxpc3QgYmVsb3cuIiwKICAgICAgICAgICAgICAgICAgY2hvaWNlcywKICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgZmFsc2UKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApLndpdGhTdGFnZShKU09OLnN0cmluZ2lmeSh7ICJDaG9pY2VDYWxsYmFjayI6IFsgeyAiZGlzcGxheVR5cGUiOiJyYWRpbyIgfSBdIH0pKS53aXRoSGVhZGVyKCJDaG9vc2UgTWV0aG9kIikuYnVpbGQoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBzZWxlY3RlZEluZGV4ID0gY2FsbGJhY2tzLmdldCgwKS5nZXRTZWxlY3RlZEluZGV4ZXMoKVswXTsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkTmFtZTsKICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1mYXMpIGlmIChjaG9pY2VzW3NlbGVjdGVkSW5kZXhdID09IG1mYXNba2V5XSkgc2VsZWN0ZWROYW1lID0ga2V5OwogICAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoInNlbGVjdGVkTmFtZSIsIHNlbGVjdGVkTmFtZSk7CiAgICAgICAgICAgICAgc2V0Q3VzdG9tQXR0clZhbHVlICgiY3VzdG9tX2Zhdm91cml0ZUZhY3RvciIsc2VsZWN0ZWROYW1lKTsKICAgICAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8oc2VsZWN0ZWROYW1lKS5idWlsZCgpOwogICAgICAgIH0gICAKICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"7e3d7067-d50f-4674-8c76-a3e13a810c33\",\"name\":\"Scripted Module - Server Side\",\"description\":\"Default global script for server side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgp2YXIgU1RBUlRfVElNRSA9IDk7ICAvLyA5YW0KdmFyIEVORF9USU1FICAgPSAxNzsgLy8gNXBtCnZhciBsb25naXR1ZGUsIGxhdGl0dWRlOwp2YXIgbG9jYWxUaW1lOwoKbG9nZ2VyLm1lc3NhZ2UoIlN0YXJ0aW5nIHNjcmlwdGVkIGF1dGhlbnRpY2F0aW9uIik7CmxvZ2dlci5tZXNzYWdlKCJVc2VyOiAiICsgdXNlcm5hbWUpOwoKdmFyIHVzZXJQb3N0YWxBZGRyZXNzID0gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKTsKbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgYWRkcmVzczogIiArIHVzZXJQb3N0YWxBZGRyZXNzKTsKCmdldExvbmdpdHVkZUxhdGl0dWRlRnJvbVVzZXJQb3N0YWxBZGRyZXNzKCk7CmdldExvY2FsVGltZSgpOwoKbG9nZ2VyLm1lc3NhZ2UoIkN1cnJlbnQgdGltZSBhdCB0aGUgdXNlcnMgbG9jYXRpb246ICIgKyBsb2NhbFRpbWUuZ2V0SG91cnMoKSk7CmlmIChsb2NhbFRpbWUuZ2V0SG91cnMoKSA8IFNUQVJUX1RJTUUgfHwgbG9jYWxUaW1lLmdldEhvdXJzKCkgPiBFTkRfVElNRSkgewogICAgbG9nZ2VyLmVycm9yKCJMb2dpbiBmb3JiaWRkZW4gb3V0c2lkZSB3b3JrIGhvdXJzISIpOwogICAgYXV0aFN0YXRlID0gRkFJTEVEOwp9IGVsc2UgewogICAgbG9nZ2VyLm1lc3NhZ2UoIkF1dGhlbnRpY2F0aW9uIGFsbG93ZWQhIik7CiAgICBhdXRoU3RhdGUgPSBTVUNDRVNTOwp9CgpmdW5jdGlvbiBnZXRMb25naXR1ZGVMYXRpdHVkZUZyb21Vc2VyUG9zdGFsQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlclBvc3RhbEFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwogICAgICAvL3RoZSBhYm92ZSBVUkkgaGFzIHRvIGJlIGV4dGVuZGVkIHdpdGggYW4gQVBJX0tFWSBpZiB1c2VkIGluIGEgZnJlcXVlbnQgbWFubmVyCiAgICAgIC8vc2VlIGRvY3VtZW50YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9nZW9jb2RpbmcvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIGdlb2NvZGUgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIHZhciBpOwogICAgZm9yIChpID0gMDsgaSA8IGdlb2NvZGUucmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciByZXN1bHQgPSBnZW9jb2RlLnJlc3VsdHNbaV07CiAgICAgICAgbGF0aXR1ZGUgPSByZXN1bHQuZ2VvbWV0cnkubG9jYXRpb24ubGF0OwogICAgICAgIGxvbmdpdHVkZSA9IHJlc3VsdC5nZW9tZXRyeS5sb2NhdGlvbi5sbmc7CgogICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJsYXRpdHVkZToiICsgbGF0aXR1ZGUgKyAiIGxvbmdpdHVkZToiICsgbG9uZ2l0dWRlKTsKICAgIH0KfQoKZnVuY3Rpb24gZ2V0TG9jYWxUaW1lKCkgewoKICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7CiAgICB2YXIgbG9jYXRpb24gPSAibG9jYXRpb249IiArIGxhdGl0dWRlICsgIiwiICsgbG9uZ2l0dWRlOwogICAgdmFyIHRpbWVzdGFtcCA9ICJ0aW1lc3RhbXA9IiArIG5vdzsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS90aW1lem9uZS9qc29uPyIgKyBsb2NhdGlvbiArICImIiArIHRpbWVzdGFtcCk7CiAgICAgIHJlcXVlc3Quc2V0TWV0aG9kKCJHRVQiKTsKICAgICAgLy90aGUgYWJvdmUgVVJJIGhhcyB0byBiZSBleHRlbmRlZCB3aXRoIGFuIEFQSV9LRVkgaWYgdXNlZCBpbiBhIGZyZXF1ZW50IG1hbm5lcgogICAgICAvL3NlZSBkb2N1bWVudGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vdGltZXpvbmUvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIHRpbWV6b25lID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICB2YXIgbG9jYWxUaW1lc3RhbXAgPSBwYXJzZUludChub3cpICsgcGFyc2VJbnQodGltZXpvbmUuZHN0T2Zmc2V0KSArIHBhcnNlSW50KHRpbWV6b25lLnJhd09mZnNldCk7CiAgICBsb2NhbFRpbWUgPSBuZXcgRGF0ZShsb2NhbFRpbWVzdGFtcCoxMDAwKTsKfQoKZnVuY3Rpb24gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKSB7CiAgICB2YXIgdXNlckFkZHJlc3NTZXQgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCAicG9zdGFsQWRkcmVzcyIpOwogICAgaWYgKHVzZXJBZGRyZXNzU2V0ID09IG51bGwgfHwgdXNlckFkZHJlc3NTZXQuaXNFbXB0eSgpKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIGFkZHJlc3Mgc3BlY2lmaWVkIGZvciB1c2VyOiAiICsgdXNlcm5hbWUpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKQp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3b7c5bbe-5a80-4ba1-8918-6a3e2ef891c4\",\"name\":\"CheckIfValidSession\",\"description\":\"Check if a valid session already exists\",\"script\":\"aWYgKHR5cGVvZiBleGlzdGluZ1Nlc3Npb24gIT09ICd1bmRlZmluZWQnKQp7CiAgb3V0Y29tZSA9ICJoYXNTZXNzaW9uIjsKfQplbHNlCnsKICBvdXRjb21lID0gIm5vU2Vzc2lvbiI7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c9cb4b1e-1cd3-4e5b-8f56-140f83ba9f6d\",\"name\":\"FrodoTestScript1\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"320012d2-ad02-401a-871e-3973db81a3d7\",\"name\":\"Demo - Journey Chooser\",\"description\":\"null\",\"script\":\"Ly8gRGlzcGxheSBjaG9pY2Ugb2Ygam91cm5leXMKLy8gU2VlIGh0dHBzOi8vY2RuLWljb25zLXBuZy5mbGF0aWNvbi5jb20gZm9yIGV4YW1wbGUgaWNvbnMKdmFyIGpvdXJuZXlzID0gWwogIC8veyAibmFtZSI6ICJMZWdhY3kgTG9naW4iLCAidXJsIjogIkxvZ2luIiwgImljb24iOiAiMTI4LzYzMTcvNjMxNzU3Ny5wbmciIH0sCiAgeyAibmFtZSI6ICJMb2dpbiIsICJ1cmwiOiAiUGFzc3dvcmRsZXNzLU1hc3RlciIsICJpY29uIjogIjEyOC85Njk5Lzk2OTk1ODIucG5nIiB9LAogIC8veyAibmFtZSI6ICJSZWdpc3RlciIsICJ1cmwiOiAiRGVtby1Qd2RsZXNzLU5ldy1Vc2VyICIsICJpY29uIjogIjEyOC8xNjk4LzE2OTg1NzIucG5nIiB9LAogIC8veyAibmFtZSI6ICJRUiBMb2dpbiIsICJ1cmwiOiAiRGVtby1Qd2RMZXNzLVFSIiwgImljb24iOiAiMTI4LzEyODcvMTI4NzU1OC5wbmciIH0sCiAgLy97ICJuYW1lIjogIlNNUyBXZWJBdXRoTiIsICJ1cmwiOiAiRGVtby1Qd2RMZXNzLVNNUyIsICJpY29uIjogIjEyOC8yNzA0LzI3MDQxNjcucG5nIiB9LAogIC8veyAibmFtZSI6ICJTTVMgTWFnaWMgTGluayIsICJ1cmwiOiAiRGVtby1Qd2RMZXNzLVNNUy1TaW1wbGUiLCAiaWNvbiI6ICIxMjgvMjcwNC8yNzA0MTY3LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiSUQgUHJvb2ZpbmciLCAidXJsIjogIkRlbW8tT25GaWRvIiwgImljb24iOiAiMTI4LzYwNjEvNjA2MTM5Ni5wbmciIH0sCiAgLy97ICJuYW1lIjogIlJlZ2lzdGVyK0lEVi1MaXZlIiwgInVybCI6ICJEZW1vLVNlbGZSZWdpc3RyYXRpb24iLCAiaWNvbiI6ICIxMjgvMTY5OC8xNjk4NTcyLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUmVnaXN0ZXIrSURWLVNhbmRib3giLCAidXJsIjogIkRlbW8tU2VsZlJlZ2lzdHJhdGlvblNhbmRib3giLCAiaWNvbiI6ICIxMjgvMTY5OC8xNjk4NTcyLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUmVtZW1iZXIgVXNlcm5hbWVzIiwgInVybCI6ICJEZW1vLVJlbWVtYmVyTXlVc2VybmFtZSIsICJpY29uIjogIjEyOC84ODkvODg5NjY4LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUGVlciBSZWNvdmVyeSIsICJ1cmwiOiAiRGVtby1SZWNvdmVyeSIsICJpY29uIjogIjEyOC8yNTk3LzI1OTcxNDMucG5nIiB9LAogIC8veyAibmFtZSI6ICJGaW5nZXJwcmludEpTIiwgInVybCI6ICJGaW5nZXJwcmludEpTIiwgImljb24iOiAiLzEyOC84MzM3LzgzMzc3MDIucG5nIiB9LAogIC8veyAibmFtZSI6ICJGaW5nZXJwcmludEpTIFBybyIsICJ1cmwiOiAiRmluZ2VycHJpbnRQcm9KUyIsICJpY29uIjogIi8xMjgvODMzNy84MzM3NzAyLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUmVzZXQgUGFzc3dvcmQiLCAidXJsIjogIlJlc2V0UGFzc3dvcmQiLCAiaWNvbiI6ICIxMjgvMTAwMC8xMDAwOTMzLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiU29jaWFsIExvZ2luIiwgInVybCI6ICJEZW1vLVNvY2lhbCIsICJpY29uIjogIjEyOC8zMDAvMzAwMjIxLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiU0FNTCIsICJ1cmwiOiAiRGVtby1TQU1MIiwgImljb24iOiAiMTI4LzI5LzI5NjExLnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiTUZBLU9BVEgiLCAidXJsIjogIkRlbW8tTUZBLU9BVEgiLCAiaWNvbiI6ICIxMjgvNzQ3Ni83NDc2Nzk2LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiTUZBLVB1c2giLCAidXJsIjogIkRlbW8tTUZBLVB1c2giLCAiaWNvbiI6ICIxMjgvNzQ3Ni83NDc2Nzk2LnBuZyIgfSwKICAvL3sgIm5hbWUiOiAiUGFzc3dvcmRsZXNzIiwgInVybCI6ICJEZW1vLU1GQS1QYXNzd2RsZXNzIiwgImljb24iOiAiMTI4LzI3NjcvMjc2NzE0Ni5wbmciIH0sICAKICAvL3sgIm5hbWUiOiAiTUZBLUNob2ljZSIsICJ1cmwiOiAiRGVtby1NRkEtQ2hvaWNlIiwgImljb24iOiAiMTI4Lzc0NzYvNzQ3Njc5Ni5wbmciIH0sCiAgLy97ICJuYW1lIjogIlByb2dyZXNzaXZlIFByb2ZpbGUiLCAidXJsIjogIlByb2dyZXNzaXZlUHJvZmlsZSIsICJpY29uIjogIjEyOC83MzE5LzczMTk1MDkucG5nIiB9LAogIC8veyAibmFtZSI6ICJBZ2UtQmFzZWQgTG9naW4iLCAidXJsIjogIkRlbW8tQWdlQmFzZWRMb2dpbiIsICJpY29uIjogIjEyOC8zMDgxLzMwODE5NjkucG5nIiB9LAogIC8veyAibmFtZSI6ICJNdWx0aSBCcmFuZCIsICJ1cmwiOiAiRGVtby1NdWx0aUJyYW5kIiwgImljb24iOiAiMTI4LzY5ODAvNjk4MDczNS5wbmciIH0sCiAgLy97ICJuYW1lIjogIkFudGkgRnJhdWQiLCAidXJsIjogIjEtRGVtby1DaG9vc2VyLUF1dG9BY2Nlc3MiLCAiaWNvbiI6ICIxMjgvMjg2Ny8yODY3NzI1LnBuZyIgfSwKICAKICAKXQoKCnZhciBJQ09OUyA9ICJodHRwczovL2Nkbi1pY29ucy1wbmcuZmxhdGljb24uY29tLyIKdmFyIFNJWkUgPSAiMjQiOwoKdmFyIGNzcyA9ICIqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfSAgLmNvbHVtbiB7IGZsb2F0OiBsZWZ0OyB3aWR0aDogNTAlOyBwYWRkaW5nOiAxMHB4OyB0ZXh0LWFsaWduOmxlZnQ7IH0gLnJvdzphZnRlciB7IGNvbnRlbnQ6IFwiXCI7IGRpc3BsYXk6IHRhYmxlOyBjbGVhcjogYm90aDsgfSAuYm94IHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgIGhlaWdodDogNjBweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBwYWRkaW5nOiAwIDEwcHg7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsgY29sb3I6IHJnYigwLCAwLCAwKTsgYm9yZGVyLWNvbG9yOiByZ2IoMCwgMCwgMCk7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci13aWR0aDoxcHg7IG1hcmdpbi1ib3R0b206IDJweDsgIH0gLmljb24geyBoZWlnaHQ6IDMycHg7IG1pbi13aWR0aDogMzJweDsgbWFyZ2luLXJpZ2h0OiAxMHB4OyB9IGE6aG92ZXIgeyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0iOwoKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKKQoKCndpdGgoZnIpIHsKICAgIHZhciBzY3JpcHQ7CiAgICBmdW5jdGlvbiBjcmVhdGVTY3JpcHQoKSB7CiAgICAgICAgICB2YXIgbGVmdCA9ICIiOwogICAgICAgIHZhciByaWdodCA9ICIiOwogICAgICAgICAgZm9yIChpIGluIGpvdXJuZXlzKSB7CiAgICAgICAgICAgIHZhciBlbGVtID0gJzxhIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tYmxvY2sgYm94XCIgaHJlZj1cImh0dHBzOi8vb3BlbmFtLXZvbGtlci1kZW1vLmZvcmdlYmxvY2tzLmNvbS9hbS9YVUk/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPScgKyBqb3VybmV5c1tpXVsidXJsIl0gKyAnXCI+PGltZyBjbGFzcz1cImljb25cIiBzcmM9XCInICsgSUNPTlMgKyBqb3VybmV5c1tpXVsiaWNvbiJdICsgJ1wiPjxzcGFuPicgKyBqb3VybmV5c1tpXVsibmFtZSJdICsgJzwvc3Bhbj48L2E+JzsKICAgICAgICAgICAgICBpZiAoaSAlIDIgPT0gMCkgCiAgICAgICAgICAgICAgICAgIGxlZnQgKz0gZWxlbTsKICAgICAgICAgICAgICBlbHNlIAogICAgICAgICAgICAgICAgICByaWdodCArPSBlbGVtOwogICAgICAgIH0KICAgICAgICByZXR1cm4gU3RyaW5nKCJkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSkuaW5uZXJIVE1MID0gJyIgKyBjc3MgKyAiJyBcblwKICAgICAgICAgICAgdmFyIGNob29zZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgXG5cCiAgICAgICAgICAgIGNob29zZXIuaWQgPSAnY2hvb3Nlcic7IFxuXAogICAgICAgICAgICB2YXIgY2IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FsbGJhY2tzUGFuZWwnKTsgXG5cCiAgICAgICAgICAgIGNiLmluc2VydEJlZm9yZShjaG9vc2VyLCBjYi5maXJzdENoaWxkKTsgXG5cCiAgICAgICAgICAgIGNob29zZXIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJyb3dcIj48ZGl2IGNsYXNzPVwiY29sdW1uXCI+IitsZWZ0KyI8L2Rpdj48ZGl2IGNsYXNzPVwiY29sdW1uXCI+IityaWdodCsiPC9kaXY+PC9kaXY+JyBcblwKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignYnV0dG9uW3R5cGU9c3VibWl0XScpKSB7IFxuXAogICAgICAgICAgICAgICAgdmFyIGIgPSBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvblt0eXBlPXN1Ym1pdF0nKTsgXG5cCiAgICAgICAgICAgICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbigpIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nob29zZXInKS5yZW1vdmUoKTsgIH0pOyBcblwKICAgICAgICAgICAgfSBcblwKICAgICAgICAiKTsKICAgIH0gIAogIAogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBBY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IFNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhjcmVhdGVTY3JpcHQoKSkKICAgICAgICApLmJ1aWxkKCkKICAgIH0gZWxzZSBhY3Rpb24gPSBBY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"d22f9a0c-426a-4466-b95e-d0f125b0d5fa\",\"name\":\"OAuth2 Access Token Modification Script\",\"description\":\"Default global script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"0ab1dc10-a54f-476f-ad07-2a04915cd443\",\"name\":\"wks-DisplayUserName\",\"description\":\"DisplayUserName\",\"script\":\"LyogRGlzcGxheSBVc2VybmFtZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBEaXNwbGF5IHRoZSB1c2VybmFtZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICB0cnkgewogICAgdmFyIG91dGNvbWUgPSAndHJ1ZSc7CiAgICB2YXIgdXNlcm5hbWUgPSBub2RlU3RhdGUuZ2V0KCd1c2VybmFtZScpLmFzU3RyaW5nKCk7CgogICAgLy8gU3BlY2lmeSB0aGUgbWVzc2FnZSB5b3Ugd2FudCB0byBkaXNwbGF5LiBZb3UgbWF5IHVzZSBIVE1MIGZvciBmb3JtYXR0aW5nLiBBdm9pZCBsaW5lIGJyZWFrcyEgVXNlIDxicj4gaW5zdGVhZC4KICAgIHZhciBtZXNzYWdlID0gJ1lvdXIgRW5jb3JlIHVzZXJuYW1lIGlzOjxoMyBzdHlsZT0iY29sb3I6IzI5NDhBNzsiPicrdXNlcm5hbWUrJzwvaDM+JzsKCiAgICB2YXIgYW5jaG9yID0gJ2FuY2hvci0nK2dlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKTsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4gXAogICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiBcCiAgICAgIGZ1bmN0aW9uIChlKSB7XG4gXAogICAgICAgIHZhciBtZXNzYWdlID0gZS5maXJzdEVsZW1lbnRDaGlsZDtcbiBcCiAgICAgICAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIithbmNob3IrIicpIHtcbiBcCiAgICAgICAgICBtZXNzYWdlLmlubmVySFRNTCA9ICciK21lc3NhZ2UrIic7XG4gXAogICAgICAgIH1cbiBcCiAgICAgIH0pIjsKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgICAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKICAgICkKICAgIGlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLnNlbmQoCiAgICAgICAgICAgIG5ldyBmci5UZXh0T3V0cHV0Q2FsbGJhY2soCiAgICAgICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgICAgICBhbmNob3IKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9CiAgICBlbHNlIHsKICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgIH0KICB9IGNhdGNoIChlcnJvcikgewogICAgbG9nZ2VyLmVycm9yKCdFcnJvcjogJyArIGVycm9yKTsKICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2Vycm9yJywgZXJyb3IubWVzc2FnZSk7CiAgfQoKICAgLyoKICAgICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAgICogCiAgICAqIEV4YW1wbGU6CiAgICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICAqLwogIGZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbihjKSB7CiAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkqMTB8MDsKICAgICAgICAgIHZhciB2ID0gcjsKICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDEwKTsKICAgICAgfSk7CiAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"9674f7d1-7448-4544-879e-91587bb04f46\",\"name\":\"Get esv admin token\",\"description\":\"Get esc admin token\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwp2YXIgYWRtaW5Ub2tlbiA9ICBzeXN0ZW1FbnYuZ2V0UHJvcGVydHkoImVzdi5hZG1pbi50b2tlbiIpOwpzaGFyZWRTdGF0ZS5wdXQoJ2FkbWluVG9rZW4nLCBhZG1pblRva2VuKTsKb3V0Y29tZSA9ICJ0cnVlIjs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c0413dae-fdd1-45b7-9302-61d6ae02b194\",\"name\":\"FR-Debug\",\"description\":\"Debug to show AM States\",\"script\":\"LyogRElTQ0xBSU1FUjogVGhpcyBjb2RlIGlzIHByb3ZpZGVkIHRvIHlvdSBleHByZXNzbHkgYXMgYW4gZXhhbXBsZSAgKOKAnFNhbXBsZSBDb2Rl4oCdKS4gSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBpbmRpdmlkdWFsIHJlY2lwaWVudCB1c2VyLCBpbiBoaXMvaGVyIHNvbGUgZGlzY3JldGlvbiwgdG8gZGlsaWdlbmNlIHN1Y2ggU2FtcGxlIENvZGUgZm9yIGFjY3VyYWN5LCBjb21wbGV0ZW5lc3MsIHNlY3VyaXR5LCBhbmQgZmluYWwgZGV0ZXJtaW5hdGlvbiBmb3IgYXBwcm9wcmlhdGVuZXNzIG9mIHVzZS4gCiAqIEFOWSBTQU1QTEUgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiDigJxBUyBJU+KAnSBJUyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gRk9SR0VST0NLIEFORCBJVFMgTElDRU5TT1JTIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUywgIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCwgT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTICBPRiBNRVJDSEFOVEFCSUxJVFksIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogKiBGT1JHRVJPQ0sgU0hBTEwgTk9UIEhBVkUgQU5ZIExJQUJJTElUWSBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBBTlkgVVNFLCBJTVBMRU1FTlRBVElPTiwgSU5URUdSQVRJT04sIE9SIENPTkZJR1VSQVRJT04gT0YgQU5ZIFNBTVBMRSBDT0RFIElOIEFOWSBQUk9EVUNUSU9OIEVOVklST05NRU5UIE9SIEZPUiBBTlkgQ09NTUVSQ0lBTCBERVBMT1lNRU5UKFMpLgogKgogKiBTY3JpcHQgTmFtZTogQU0gSm91cm5leSBUZW1wbGF0ZQogKgogKiBBdXRob3JzOiBzZUBmb3JnZXJvY2suY29tCiAqIAogKiBUaGlzIHNjcmlwdCBzaG93cyBhIGRlZmF1bHQgdGVtcGxhdGUgb24gaG93IHlvdXIgU2NyaXB0aW5nIERlY2lzaW9uIE5vZGUgc2NyaXB0cyBzaG91bGQgYmUgd3JpdHRlbi4KICogSXQgc2hvd3MgeW91IGhvdyB0byB3b3JrIHdpdGggc2hhcmVkU3RhdGUsIHRyYW5zaWVudFN0YXRlLCBzZWN1cmVTdGF0ZS4KICogVGhpcyBpcyBhIGdyZWF0IGRlYnVnIHNjcmlwdCB0byB1c2UgaW4gYW5kIG9mIGl0c2VsZiBhcyBpdCB3aWxsIGRpc3BsYXkgYWxsIHRocmVlIHN0YXRlcyBtZW50aW9uZWQgYWJvdmUgaW4gYSBmb3JtYXR0ZWQgdGFibGUKICogCiAqIFRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCBub3Qgd29yayBwcm9wZXJseSBhcyBpcy4gCiAqIEl0IHJlcXVpcmVzIHNvbWUgbm9kZXMgdGhhdCBzZXQgYXQgbGVhc3Qgc2hhcmVkU3RhdGUgYmVmb3JlIGl0IGNhbiBvcGVyYXRlLgogKiBGb3IgZXhhbXBsZSwgc2V0IGEgcGFnZSBub2RlIHdpdGggUGxhdGZvcm0gVXNlcm5hbWUgYW5kIFBsYXRmb3JtIFBhc3N3b3JkIG5vZGVzCiAqIAogKiBUaGlzIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKKi8KCi8vIERvIGV2ZXJ5dGhpbmcgaW4gYSBzZWxmLWludm9raW5nIGZ1bmN0aW9uIGFuZCBkbyBub3Qgd3JpdGUgY29kZSBvdXRzaWRlIG9mIGEgZnVuY3Rpb24gb3IgeW91IHdpbGwgcGF5IGRlYXJseS4gCi8vIFRoaXMgaXMgYmVjYXVzZSBvZiB0b3AtbGV2ZWwgc2NvcGluZy93aGl0ZWxpc3RpbmcvZXRjIGlzc3VlcyB0aGF0IGdpdmUgeW91ICd1bmRlZmluZWQnIGVycm9ycy4KKGZ1bmN0aW9uICgpIHsKICBsb2dnZXIubWVzc2FnZSgiU2NyaXB0OiBzdGFydCIpOyAvLyBiZWdpbmcgb2Ygc2NyaXB0IG1haW4KICBvdXRjb21lID0gInRydWUiOyAvLyA8LSBmaWxsIGluIGRlZmF1bHQgb3V0Y29tZSBoZXJlIGFuZCBpdCBzaG91bGQgbWF0Y2ggYSAiU2NyaXB0IE91dGNvbWVzIiBzZXR0aW5nIG9uIHRoaXMgbm9kZSBpdHNlbGYKCiAgLy8gYnVpbGQgb3V0cHV0IGh0bWwgdGFibGUgdGhhdCB3aWxsIGJlIHNlbnQgYmFjayB0byBicm93c2VyCiAgdmFyIG91dHB1dCA9IGNyZWF0ZUh0bWwoKTsKCiAgLy8gaXNzdWUgY2FsbGJhY2sgdG8gYnJvd3NlciBhZnRlciBvdXRwdXQgaHRtbCBpcyBidWlsdCBmcm9tIGNyZWF0ZUh0bWwoKSBmdW5jdGlvbgogIGRpc3BsYXlNZXNzYWdlKG91dHB1dCk7CiAgCiAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmlwdDogZW5kIik7IC8vIGVuZCBvZiBzY3JpcHQgbWFpbgoKICAvKgogICogUHV0IGZ1bmN0aW9ucyBiZWxvdyBoZXJlCiAgKi8KICBmdW5jdGlvbiBjcmVhdGVIdG1sKCkgewogICAgICB2YXIgaHRtbCA9ICI8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkXCI+IjsKICAgICAgaHRtbCArPSAiPHRoZWFkIGNsYXNzPVwidGhlYWQtZGFya1wiPjx0cj48dGggY2xhc3M9XCJweC0xIHB5LTFcIiBjb2xzcGFuPVwiMlwiPlNoYXJlZCBTdGF0ZSBWYXJpYWJsZXMgKHNoYXJlZFN0YXRlLmdldCk8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAvLyBnZXQgYWxsIHRoZSBrZXlzIGluIG5vZGVTdGF0ZQogICAgICB2YXIgaXRlcmF0b3IgPSBub2RlU3RhdGUua2V5cygpLml0ZXJhdG9yKCk7CiAgICAgIHZhciBzdGF0ZUtleXMgPSBbXTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgc3RhdGVLZXlzLnB1c2goaXRlcmF0b3IubmV4dCgpLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICAgIHN0YXRlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZUtleSkgewogICAgICAgIGlmIChzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpIAogICAgICAgICAgICAmJiBzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpLnRvU3RyaW5nKCkgIT09ICJudWxsIgogICAgICAgICAgICAmJiBzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpLnRvU3RyaW5nKCkgIT09ICIiCiAgICAgICAgICAgICYmICIiK3N0YXRlS2V5ICE9PSAib2JqZWN0QXR0cmlidXRlcyIgIC8vIGdvaW5nIHRvIHB1bGwgb3V0IG9iamVjdEF0dHJpYnV0ZXMgbGF0ZXIKICAgICAgICAgICAgJiYgIiIrc3RhdGVLZXkgIT09ICJwYWdlTm9kZUNhbGxiYWNrcyIpIC8vcGFnZU5vZGVDYWxsYmFja3MgYXJlIGludGVybmFsIHRvIHRoZSBQYWdlIE5vZGUgYW5kIG5vdCBuZWVkZWQvdXNlZCAgCiAgICAgICAgewogICAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBzdGF0ZUtleSArICI8L3RkPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBzaGFyZWRTdGF0ZS5nZXQoc3RhdGVLZXkpICsgIjwvdGQ+PC90cj4iOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGh0bWwgKz0gIjwvdGFibGU+IjsKCiAgICAgIGh0bWwgKz0gIjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWRcIj4iOwogICAgICAKICAgICAgaHRtbCArPSAiPHRoZWFkIGNsYXNzPVwidGhlYWQtZGFya1wiPjx0cj48dGggY2xhc3M9XCJweC0xIHB5LTFcIiBjb2xzcGFuPVwiMlwiPlRyYW5zaWVudCBTdGF0ZSBWYXJpYWJsZXMgKHRyYW5zaWVudFN0YXRlLmdldCk8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAvLyBnZXQgYWxsIHRoZSBrZXlzIGluIG5vZGVTdGF0ZQogICAgICB2YXIgaXRlcmF0b3IgPSBub2RlU3RhdGUua2V5cygpLml0ZXJhdG9yKCk7CiAgICAgIHZhciBzdGF0ZUtleXMgPSBbXTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgc3RhdGVLZXlzLnB1c2goaXRlcmF0b3IubmV4dCgpLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICAgIHN0YXRlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZUtleSkgewogICAgICAgIGlmICh0cmFuc2llbnRTdGF0ZS5nZXQoc3RhdGVLZXkpIAogICAgICAgICAgICAmJiB0cmFuc2llbnRTdGF0ZS5nZXQoc3RhdGVLZXkpLnRvU3RyaW5nKCkgIT09ICJudWxsIiAKICAgICAgICAgICAgJiYgdHJhbnNpZW50U3RhdGUuZ2V0KHN0YXRlS2V5KS50b1N0cmluZygpICE9PSAiIgogICAgICAgICAgICAmJiAiIitzdGF0ZUtleSAhPT0gIm9iamVjdEF0dHJpYnV0ZXMiKSAKICAgICAgICB7CiAgICAgICAgICBodG1sICs9ICI8dHI+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIHN0YXRlS2V5ICsgIjwvdGQ+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIHRyYW5zaWVudFN0YXRlLmdldChzdGF0ZUtleSkgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwoKICAgICAgaHRtbCArPSAiPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPiI7CiAgICAgIC8vIEJ1aWxkIHRoZSB0YWJsZSBvZiBvYmplY3RBdHRyaWJ1dGVzIGluIHNoYXJlZFN0YXRlCiAgICAgIGlmIChzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKSkKICAgICAgeyAgIAogICAgICAgIGh0bWwgKz0gIjx0aGVhZCBjbGFzcz1cInRoZWFkLWRhcmtcIj48dHI+PHRoIGNsYXNzPVwicHgtMSBweS0xXCIgY29sc3Bhbj1cIjJcIj5TaGFyZWQgT2JqZWN0IEF0dHJpYnV0ZXMgKHNoYXJlZFN0YXRlLmdldCk8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAgIHZhciBlbnRyaWVzID0gc2hhcmVkU3RhdGUuZ2V0KCdvYmplY3RBdHRyaWJ1dGVzJykuZW50cnlTZXQoKS50b0FycmF5KCk7CiAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkgeyAvLyBzaG93aW5nIGhvdyB0byB1c2UgZW50cnlTZXQoKS4gQ2FuIHVzZSBrZXlTZXQoKS4KICAgICAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBlbnRyeS5nZXRLZXkoKSArICI8L3RkPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBlbnRyeS5nZXRWYWx1ZSgpICsgIjwvdGQ+PC90cj4iOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGh0bWwgKz0gIjx0cj48dGQgY29sc3Bhbj1cIjJcIj5FTVBUWTwvdGQ+PC90cj4iOwogICAgICB9CiAgICAgIGh0bWwgKz0gIjwvdGFibGU+IjsKCiAgICAgIGh0bWwgKz0gIjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWRcIj4iOwogICAgICAvLyBCdWlsZCB0aGUgdGFibGUgb2Ygb2JqZWN0QXR0cmlidXRlcyBpbiB0cmFuc2llbnRTdGF0ZQogICAgICBpZiAodHJhbnNpZW50U3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikpCiAgICAgIHsKICAgICAgICBodG1sICs9ICI8dGhlYWQgY2xhc3M9XCJ0aGVhZC1kYXJrXCI+PHRyPjx0aCBjbGFzcz1cInB4LTEgcHktMVwiIGNvbHNwYW49XCIyXCI+VHJhbnNpZW50IE9iamVjdCBBdHRyaWJ1dGVzICh0cmFuc2llbnRTdGF0ZS5nZXQpPC90aD48L3RyPjwvdGhlYWQ+IjsKICAgICAgICB2YXIga2V5cyA9IHRyYW5zaWVudFN0YXRlLmdldCgnb2JqZWN0QXR0cmlidXRlcycpLmtleVNldCgpLnRvQXJyYXkoKTsKICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyAvLyBzaG93aW5nIGhvdyB0byB1c2Uga2V5U2V0KCkuIENhbiB1c2UgZW50cnlTZXQoKS4KICAgICAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjbGFzcz1cInB4LTEgcHktMVwiPiIgKyBrZXkgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgdHJhbnNpZW50U3RhdGUuZ2V0KCdvYmplY3RBdHRyaWJ1dGVzJykuZ2V0KGtleSkgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgaHRtbCArPSAiPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPkVNUFRZPC90ZD48L3RyPiI7CiAgICAgIH0KICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwoKICAgICAgaHRtbCArPSAiPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPiI7CiAgICAgIGh0bWwgKz0gIjx0aGVhZCBjbGFzcz1cInRoZWFkLWRhcmtcIj48dHI+PHRoIGNsYXNzPVwicHgtMSBweS0xXCIgY29sc3Bhbj1cIjJcIj5ub2RlU3RhdGUuZ2V0ICh0cmFuc2llbnRTdGF0ZSwgc2VjdXJlU3RhdGUsIHNoYXJlZFN0YXRlKTwvdGg+PC90cj48L3RoZWFkPiI7CiAgICAgIC8vIGdldCBhbGwgdGhlIGtleXMgaW4gbm9kZVN0YXRlCiAgICAgIHZhciBpdGVyYXRvciA9IG5vZGVTdGF0ZS5rZXlzKCkuaXRlcmF0b3IoKTsKICAgICAgdmFyIHN0YXRlS2V5cyA9IFtdOwogICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7CiAgICAgICAgICBzdGF0ZUtleXMucHVzaChpdGVyYXRvci5uZXh0KCkudG9TdHJpbmcoKSk7CiAgICAgIH0KICAgICAgc3RhdGVLZXlzLmZvckVhY2goZnVuY3Rpb24gKHN0YXRlS2V5KSB7CiAgICAgICAgaWYgKG5vZGVTdGF0ZS5nZXQoc3RhdGVLZXkpIAogICAgICAgICAgICAmJiBub2RlU3RhdGUuZ2V0KHN0YXRlS2V5KS50b1N0cmluZygpICE9PSAibnVsbCIKICAgICAgICAgICAgJiYgbm9kZVN0YXRlLmdldChzdGF0ZUtleSkudG9TdHJpbmcoKSAhPT0gIiIKICAgICAgICAgICAgJiYgIiIrc3RhdGVLZXkgIT09ICJwYWdlTm9kZUNhbGxiYWNrcyIpIC8vcGFnZU5vZGVDYWxsYmFja3MgYXJlIGludGVybmFsIHRvIHRoZSBQYWdlIE5vZGUgYW5kIG5vdCBuZWVkZWQvdXNlZCAgCgogICAgICAgIHsKICAgICAgICAgIGh0bWwgKz0gIjx0cj48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgc3RhdGVLZXkgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgbm9kZVN0YXRlLmdldChzdGF0ZUtleSkgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwoKCiAgICAgIGh0bWwgKz0gIjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWRcIj4iOwogICAgICAvLyBsb29raW5nIGZvciBhIHdheSB0byBidWlsZCB0aGlzIEFNIFVzZXIgUHJvZmlsZSBsaXN0IGR5bmFtaWNhbGx5CiAgICAgIHZhciBvYmpBTUF0dHJzID0gWwogICAgICAgICJ1aWQiLAogICAgICAgICJjbiIsCiAgICAgICAgImluZXRVc2VyU3RhdHVzIiwKICAgICAgICAiZ2l2ZW5OYW1lIiwKICAgICAgICAic24iLAogICAgICAgICJtYWlsIiwKICAgICAgICAiZGVzY3JpcHRpb24iLAogICAgICAgICJ0ZWxlcGhvbmVOdW1iZXIiLAogICAgICAgICJzdHJlZXQiLAogICAgICAgICJsIiwKICAgICAgICAicG9zdGFsQ29kZSIsCiAgICAgICAgImNvIiwKICAgICAgICAic3QiLAogICAgICAgICJkaXNwbGF5TmFtZSIsCiAgICAgICAgImZyLWF0dHItaXN0cjEiLAogICAgICAgICJmci1hdHRyLWlzdHIyIiwKICAgICAgICAiZnItYXR0ci1pc3RyMyIsCiAgICAgICAgImZyLWF0dHItaXN0cjQiLAogICAgICAgICJmci1hdHRyLWlzdHI1IiwKICAgICAgICAiZnItYXR0ci1zdHIxIiwKICAgICAgICAiZnItYXR0ci1zdHIyIiwKICAgICAgICAiZnItYXR0ci1zdHIzIiwKICAgICAgICAiZnItYXR0ci1zdHI0IiwKICAgICAgICAiZnItYXR0ci1zdHI1IiwKICAgICAgICAiZnItYXR0ci1pbXVsdGkxIiwKICAgICAgICAiZnItYXR0ci1pbXVsdGkyIiwKICAgICAgICAiZnItYXR0ci1pbXVsdGkzIiwKICAgICAgICAiZnItYXR0ci1pbXVsdGk0IiwKICAgICAgICAiZnItYXR0ci1pbXVsdGk1IiwKICAgICAgICAiZnItYXR0ci1tdWx0aTEiLAogICAgICAgICJmci1hdHRyLW11bHRpMiIsCiAgICAgICAgImZyLWF0dHItbXVsdGkzIiwKICAgICAgICAiZnItYXR0ci1tdWx0aTQiLAogICAgICAgICJmci1hdHRyLW11bHRpNSIsCiAgICAgICAgImZyLWF0dHItaWRhdGUxIiwKICAgICAgICAiZnItYXR0ci1pZGF0ZTIiLAogICAgICAgICJmci1hdHRyLWlkYXRlMyIsCiAgICAgICAgImZyLWF0dHItaWRhdGU0IiwKICAgICAgICAiZnItYXR0ci1pZGF0ZTUiLAogICAgICAgICJmci1hdHRyLWRhdGUxIiwKICAgICAgICAiZnItYXR0ci1kYXRlMiIsCiAgICAgICAgImZyLWF0dHItZGF0ZTMiLAogICAgICAgICJmci1hdHRyLWRhdGU0IiwKICAgICAgICAiZnItYXR0ci1kYXRlNSIsCiAgICAgICAgImZyLWF0dHItaWludDEiLAogICAgICAgICJmci1hdHRyLWlpbnQyIiwKICAgICAgICAiZnItYXR0ci1paW50MyIsCiAgICAgICAgImZyLWF0dHItaWludDQiLAogICAgICAgICJmci1hdHRyLWlpbnQ1IiwKICAgICAgICAiZnItYXR0ci1pbnQxIiwKICAgICAgICAiZnItYXR0ci1pbnQyIiwKICAgICAgICAiZnItYXR0ci1pbnQzIiwKICAgICAgICAiZnItYXR0ci1pbnQ0IiwKICAgICAgICAiZnItYXR0ci1pbnQ1IgogICAgICBdOyAgCgogICAgICAvLyBCdWlsZCB0aGUgdGFibGUgb2YgaWRSZXBvc2l0b3J5IGJpbmRpbmcKICAgICAgdmFyIGF0dHJzMjsKICAgICAgaWYgKHNoYXJlZFN0YXRlLmdldCgiX2lkIikgJiYgaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpLCAidWlkIikpCiAgICAgIHsKICAgICAgICBodG1sICs9ICI8dGhlYWQgY2xhc3M9XCJ0aGVhZC1kYXJrXCI+PHRyPjx0aCBjbGFzcz1cInB4LTEgcHktMVwiIGNvbHNwYW49XCIyXCI+aWRSZXBvc2l0b3J5IEFNIFVzZXIgUHJvZmlsZTwvdGg+PC90cj48L3RoZWFkPiI7ICAgICAgICAKICAgICAgICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwogICAgICAgIG9iakFNQXR0cnMuZm9yRWFjaChmdW5jdGlvbiAoYXR0cikgewogICAgICAgICAgYXR0cnMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCBhdHRyKTsgIAogICAgICAgICAgaWYgKGF0dHJzICYmICIiK2F0dHJzICE9PSAibnVsbCIgJiYgIiIrYXR0cnMgIT09ICIiICYmICIiK2F0dHJzLnNpemUoKT4wKXsKICAgICAgICAgICAgaWYgKGF0dHJzLnNpemUoKT09PTEpewogICAgICAgICAgICAgICAgYXR0cnMgPSBzaW5nbGVWYWx1ZShhdHRycyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBodG1sICs9ICI8dHI+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIGF0dHIgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgYXR0cnMgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgICB9CiAgICAgICAgfSk7ICAgICAgCiAgICAgIH0KICAgICAgaHRtbCArPSAiPC90YWJsZT4iOwogICAgICAKICAgICAgaHRtbCArPSAiPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPiI7CiAgICAgIGh0bWwgKz0gIjx0aGVhZCBjbGFzcz1cInRoZWFkLWRhcmtcIj48dHI+PHRoIGNsYXNzPVwicHgtMSBweS0xXCIgY29sc3Bhbj1cIjJcIj5SZXF1ZXN0IEhlYWRlcnM8L3RoPjwvdHI+PC90aGVhZD4iOwogICAgICAvL2h0bWwgKz0gIjx0cj48dGQgY29sc3Bhbj1cIjJcIj4iICsgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSArICI8L3RkPjwvdHI+IjsKICAgICAgdmFyIHJIZWFkZXJzID0gU3RyaW5nKHJlcXVlc3RIZWFkZXJzKS5zcGxpdCgnXSwgJykubWFwKGZ1bmN0aW9uIChoZWFkZXIpewogICAgICAgIHJldHVybiBoZWFkZXIuc3BsaXQoJz0nKVswXS5yZXBsYWNlKCd7JywnJykucmVwbGFjZSgnfScsJycpOyAKICAgICAgfSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICBySGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChoZWFkZXJOYW1lKSB7CiAgICAgICAgdmFyIGhlYWRlciA9IHJlcXVlc3RIZWFkZXJzLmdldChoZWFkZXJOYW1lKTsKICAgICAgICBodG1sICs9ICI8dHI+PHRkIGNsYXNzPVwicHgtMSBweS0xXCI+IiArIGhlYWRlck5hbWUgKyAiPC90ZD48dGQgY2xhc3M9XCJweC0xIHB5LTFcIj4iICsgaGVhZGVyLmdldCgwKSArICI8L3RkPjwvdHI+IjsKICAgICAgfSk7ICAgIAogICAgCiAgICBodG1sICs9ICI8L3RhYmxlPiI7CiAgICAgIAogICAgcmV0dXJuIGh0bWw7CiAgfQogIAogIC8vYnVpbGRzIHRoZSBodG1sIHRvIGRpc3BsYXkgdGhlIG1lc3NhZ2UgaW4gdGhlIGJyb3dzZXIgb24gdGhlIGNhbGxiYWNrCiAgLy91c2UgdmlldyBzb3VyY2UgaW4gYnJvd3NlciBhbmQgbG9vayBmb3IgY2xhc3M9ImNhbGxiYWNrLWNvbXBvbmVudCIgdG8gc2VlIGh0bWwgcmVzcG9uc2UKICBmdW5jdGlvbiBkaXNwbGF5TWVzc2FnZShtZXNzYWdlKSB7CiAgICAgIHZhciBhbmNob3IgPSAiYW5jaG9yLSIuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CiAgICAgIHZhciBoYWxpZ24gPSAibGVmdCI7CiAgICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4iLmNvbmNhdCgKICAgICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAgICAgICAgICAgICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAgICAgICAgICAgICAgICAgIiAgdmFyIG1lc3NhZ2UgPSBlLmZpcnN0RWxlbWVudENoaWxkO1xuIikuY29uY2F0KAogICAgICAgICAgICAgICAgICAgICAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwiXCI7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgbWVzc2FnZS5zdHlsZSA9IFwiXCI7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIG1lc3NhZ2UuYWxpZ24gPSBcIiIpLmNvbmNhdChoYWxpZ24pLmNvbmNhdCgiXCI7XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBtZXNzYWdlLmlubmVySFRNTCA9ICciKS5jb25jYXQobWVzc2FnZSkuY29uY2F0KCInO1xuIikuY29uY2F0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICB9XG4iKS5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSkiKQogICAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suVGV4dE91dHB1dENhbGxiYWNrLAogICAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICAgICkKICAgICAgaWYgKG1lc3NhZ2UubGVuZ3RoICYmIGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKAogICAgICAgICAgICAgIG5ldyBmci5UZXh0T3V0cHV0Q2FsbGJhY2soCiAgICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgICAgYW5jaG9yCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkKICAgICAgICAgICkuYnVpbGQoKQogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8ob3V0Y29tZSkuYnVpbGQoKTsKICAgICAgfQogIH0KCiAgLyoKICAgKiBHZW5lcmF0ZSBhIHRva2VuIGluIHRoZSBkZXNpcmVkIGZvcm1hdC4gQWxsICd4JyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHJhbmRvbSBudW1iZXIgMC05LgogICAqIFRoaXMgaXMgbmVlZGVkIHRvIGhhdmUgYSB1bmlxdWUgZGl2KGFuY2hvci14KSBvbiB0aGUgaHRtbCBjYWxsYmFjayB0aGF0IHdlIGNhbiBwb3B1bGF0ZSBkYXRhCiAgICogRXhhbXBsZToKICAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICovCiAgZnVuY3Rpb24gZ2VuZXJhdGVOdW1lcmljVG9rZW4oZm9ybWF0KSB7CiAgICAgIHJldHVybiBmb3JtYXQucmVwbGFjZSgvW3hdL2csIGZ1bmN0aW9uIChjKSB7CiAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxMCB8IDA7CiAgICAgICAgICB2YXIgdiA9IHI7CiAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICAgIH0pOwogIH0KCiAgLy8gZ2V0IGEgc2luZ2xlVmFsdWUgZnJvbSBhIEhhc2hTZXQKICBmdW5jdGlvbiBzaW5nbGVWYWx1ZSh4KQogIHsKICAgIGlmKHguc2l6ZSgpPjApCiAgICAgIHsKICAgICAgICByZXR1cm4geC5pdGVyYXRvcigpLm5leHQoKTsKICAgICAgfQogICAgICAKICAgIHJldHVybiAiIjsKICAgIAogIH0KCn0oKSk7IC8vIHNlbGYtaW52b2tpbmcgZnVuY3Rpb24=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"10643e95-873a-4ec0-b713-a7f56760d179\",\"name\":\"FrodoTestScript4\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"0414eed8-abfd-43bb-94b5-c841a8ba2c98\",\"name\":\"pushBomb.js\",\"description\":\"null\",\"script\":\"dmFyIGF0dHJpYnV0ZSA9ICJmci1hdHRyLXN0cjIiOwp2YXIgdGhyZXNob2xkID0gMjsKb3V0Y29tZSA9ICJkZWZhdWx0IjsKdmFyIG5vdyA9IG5ldyBEYXRlKCkgIAp2YXIgZXBvY2ggPSBNYXRoLnJvdW5kKG5vdy5nZXRUaW1lKCkgLyAxMDAwKTsKdmFyIGVwb2NoQ3VycmVudE1pbnV0ZSA9IE1hdGgucm91bmQoZXBvY2gvNjApOwoKdmFyIHVzZXJBdHRyOwp2YXIgX2lkID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKdmFyIGVwb2NoQXR0ck1pbnV0ZT0wOwp2YXIgYXR0ZW1wdENvdW50PTE7Cgp2YXIgdXNlclByZWZlcmVuY2VzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShfaWQsICJmci1pZG0tcHJlZmVyZW5jZXMiKS50b1N0cmluZygpOwoKaWYodXNlclByZWZlcmVuY2VzLmluZGV4T2YoIlwiY3VzdG9tX3B1c2hcIjp0cnVlIikgPiAtMSkKewogICAgb3V0Y29tZSA9ICJzdXNwZW5kZWQiOwp9CmVsc2UKewogIHZhciB1c2VyQXR0clJhdyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoX2lkLCBhdHRyaWJ1dGUpOwogIGlmICh1c2VyQXR0clJhdyAmJiB1c2VyQXR0clJhdy5pdGVyYXRvcigpLmhhc05leHQoKSkgewogICAgICB1c2VyQXR0ciA9IEpTT04ucGFyc2UodXNlckF0dHJSYXcuaXRlcmF0b3IoKS5uZXh0KCkudG9TdHJpbmcoKSk7CiAgICAgIGVwb2NoQXR0ck1pbnV0ZSA9IHVzZXJBdHRyWzBdOwogICAgICBhdHRlbXB0Q291bnQgPSB1c2VyQXR0clsxXTsKICAgICAgYXR0ZW1wdENvdW50ID0gYXR0ZW1wdENvdW50ICsgMTsKICB9CgogIC8vaWYoCgogIHZhciBuZXdBdHRyOwogIGlmKGVwb2NoQ3VycmVudE1pbnV0ZT09ZXBvY2hBdHRyTWludXRlKSB7CiAgICAgIG5ld0F0dHIgPSBTdHJpbmcoIlsiICsgZXBvY2hBdHRyTWludXRlLnRvU3RyaW5nKCkgKyAiLCIgKyBhdHRlbXB0Q291bnQudG9TdHJpbmcoKSAgKyAiXSIpOwogIH0KICBlbHNlIHsKICAgICAgYXR0ZW1wdENvdW50PTE7CiAgICAgIG5ld0F0dHIgPSBTdHJpbmcoIlsiICsgZXBvY2hDdXJyZW50TWludXRlLnRvU3RyaW5nKCkgKyAiLCIgKyBhdHRlbXB0Q291bnQudG9TdHJpbmcoKSArICJdIik7CiAgfQogIGlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoX2lkLCAiZnItYXR0ci1zdHIyIixbbmV3QXR0cl0pOwoKICBpZihhdHRlbXB0Q291bnQ+dGhyZXNob2xkKSB7CiAgICBvdXRjb21lID0gInRydWUiOwogIH0KICBlbHNlIHsKICAgIG91dGNvbWUgPSAiZmFsc2UiOwogIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"157298c0-7d31-4059-a95b-eeb08473b7e5\",\"name\":\"Device Id (Match) - Client Side\",\"description\":\"Default global script for client side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGZvbnREZXRlY3RvciA9IChmdW5jdGlvbiAoKSB7CiAgICAvKioKICAgICAqIEphdmFTY3JpcHQgY29kZSB0byBkZXRlY3QgYXZhaWxhYmxlIGF2YWlsYWJpbGl0eSBvZiBhCiAgICAgKiBwYXJ0aWN1bGFyIGZvbnQgaW4gYSBicm93c2VyIHVzaW5nIEphdmFTY3JpcHQgYW5kIENTUy4KICAgICAqCiAgICAgKiBBdXRob3IgOiBMYWxpdCBQYXRlbAogICAgICogV2Vic2l0ZTogaHR0cDovL3d3dy5sYWxpdC5vcmcvbGFiL2phdmFzY3JpcHQtY3NzLWZvbnQtZGV0ZWN0LwogICAgICogTGljZW5zZTogQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wCiAgICAgKiAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAgICAqIFZlcnNpb246IDAuMTUgKDIxIFNlcCAyMDA5KQogICAgICogICAgICAgICAgQ2hhbmdlZCBjb21wYXJpc2lvbiBmb250IHRvIGRlZmF1bHQgZnJvbSBzYW5zLWRlZmF1bHQtZGVmYXVsdCwKICAgICAqICAgICAgICAgIGFzIGluIEZGMy4wIGZvbnQgb2YgY2hpbGQgZWxlbWVudCBkaWRuJ3QgZmFsbGJhY2sKICAgICAqICAgICAgICAgIHRvIHBhcmVudCBlbGVtZW50IGlmIHRoZSBmb250IGlzIG1pc3NpbmcuCiAgICAgKiBWZXJzaW9uOiAwLjIgKDA0IE1hciAyMDEyKQogICAgICogICAgICAgICAgQ29tcGFyaW5nIGZvbnQgYWdhaW5zdCBhbGwgdGhlIDMgZ2VuZXJpYyBmb250IGZhbWlsaWVzIGllLAogICAgICogICAgICAgICAgJ21vbm9zcGFjZScsICdzYW5zLXNlcmlmJyBhbmQgJ3NhbnMnLiBJZiBpdCBkb2Vzbid0IG1hdGNoIGFsbCAzCiAgICAgKiAgICAgICAgICB0aGVuIHRoYXQgZm9udCBpcyAxMDAlIG5vdCBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbQogICAgICogVmVyc2lvbjogMC4zICgyNCBNYXIgMjAxMikKICAgICAqICAgICAgICAgIFJlcGxhY2VkIHNhbnMgd2l0aCBzZXJpZiBpbiB0aGUgbGlzdCBvZiBiYXNlRm9udHMKICAgICAqLwogICAgLyoKICAgICAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMgRm9yZ2VSb2NrIEFTLgogICAgICovCiAgICB2YXIgZGV0ZWN0b3IgPSB7fSwgYmFzZUZvbnRzLCB0ZXN0U3RyaW5nLCB0ZXN0U2l6ZSwgaCwgcywgZGVmYXVsdFdpZHRoID0ge30sIGRlZmF1bHRIZWlnaHQgPSB7fSwgaW5kZXg7CgogICAgLy8gYSBmb250IHdpbGwgYmUgY29tcGFyZWQgYWdhaW5zdCBhbGwgdGhlIHRocmVlIGRlZmF1bHQgZm9udHMuCiAgICAvLyBhbmQgaWYgaXQgZG9lc24ndCBtYXRjaCBhbGwgMyB0aGVuIHRoYXQgZm9udCBpcyBub3QgYXZhaWxhYmxlLgogICAgYmFzZUZvbnRzID0gWydtb25vc3BhY2UnLCAnc2Fucy1zZXJpZicsICdzZXJpZiddOwoKICAgIC8vd2UgdXNlIG0gb3IgdyBiZWNhdXNlIHRoZXNlIHR3byBjaGFyYWN0ZXJzIHRha2UgdXAgdGhlIG1heGltdW0gd2lkdGguCiAgICAvLyBBbmQgd2UgdXNlIGEgTExpIHNvIHRoYXQgdGhlIHNhbWUgbWF0Y2hpbmcgZm9udHMgY2FuIGdldCBzZXBhcmF0ZWQKICAgIHRlc3RTdHJpbmcgPSAibW1tbW1tbW1tbWxsaSI7CgogICAgLy93ZSB0ZXN0IHVzaW5nIDcycHggZm9udCBzaXplLCB3ZSBtYXkgdXNlIGFueSBzaXplLiBJIGd1ZXNzIGxhcmdlciB0aGUgYmV0dGVyLgogICAgdGVzdFNpemUgPSAnNzJweCc7CgogICAgaCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07CgogICAgLy8gY3JlYXRlIGEgU1BBTiBpbiB0aGUgZG9jdW1lbnQgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgdGV4dCB3ZSB1c2UgdG8gdGVzdAogICAgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIHMuc3R5bGUuZm9udFNpemUgPSB0ZXN0U2l6ZTsKICAgIHMuaW5uZXJIVE1MID0gdGVzdFN0cmluZzsKICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHQgd2lkdGggZm9yIHRoZSB0aHJlZSBiYXNlIGZvbnRzCiAgICAgICAgcy5zdHlsZS5mb250RmFtaWx5ID0gYmFzZUZvbnRzW2luZGV4XTsKICAgICAgICBoLmFwcGVuZENoaWxkKHMpOwogICAgICAgIGRlZmF1bHRXaWR0aFtiYXNlRm9udHNbaW5kZXhdXSA9IHMub2Zmc2V0V2lkdGg7IC8vd2lkdGggZm9yIHRoZSBkZWZhdWx0IGZvbnQKICAgICAgICBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dID0gcy5vZmZzZXRIZWlnaHQ7IC8vaGVpZ2h0IGZvciB0aGUgZGVmdWFsdCBmb250CiAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgIH0KCiAgICBkZXRlY3Rvci5kZXRlY3QgPSBmdW5jdGlvbihmb250KSB7CiAgICAgICAgdmFyIGRldGVjdGVkID0gZmFsc2UsIGluZGV4LCBtYXRjaGVkOwogICAgICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgICAgIHMuc3R5bGUuZm9udEZhbWlseSA9IGZvbnQgKyAnLCcgKyBiYXNlRm9udHNbaW5kZXhdOyAvLyBuYW1lIG9mIHRoZSBmb250IGFsb25nIHdpdGggdGhlIGJhc2UgZm9udCBmb3IgZmFsbGJhY2suCiAgICAgICAgICAgIGguYXBwZW5kQ2hpbGQocyk7CiAgICAgICAgICAgIG1hdGNoZWQgPSAocy5vZmZzZXRXaWR0aCAhPT0gZGVmYXVsdFdpZHRoW2Jhc2VGb250c1tpbmRleF1dIHx8IHMub2Zmc2V0SGVpZ2h0ICE9PSBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dKTsKICAgICAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgICAgICAgICAgZGV0ZWN0ZWQgPSBkZXRlY3RlZCB8fCBtYXRjaGVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGV0ZWN0ZWQ7CiAgICB9OwoKICAgIHJldHVybiBkZXRlY3RvcjsKfSgpKTsKLyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAxNCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGNvbGxlY3RTY3JlZW5JbmZvID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBzY3JlZW5JbmZvID0ge307CiAgICAgICAgaWYgKHNjcmVlbikgewogICAgICAgICAgICBpZiAoc2NyZWVuLndpZHRoKSB7CiAgICAgICAgICAgICAgICBzY3JlZW5JbmZvLnNjcmVlbldpZHRoID0gc2NyZWVuLndpZHRoOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLmhlaWdodCkgewogICAgICAgICAgICAgICAgc2NyZWVuSW5mby5zY3JlZW5IZWlnaHQgPSBzY3JlZW4uaGVpZ2h0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLnBpeGVsRGVwdGgpIHsKICAgICAgICAgICAgICAgIHNjcmVlbkluZm8uc2NyZWVuQ29sb3VyRGVwdGggPSBzY3JlZW4ucGl4ZWxEZXB0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3Qgc2NyZWVuIGluZm9ybWF0aW9uLiBzY3JlZW4gaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzY3JlZW5JbmZvOwogICAgfSwKICAgIGNvbGxlY3RUaW1lem9uZUluZm8gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHRpbWV6b25lSW5mbyA9ICB7fSwgb2Zmc2V0ID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOwoKICAgICAgICBpZiAob2Zmc2V0KSB7CiAgICAgICAgICAgIHRpbWV6b25lSW5mby50aW1lem9uZSA9IG9mZnNldDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbm5vdCBjb2xsZWN0IHRpbWV6b25lIGluZm9ybWF0aW9uLiB0aW1lem9uZSBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aW1lem9uZUluZm87CiAgICB9LAogICAgY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbyA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgaWYgKG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IucGx1Z2lucykgewogICAgICAgICAgICB2YXIgcGx1Z2luc0luZm8gPSB7fSwgaSwgcGx1Z2lucyA9IG5hdmlnYXRvci5wbHVnaW5zOwogICAgICAgICAgICBwbHVnaW5zSW5mby5pbnN0YWxsZWRQbHVnaW5zID0gIiI7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGx1Z2luc0luZm8uaW5zdGFsbGVkUGx1Z2lucyA9IHBsdWdpbnNJbmZvLmluc3RhbGxlZFBsdWdpbnMgKyBwbHVnaW5zW2ldLmZpbGVuYW1lICsgIjsiOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcGx1Z2luc0luZm87CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBicm93c2VyIHBsdWdpbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLnBsdWdpbnMgaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgICAgIHJldHVybiB7fTsKICAgICAgICB9CgogICAgfSwKLy8gR2V0dGluZyBnZW9sb2NhdGlvbiB0YWtlcyBzb21lIHRpbWUgYW5kIGlzIGRvbmUgYXN5bmNocm9ub3VzbHksIGhlbmNlIG5lZWQgYSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgb25jZSBnZW9sb2NhdGlvbiBpcyByZXRyaWV2ZWQuCiAgICBjb2xsZWN0R2VvbG9jYXRpb25JbmZvID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIGdlb2xvY2F0aW9uSW5mbyA9IHt9LAogICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgICAgICAgICAgZ2VvbG9jYXRpb25JbmZvLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGU7CiAgICAgICAgICAgICAgICBnZW9sb2NhdGlvbkluZm8ubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGU7CiAgICAgICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgICAgICB9LCBlcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3QgZ2VvbG9jYXRpb24gaW5mb3JtYXRpb24uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVycm9yLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgY2FsbGJhY2soZ2VvbG9jYXRpb25JbmZvKTsKICAgICAgICAgICAgfTsKICAgICAgICBpZiAobmF2aWdhdG9yICYmIG5hdmlnYXRvci5nZW9sb2NhdGlvbikgewogICAgICAgICAgICAvLyBOQjogSWYgdXNlciBjaG9vc2VzICdOb3Qgbm93JyBvbiBGaXJlZm94IG5laXRoZXIgY2FsbGJhY2sgZ2V0cyBjYWxsZWQKICAgICAgICAgICAgLy8gICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NTUzMwogICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBnZW9sb2NhdGlvbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgIH0KICAgIH0sCiAgICBjb2xsZWN0QnJvd3NlckZvbnRzSW5mbyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZm9udHNJbmZvID0ge30sIGksIGZvbnRzTGlzdCA9IFsiY3Vyc2l2ZSIsIm1vbm9zcGFjZSIsInNlcmlmIiwic2Fucy1zZXJpZiIsImZhbnRhc3kiLCJkZWZhdWx0IiwiQXJpYWwiLCJBcmlhbCBCbGFjayIsCiAgICAgICAgICAgICJBcmlhbCBOYXJyb3ciLCJBcmlhbCBSb3VuZGVkIE1UIEJvbGQiLCJCb29rbWFuIE9sZCBTdHlsZSIsIkJyYWRsZXkgSGFuZCBJVEMiLCJDZW50dXJ5IiwiQ2VudHVyeSBHb3RoaWMiLAogICAgICAgICAgICAiQ29taWMgU2FucyBNUyIsIkNvdXJpZXIiLCJDb3VyaWVyIE5ldyIsIkdlb3JnaWEiLCJHZW50aXVtIiwiSW1wYWN0IiwiS2luZyIsIkx1Y2lkYSBDb25zb2xlIiwiTGFsaXQiLAogICAgICAgICAgICAiTW9kZW5hIiwiTW9ub3R5cGUgQ29yc2l2YSIsIlBhcHlydXMiLCJUYWhvbWEiLCJUZVgiLCJUaW1lcyIsIlRpbWVzIE5ldyBSb21hbiIsIlRyZWJ1Y2hldCBNUyIsIlZlcmRhbmEiLAogICAgICAgICAgICAiVmVyb25hIl07CiAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gIiI7CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBmb250c0xpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGZvbnREZXRlY3Rvci5kZXRlY3QoZm9udHNMaXN0W2ldKSkgewogICAgICAgICAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzICsgZm9udHNMaXN0W2ldICsgIjsiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb250c0luZm87CiAgICB9LAogICAgZGV2aWNlUHJpbnQgPSB7fTsKCmRldmljZVByaW50LnNjcmVlbiA9IGNvbGxlY3RTY3JlZW5JbmZvKCk7CmRldmljZVByaW50LnRpbWV6b25lID0gY29sbGVjdFRpbWV6b25lSW5mbygpOwpkZXZpY2VQcmludC5wbHVnaW5zID0gY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbygpOwpkZXZpY2VQcmludC5mb250cyA9IGNvbGxlY3RCcm93c2VyRm9udHNJbmZvKCk7CgppZiAobmF2aWdhdG9yLnVzZXJBZ2VudCkgewogICAgZGV2aWNlUHJpbnQudXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKfQppZiAobmF2aWdhdG9yLmFwcE5hbWUpIHsKICAgIGRldmljZVByaW50LmFwcE5hbWUgPSBuYXZpZ2F0b3IuYXBwTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcENvZGVOYW1lKSB7CiAgICBkZXZpY2VQcmludC5hcHBDb2RlTmFtZSA9IG5hdmlnYXRvci5hcHBDb2RlTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcFZlcnNpb24pIHsKICAgIGRldmljZVByaW50LmFwcFZlcnNpb24gPSBuYXZpZ2F0b3IuYXBwVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbikgewogICAgZGV2aWNlUHJpbnQuYXBwTWlub3JWZXJzaW9uID0gbmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmJ1aWxkSUQpIHsKICAgIGRldmljZVByaW50LmJ1aWxkSUQgPSBuYXZpZ2F0b3IuYnVpbGRJRDsKfQppZiAobmF2aWdhdG9yLnBsYXRmb3JtKSB7CiAgICBkZXZpY2VQcmludC5wbGF0Zm9ybSA9IG5hdmlnYXRvci5wbGF0Zm9ybTsKfQppZiAobmF2aWdhdG9yLmNwdUNsYXNzKSB7CiAgICBkZXZpY2VQcmludC5jcHVDbGFzcyA9IG5hdmlnYXRvci5jcHVDbGFzczsKfQppZiAobmF2aWdhdG9yLm9zY3B1KSB7CiAgICBkZXZpY2VQcmludC5vc2NwdSA9IG5hdmlnYXRvci5vc2NwdTsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3QpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3QgPSBuYXZpZ2F0b3IucHJvZHVjdDsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3RTdWIpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3RTdWIgPSBuYXZpZ2F0b3IucHJvZHVjdFN1YjsKfQppZiAobmF2aWdhdG9yLnZlbmRvcikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yID0gbmF2aWdhdG9yLnZlbmRvcjsKfQppZiAobmF2aWdhdG9yLnZlbmRvclN1YikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yU3ViID0gbmF2aWdhdG9yLnZlbmRvclN1YjsKfQppZiAobmF2aWdhdG9yLmxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5sYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnVzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQudXNlckxhbmd1YWdlID0gbmF2aWdhdG9yLnVzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQuYnJvd3Nlckxhbmd1YWdlID0gbmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnN5c3RlbUxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5zeXN0ZW1MYW5ndWFnZSA9IG5hdmlnYXRvci5zeXN0ZW1MYW5ndWFnZTsKfQoKLy8gQXR0ZW1wdCB0byBjb2xsZWN0IGdlby1sb2NhdGlvbiBpbmZvcm1hdGlvbiBhbmQgcmV0dXJuIHRoaXMgd2l0aCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgovLyBPdGhlcndpc2UsIGlmIGdlby1sb2NhdGlvbiBmYWlscyBvciB0YWtlcyBsb25nZXIgdGhhbiAzMCBzZWNvbmRzLCBhdXRvLXN1Ym1pdCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgphdXRvU3VibWl0RGVsYXkgPSAzMDAwMDsKb3V0cHV0LnZhbHVlID0gSlNPTi5zdHJpbmdpZnkoZGV2aWNlUHJpbnQpOwpjb2xsZWN0R2VvbG9jYXRpb25JbmZvKGZ1bmN0aW9uKGdlb2xvY2F0aW9uSW5mbykgewogICAgZGV2aWNlUHJpbnQuZ2VvbG9jYXRpb24gPSBnZW9sb2NhdGlvbkluZm87CiAgICBvdXRwdXQudmFsdWUgPSBKU09OLnN0cmluZ2lmeShkZXZpY2VQcmludCk7CiAgICBzdWJtaXQoKTsKfSk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"312e951f-70c5-49d2-a9ae-93aef909d5df\",\"name\":\"Salesforce Profile Normalization\",\"description\":\"Normalizes raw profile data from Salesforce\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZ2l2ZW5fbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmZhbWlseV9uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnBpY3R1cmUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJsb2NhbGUiLCByYXdQcm9maWxlLnpvbmVJbmZvKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"69f06e63-128c-4e2f-af52-079a8a6f448b\",\"name\":\"SAML2 SP Adapter Script\",\"description\":\"Default global script for SAML2 SP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_SP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"name\":\"debug\",\"description\":\"Display sharedState, transientState, and headers.\",\"script\":\"LyogZGVidWcKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogRGlzcGxheSBzaGFyZWRTdGF0ZSwgdHJhbnNpZW50U3RhdGUsIGFuZCBoZWFkZXJzLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwp2YXIgYW5jaG9yID0gImFuY2hvci0iLmNvbmNhdChnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4JykpOwp2YXIgaGFsaWduID0gImxlZnQiOwp2YXIgbWVzc2FnZSA9ICI8cD48Yj5TaGFyZWQgU3RhdGU8L2I+Ojxici8+Ii5jb25jYXQoCiAgICAgIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpLmNvbmNhdCgKICAgICI8cD48Yj5UcmFuc2llbnQgU3RhdGU8L2I+Ojxici8+IikuY29uY2F0KAogICAgICB0cmFuc2llbnRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+UmVxdWVzdCBIZWFkZXJzPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgICAgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikKdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwidGV4dC1sZWZ0XCI7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIikuY29uY2F0KG1lc3NhZ2UpLmNvbmNhdCgiJztcbiIpLmNvbmNhdCgKICAiICB9XG4iKS5jb25jYXQoCiAgIn0pIikKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawopCmlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgIGFuY2hvcgogICAgICAgICksCiAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICApLmJ1aWxkKCkKfQplbHNlIHsKICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0KCiAvKgogICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAqIAogICogRXhhbXBsZToKICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICogJ3h4eC14eHgnIHByb2R1Y2VzICc0MzItNTIxJwogICovCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxMHwwOwogICAgICAgIHZhciB2ID0gcjsKICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"a7a78773-445b-4eca-bb93-409e86bced81\",\"name\":\"GitHub Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUubG9naW4pKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"01e1a3c0-038b-4c16-956a-6c9d89328cff\",\"name\":\"Authentication Tree Decision Node Script\",\"description\":\"Default global script for a scripted decision node\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKb3V0Y29tZSA9ICJ0cnVlIjsK\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"bb393d07-a121-47e2-9d24-1a1066f39ec0\",\"name\":\"My Example Script Using Libraries\",\"description\":\"My Example Script Using Libraries\",\"script\":\"LyoqCiAqIFRlc3RpbmcgbGlicmFyeSBzY3JpcHRzCiAqLwp2YXIgbXlsaWIgPSByZXF1aXJlKCdNeSBFeGFtcGxlIExpYnJhcnknKTsKdmFyIGxvZ2dlcnMgPSByZXF1aXJlKCdMaWJyYXJ5IFNjcmlwdCcpOwoKbXlsaWIuYWRkKDEpOwpteWxpYi5sb2dUb3RhbChsb2dnZXIpOwpteWxpYi5hZGQoMyk7Cm15bGliLmxvZ1RvdGFsV2l0aE1lc3NhZ2UobG9nZ2VyLCBteWxpYi5NU0cpOwoKb3V0Y29tZSA9ICd0cnVlJzs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"77e87451-bde9-40c0-84b1-02d4c97687f2\",\"name\":\"takeFavouriteFactor.js\",\"description\":\"null\",\"script\":\"ZnVuY3Rpb24gZ2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSkKewogIHZhciBpZCA9IHNoYXJlZFN0YXRlLmdldCgnX2lkJyk7CiAgdmFyIGZySWRtQ3VzdG9tQXR0cmlidXRlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoaWQsICdmci1pZG0tY3VzdG9tLWF0dHJzJyk7CiAgaWYgKGZySWRtQ3VzdG9tQXR0cmlidXRlcykKICB7CiAgICAgIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QgPSBKU09OLnBhcnNlKFN0cmluZyhmcklkbUN1c3RvbUF0dHJpYnV0ZXMudG9BcnJheSgpWzBdKSk7CiAgICAgICAgcmV0dXJuIGZySWRtQ3VzdG9tQXR0cmlidXRlc09iamVjdFtjdXN0b21BdHRyTmFtZV07CiAgfQp9Cgp2YXIgZmF2RmFjdG9yID0gZ2V0Q3VzdG9tQXR0clZhbHVlKCJjdXN0b21fZmF2b3VyaXRlRmFjdG9yIik7Cm91dGNvbWUgPSBmYXZGYWN0b3I7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"39c08084-1238-43e8-857f-2e11005eac49\",\"name\":\"Alpha OAuth2 Access Token Modification Script\",\"description\":\"Default alpha realm script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6b3cfd48-62d3-48ff-a96f-fe8f3a22ab30\",\"name\":\"Amazon Profile Normalization\",\"description\":\"Normalizes raw profile data from Amazon\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"424da748-82cc-4b54-be6f-82bd64d82a74\",\"name\":\"Yahoo Profile Normalization\",\"description\":\"Normalizes raw profile data from Yahoo\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"da56fe60-8b38-4c46-a405-d6b306d4b336\",\"name\":\"OAuth2 Evaluate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Evaluation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcG9wdWxhdGUgdGhlIHNjb3BlcyB3aXRoIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlcyB3aGVuIHRoZSB0b2tlbmluZm8gZW5kcG9pbnQgaXMgY2FsbGVkLgogKiBGb3IgZXhhbXBsZSwgaWYgb25lIG9mIHRoZSBzY29wZXMgaXMgbWFpbCwgQU0gc2V0cyBtYWlsIHRvIHRoZSByZXNvdXJjZSBvd25lcidzIGVtYWlsIGFkZHJlc3MgaW4gdGhlIHRva2VuIGluZm9ybWF0aW9uIHJldHVybmVkLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDIpLgogKiAgICAgICAgICAgIFRoZSBjbGllbnQncyBpZGVudGl0eSBpZiBwcmVzZW50IG9yIHRoZSByZXNvdXJjZSBvd25lcidzIGlkZW50aXR5LiBDYW4gYmUgbnVsbC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0VWQUxVQVRFX1NDT1BFCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoMykuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIGEgTWFwPFN0cmluZywgT2JqZWN0PiBvZiB0aGUgYWNjZXNzIHRva2VuJ3MgaW5mb3JtYXRpb24gKDQpLgogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBBY2Nlc3NUb2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vYXV0aDIvY29yZS9BY2Nlc3NUb2tlbi5odG1sLgogKiAoMikgQU1JZGVudGl0eSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9pZG0vQU1JZGVudGl0eS5odG1sLgogKiAoMykgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBldmFsdWF0ZSBzY29wZSBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgbWFwID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7CiAgICBpZiAoaWRlbnRpdHkgIT09IG51bGwpIHsKICAgICAgICB2YXIgc2NvcGVzID0gYWNjZXNzVG9rZW4uZ2V0U2NvcGUoKS50b0FycmF5KCk7CiAgICAgICAgc2NvcGVzLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKHNjb3BlKS50b0FycmF5KCk7CiAgICAgICAgICAgIG1hcC5wdXQoc2NvcGUsIGF0dHJpYnV0ZXMuam9pbigiLCIpKTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKCdpZGVudGl0eSBpcyBudWxsJyk7CiAgICB9CiAgICByZXR1cm4gbWFwOwp9KCkpOw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_EVALUATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"name\":\"level\",\"description\":\"set per level shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdsZXZlbCcgKyBsZXZlbCArICdWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzZXQgYXQgZWFjaCBsZXZlbCBvZiB0aGUgbmVzdGVkIGpvdXJuZXlzLiBJdCBjb250YWlucyBhbiBpbmRpY2F0b3IgaW4gd2hpY2ggbGV2ZWwgaXQgd2FzIHNldC4nKTsKfSgpKTs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"403cf226-6051-4368-8b72-9ba14f9a5140\",\"name\":\"VKontakte Profile Normalization\",\"description\":\"Normalizes raw profile data from VKontakte\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGhvdG9fNTApLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpKSk=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c4f22465-2368-4e27-8013-e6399974fd48\",\"name\":\"SAML2 IDP Attribute Mapper Script\",\"description\":\"Default global script for SAML2 IDP Attribute Mapper\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSBvYmplY3RzIGZvciB0aGUgSURQIGZyYW1ld29yayB0byBpbnNlcnQgaW50byB0aGUgZ2VuZXJhdGVkIEFzc2VydGlvbi4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgICAgICBUaGUgaG9zdGVkIGVudGl0eSBJRC4KICogcmVtb3RlRW50aXR5SWQgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgICAgVGhlIHJlbW90ZSBlbnRpdHkgSUQuCiAqIHJlYWxtIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGluZyB0by4KICogbG9nZ2VyIC0gQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5TQU1MMl9JRFBfQVRUUklCVVRFX01BUFBFUgogKiBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgLSBJZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgKDIpCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFuIElkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlciBpbnN0YW5jZSBjb250YWluaW5nIG1ldGhvZHMgdXNlZCBmb3IgSURQIGF0dHJpYnV0ZSBtYXBwaW5nLgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb246CiAqICAgICAgLSBvbiBmYWlsaW5nIHRvIG1hcCB0aGUgSURQIGF0dHJpYnV0ZXMuCiAqCiAqIFJldHVybiAtIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSAoMykgb2JqZWN0cy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgSWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaHRtbC4KICogKDMpIEF0dHJpYnV0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9hc3NlcnRpb24vQXR0cmlidXRlLmh0bWwuCiAqLwoKLyoqCiAqIERlZmF1bHQgU0FNTDIgSURQIEF0dHJpYnV0ZSBNYXBwZXIuCiAqLwpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKCkgewogICAgdmFyIGZySmF2YSA9IEphdmFJbXBvcnRlcigKICAgICAgICBjb20uc3VuLmlkZW50aXR5LnNhbWwyLmNvbW1vbi5TQU1MMkV4Y2VwdGlvbgogICAgKTsKCiAgICBjb25zdCBkZWJ1Z01ldGhvZCA9ICJTY3JpcHRlZElEUEF0dHJpYnV0ZU1hcHBlci5nZXRBdHRyaWJ1dGVzOjogIjsKCiAgICB0cnkgewoKICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1Nlc3Npb25WYWxpZChzZXNzaW9uKSkgewogICAgICAgICAgICBsb2dnZXIuZXJyb3IoZGVidWdNZXRob2QgKyAiSW52YWxpZCBzZXNzaW9uLiIpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHZhciBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0UmVtb3RlU1BDb25maWdBdHRyaWJ1dGVNYXAocmVhbG0sIHJlbW90ZUVudGl0eUlkKTsKICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJSZW1vdGUgU1AgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICBpZiAoY29uZmlnTWFwID09IG51bGwgfHwgY29uZmlnTWFwLmlzRW1wdHkoKSkgewogICAgICAgICAgICBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0SG9zdGVkSURQQ29uZmlnQXR0cmlidXRlTWFwKHJlYWxtLCBob3N0ZWRFbnRpdHlJZCk7CiAgICAgICAgICAgIGlmIChjb25maWdNYXAgPT0gbnVsbCB8fCBjb25maWdNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJDb25maWd1cmF0aW9uIG1hcCBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKGRlYnVnTWV0aG9kICsgIkhvc3RlZCBJRFAgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICB9CgogICAgICAgIHZhciBhdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoKTsKICAgICAgICB2YXIgc3RyaW5nVmFsdWVNYXAgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKICAgICAgICB2YXIgYmluYXJ5VmFsdWVNYXA7CiAgICAgICAgdmFyIGxvY2FsQXR0cmlidXRlOwoKICAgICAgICAvLyBEb24ndCB0cnkgdG8gcmVhZCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBkYXRhc3RvcmUgaWYgdGhlIGlnbm9yZWQgcHJvZmlsZSBpcyBlbmFibGVkIGluIHRoaXMgcmVhbG0uCiAgICAgICAgaWYgKCFpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaXNJZ25vcmVkUHJvZmlsZShzZXNzaW9uLCByZWFsbSkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIFJlc29sdmUgYXR0cmlidXRlcyB0byBiZSByZWFkIGZyb20gdGhlIGRhdGFzdG9yZS4KICAgICAgICAgICAgICAgIHZhciBzdHJpbmdBdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KCk7CiAgICAgICAgICAgICAgICB2YXIgYmluYXJ5QXR0cmlidXRlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgIHdoaWxlIChrZXlJdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlJdGVyLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBsb2NhbEF0dHJpYnV0ZSA9IGNvbmZpZ01hcC5nZXQoa2V5KTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1N0YXRpY0F0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc0JpbmFyeUF0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHRyZWF0IGFzIGJlaW5nIGJpbmFyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5QXR0cmlidXRlcy5hZGQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLnJlbW92ZUJpbmFyeUF0dHJpYnV0ZUZsYWcobG9jYWxBdHRyaWJ1dGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMuYWRkKGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXN0cmluZ0F0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWVNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0QXR0cmlidXRlcyhzZXNzaW9uLCBzdHJpbmdBdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghYmluYXJ5QXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBiaW5hcnlWYWx1ZU1hcCA9IGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5nZXRCaW5hcnlBdHRyaWJ1dGVzKHNlc3Npb24sIGJpbmFyeUF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGRlYnVnTWV0aG9kICsgIkVycm9yIGFjY2Vzc2luZyB0aGUgZGF0YXN0b3JlLiAiICsgZXJyb3IpOwogICAgICAgICAgICAgICAgLy9jb250aW51ZSB0byBjaGVjayBpbiBzc290b2tlbi4KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICB3aGlsZSAoa2V5SXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgdmFyIGtleSA9IGtleUl0ZXIubmV4dCgpCiAgICAgICAgICAgIHZhciBuYW1lRm9ybWF0ID0gbnVsbDsKICAgICAgICAgICAgdmFyIHNhbWxBdHRyaWJ1dGUgPSBrZXk7CiAgICAgICAgICAgIGxvY2FsQXR0cmlidXRlID0gY29uZmlnTWFwLmdldChrZXkpOwogICAgICAgICAgICAvLyBjaGVjayBpZiBzYW1sQXR0cmlidXRlIGhhcyBmb3JtYXQgbmFtZUZvcm1hdHxzYW1sQXR0cmlidXRlCiAgICAgICAgICAgIHZhciBzYW1sQXR0cmlidXRlcyA9IFN0cmluZyhuZXcgamF2YS5sYW5nLlN0cmluZyhzYW1sQXR0cmlidXRlKSk7CiAgICAgICAgICAgIHZhciB0b2tlbnMgPSBzYW1sQXR0cmlidXRlcy5zcGxpdCgnfCcpOwoKICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICBuYW1lRm9ybWF0ID0gdG9rZW5zWzBdOwogICAgICAgICAgICAgICAgc2FtbEF0dHJpYnV0ZSA9IHRva2Vuc1sxXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVZhbHVlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzU3RhdGljQXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdGF0aWMgZmxhZyBiZWZvcmUgdXNpbmcgaXQgYXMgdGhlIHN0YXRpYyB2YWx1ZQogICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlU3RhdGljQXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoW2xvY2FsQXR0cmlidXRlXSk7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJBZGRpbmcgc3RhdGljIHZhbHVlIHt9IGZvciBhdHRyaWJ1dGUgbmFtZWQge30iLCBsb2NhbEF0dHJpYnV0ZSwgc2FtbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzQmluYXJ5QXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZmxhZyBhcyBub3QgdXNlZCBmb3IgbG9va3VwCiAgICAgICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlQmluYXJ5QXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzID0gaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldEJpbmFyeUF0dHJpYnV0ZVZhbHVlcyhzYW1sQXR0cmlidXRlLCBsb2NhbEF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5VmFsdWVNYXApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWVNYXAgIT0gbnVsbCAmJiAhc3RyaW5nVmFsdWVNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlcyA9IHN0cmluZ1ZhbHVlTWFwLmdldChsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoZGVidWdNZXRob2QgKyAie30gc3RyaW5nIHZhbHVlIG1hcCB3YXMgZW1wdHkgb3IgbnVsbC4iLCBsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSB1c2VycyBzc29Ub2tlbgogICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlcyA9PSBudWxsIHx8IGF0dHJpYnV0ZVZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJVc2VyIHByb2ZpbGUgZG9lcyBub3QgaGF2ZSB2YWx1ZSBmb3Ige30sIGNoZWNraW5nIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldFByb3BlcnR5U2V0KHNlc3Npb24sIGxvY2FsQXR0cmlidXRlKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZXMgPT0gbnVsbCB8fCBhdHRyaWJ1dGVWYWx1ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJ7fSBub3QgZm91bmQgaW4gdXNlciBwcm9maWxlIG9yIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuYWRkKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5jcmVhdGVTQU1MQXR0cmlidXRlKHNhbWxBdHRyaWJ1dGUsIG5hbWVGb3JtYXQsIGF0dHJpYnV0ZVZhbHVlcykpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXR0cmlidXRlczsKCiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGxvZ2dlci5lcnJvcihkZWJ1Z01ldGhvZCArICJFcnJvciBtYXBwaW5nIElEUCBhdHRyaWJ1dGVzLiAiICsgZXJyb3IpOwogICAgICAgIHRocm93IG5ldyBmckphdmEuU0FNTDJFeGNlcHRpb24oZXJyb3IpOwogICAgfQp9CgpnZXRBdHRyaWJ1dGVzKCk7\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ATTRIBUTE_MAPPER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"46074930-6a38-4e36-8985-1ed90b4bdb3b\",\"name\":\"SaveLogin\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCik7CndpdGggKGZyKSB7CiAgLy8gQ3JlYXRlIG5ldyBlbnRyeSB3aXRoIGRldmljZSBwcm9maWxlIGFuZCBkYXRlCiAgdmFyIHByb2ZpbGUgPSBzaGFyZWRTdGF0ZS5nZXQoImZvcmdlUm9jay5kZXZpY2UucHJvZmlsZSIpOwogIHZhciBkYXRlID0gRGF0ZS5ub3coKQogIHZhciBpZGVudGlmaWVyID0gcHJvZmlsZS5nZXQoImlkZW50aWZpZXIiKQogIHZhciBwbGF0Zm9ybSA9IHByb2ZpbGUuZ2V0KCJtZXRhZGF0YSIpLmdldCgicGxhdGZvcm0iKS5nZXQoInBsYXRmb3JtIikKICB2YXIgZGV2aWNlTmFtZSA9IHByb2ZpbGUuZ2V0KCJtZXRhZGF0YSIpLmdldCgicGxhdGZvcm0iKS5nZXQoImRldmljZU5hbWUiKQogIHZhciBsYXRpdHVkZSA9IHByb2ZpbGUuZ2V0KCJsb2NhdGlvbiIpLmdldCgibGF0aXR1ZGUiKQogIHZhciBsb25naXR1ZGUgPSBwcm9maWxlLmdldCgibG9jYXRpb24iKS5nZXQoImxvbmdpdHVkZSIpCiAgdmFyIHVzZXJBZ2VudCA9IHByb2ZpbGUuZ2V0KCJtZXRhZGF0YSIpLmdldCgiYnJvd3NlciIpLmdldCgidXNlckFnZW50Iik7CiAgdmFyIGJyb3dzZXIgPSAiIgogIAogIC8vIFdvcmsgb3V0IHdoaWNoIGJyb3dzZXIgdGhpcyBpcwogIGlmICh1c2VyQWdlbnQudG9VcHBlckNhc2UoKS5pbmRleE9mKCJGSVJFRk9YIikgPiAtMSkgewogICAgYnJvd3NlciA9ICJGaXJlZm94IjsKICB9IGVsc2UgaWYgKHVzZXJBZ2VudC50b1VwcGVyQ2FzZSgpLmluZGV4T2YoIkNIUk9NRSIpID4gLTEgJiYgdXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiU0FGQVJJIikgPiAtMSkgewogICAgLy8gQ2hyb21lIGNhbiBzb21ldGltZXMgbGlzdCBDaHJvbWUgZm9sbG93ZWQgYnkgU2FmYXJpIGluIHVzZXJBZ2VudAogICAgaWYgKHVzZXJBZ2VudC50b1VwcGVyQ2FzZSgpLmluZGV4T2YoIkNIUk9NRSIpIDwgdXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiU0FGQVJJIikpIHsKICAgICAgYnJvd3NlciA9ICJDaHJvbWUiOwogICAgfQogIH0gZWxzZSBpZiAodXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiQ0hST01FIikgPiAtMSkgewogICAgYnJvd3NlciA9ICJDaHJvbWUiOwogIH0gZWxzZSBpZiAodXNlckFnZW50LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiU0FGQVJJIikgPiAtMSkgewogICAgYnJvd3NlciA9ICJTYWZhcmkiOwogIH0KICAKICB2YXIgZW50cnkgPSB7CiAgICAiZGF0ZSI6IERhdGUoKS50b1N0cmluZygpLAogICAgImxhc3RTZWxlY3RlZERhdGUiOiBkYXRlLAogICAgImRldmljZSI6IHsKICAgICAgImlkZW50aWZpZXIiOiBTdHJpbmcoaWRlbnRpZmllciksCiAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAicGxhdGZvcm0iOiB7CiAgICAgICAgICAicGxhdGZvcm0iOiBTdHJpbmcocGxhdGZvcm0pLAogICAgICAgICAgImRldmljZU5hbWUiOiBTdHJpbmcoZGV2aWNlTmFtZSkKICAgICAgICB9LAogICAgICAgICJicm93c2VyIjogYnJvd3NlcgogICAgICB9CiAgICB9LAogICAgImxvY2F0aW9uIjogewogICAgICAibGF0aXR1ZGUiOiBTdHJpbmcobGF0aXR1ZGUpLAogICAgICAibG9uZ2l0dWRlIjogU3RyaW5nKGxvbmdpdHVkZSkKICAgIH0KICB9CiAgCiAgLy8gQWRkIGVudHJ5IHRvIG11bHRpIHZhbHVlCiAgdmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKQogIHZhciBhdHRyaWJ1dGUgPSAiZnItYXR0ci1pbXVsdGkxIgogIGlkUmVwb3NpdG9yeS5hZGRBdHRyaWJ1dGUodXNlcm5hbWUsIGF0dHJpYnV0ZSwgSlNPTi5zdHJpbmdpZnkoZW50cnkpKTsKICAKICBvdXRjb21lID0gInRydWUiCn0=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e1db8a0a-0329-4962-a5bf-ecffaca376ae\",\"name\":\"Alpha endUserUIClient OIDC Claims Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"name\":\"mode\",\"description\":\"Check if mode has already been set.\",\"script\":\"LyogbW9kZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDb2xsZWN0IG1vZGUgaWYgbm90IGFscmVhZHkgc2V0IGFuZCBzZXQgb3V0Y29tZSB0byBtb2RlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSAnc2hhcmVkIGFuZCBsZXZlbCcKICogLSAnc2hhcmVkIG9ubHknCiAqIC0gJ2xldmVsIG9ubHknCiAqIC0gJ25vbmUnCiAqLwooZnVuY3Rpb24gKCkgewogIHZhciBtb2RlID0gbm9kZVN0YXRlLmdldCgnbW9kZScpOwogIGlmIChtb2RlKSB7CiAgICBvdXRjb21lID0gbW9kZS5hc1N0cmluZygpOwogICAgdmFyIGxldmVsID0gbm9kZVN0YXRlLmdldCgnbGV2ZWwnKS5hc0ludGVnZXIoKSArIDE7CiAgICBsb2dnZXIuZXJyb3IoJ21vZGU6IG1vZGU9JyArIG1vZGUuYXNTdHJpbmcoKSArICcsIGxldmVsPScgKyBsZXZlbCk7CiAgICBzaGFyZWRTdGF0ZS5wdXQoJ2xldmVsJywgbGV2ZWwpOwogIH0KICBlbHNlIHsKICAgIHZhciBjaG9pY2VzID0gWydzaGFyZWQgYW5kIGxldmVsJywgJ3NoYXJlZCBvbmx5JywgJ2xldmVsIG9ubHknLCAnbm9uZSddOwogIAogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DaG9pY2VDYWxsYmFjawogICAgKQoKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKFsKICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soJ0Nob29zZSB0ZXN0IG1vZGUnLCBjaG9pY2VzLCAwLCBmYWxzZSkKICAgICAgXSkuYnVpbGQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBjaG9pY2UgPSBwYXJzZUludChjYWxsYmFja3MuZ2V0KDApLmdldFNlbGVjdGVkSW5kZXhlcygpWzBdKTsKICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgnbW9kZScsIGNob2ljZXNbY2hvaWNlXSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2xldmVsJywgMCk7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKGNob2ljZXNbY2hvaWNlXSkuYnVpbGQoKTsKICAgIH0KICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"743351b3-001a-4ec8-b3ac-a674ddb8de22\",\"name\":\"UOP Enrich Session\",\"description\":\"Enrich user session with UOP class ID.\",\"script\":\"LyogVU9QIEVucmljaCBTZXNzaW9uCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIEFkZCBjdXJyZW50IGNsYXNzIElEIHRvIHVzZXIgc2Vzc2lvbi4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuIAogKiBJdCByZXF1aXJlcyB0aGUgSWRlbnRpZnkgRXhpc3RpbmcgVXNlciBub2RlIGJlZm9yZSBpdCBpcyBiZWluZyBjYWxsZWQuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKiAtIGZhbHNlCiAqLwpsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBzdGFydCIpOwpvdXRjb21lID0gImZhbHNlIjsKCmlmIChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpIHsKICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBnb2luZyB0byBlbnJpY2ggc2Vzc2lvbiB3aXRoIGNsYXNzIGlkOiAiLmNvbmNhdChzaGFyZWRTdGF0ZS5nZXQoInVvcEN1cnJlbnRDbGFzc0lEIikpKTsKICAKICAgIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaQogICAgKTsKCiAgICB3aXRoIChmcikgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJVT1AgRW5yaWNoIFNlc3Npb246IEVuZCAob3V0Y29tZT0iLmNvbmNhdChvdXRjb21lKS5jb25jYXQoIikiKSk7CiAgICAgICAgYWN0aW9uID0gQWN0aW9uLmdvVG8ob3V0Y29tZSkucHV0U2Vzc2lvblByb3BlcnR5KCJVT1BDbGFzc0lEIiwgc2hhcmVkU3RhdGUuZ2V0KCJ1b3BDdXJyZW50Q2xhc3NJRCIpKS5idWlsZCgpOwogICAgfQogIAp9IGVsc2UgewogICAgbG9nZ2VyLmVycm9yKCJVT1AgRW5yaWNoIFNlc3Npb246IG5vIGNsYXNzZXMhIik7CiAgICBsb2dnZXIud2FybmluZygiVU9QIEVucmljaCBTZXNzaW9uOiBFbmQgKG91dGNvbWU9Ii5jb25jYXQob3V0Y29tZSkuY29uY2F0KCIpIikpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"85523e71-2d77-4577-b078-6f9674cc54e2\",\"name\":\"Saml2 IDP Adapter Always Auth\",\"description\":\"Always redirect browser pre-auth\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4yL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL1NBTUwySWRlbnRpdHlQcm92aWRlckFkYXB0ZXIuaHRtbAogKiBOb3RlIHRoYXQgdGhlIGluaXRpYWxpemUgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIHNjcmlwdHMuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzLiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMgZm9yIHRoZSB2YXJpYWJsZXMgYXZhaWxhYmxlIHRvIGl0LgogKgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZwogKiAgICAgRW50aXR5IElEIGZvciB0aGUgaG9zdGVkIElEUAogKiByZWFsbSAtIFN0cmluZwogKiAgICAgUmVhbG0gb2YgdGhlIGhvc3RlZCBJRFAKICogaWRwQWRhcHRlclNjcmlwdEhlbHBlciAtIElkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEpCiAqICAgICBBbiBpbnN0YW5jZSBvZiBJZHBBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIHJlcXVlc3QgLSBIdHRwU2VydmxldFJlcXVlc3QgKDIpCiAqICAgICBTZXJ2bGV0IHJlcXVlc3Qgb2JqZWN0CiAqIHJlc3BvbnNlIC0gSHR0cFNlcnZsZXRSZXNwb25zZSAoMykKICogICAgIFNlcnZsZXQgcmVzcG9uc2Ugb2JqZWN0CiAqIGF1dGhuUmVxdWVzdCAtIEF1dGhuUmVxdWVzdCAoNCkKICogICAgIFRoZSBvcmlnaW5hbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHNlbnQgZnJvbSBTUAogKiByZXFJZCAtIFN0cmluZwogKiAgICAgVGhlIGlkIHRvIHVzZSBmb3IgY29udGludWF0aW9uIG9mIHByb2Nlc3NpbmcgaWYgdGhlIGFkYXB0ZXIgcmVkaXJlY3RzCiAqIHJlcyAtIFJlc3BvbnNlICg1KQogKiAgICAgVGhlIFNBTUwgUmVzcG9uc2UKICogc2Vzc2lvbiAtIFNTT1Rva2VuICg2KQogKiAgICAgVGhlIHNpbmdsZSBzaWduLW9uIHNlc3Npb24uIFRoZSByZWZlcmVuY2UgdHlwZSBvZiB0aGlzIGlzIE9iamVjdCBhbmQgd291bGQgbmVlZCB0byBiZSBjYXN0ZWQgdG8gU1NPVG9rZW4uCiAqIHJlbGF5U3RhdGUgLSBTdHJpbmcKICogICAgIFRoZSByZWxheVN0YXRlIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSByZWRpcmVjdAogKiBmYXVsdENvZGUgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBjb2RlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgU0FNTCByZXNwb25zZQogKiBmYXVsdERldGFpbCAtIFN0cmluZwogKiAgICAgdGhlIGZhdWx0IGRldGFpbCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogbG9nZ2VyIC0gTG9nZ2VyIGluc3RhbmNlCiAqICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLjxzY3JpcHQgbmFtZT4KICoKICogVGhyb3dzIFNBTUwyRXhjZXB0aW9uICg3KToKICogICAgIGZvciBhbnkgZXhjZXB0aW9ucyBvY2N1cnJpbmcgaW4gdGhlIGFkYXB0ZXIuIFRoZSBmZWRlcmF0aW9uIHByb2Nlc3Mgd2lsbCBjb250aW51ZQogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBpZHBBZGFwdGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL1Jlc3BvbnNlLmh0bWwuCiAqICg2KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvY29tbW9uL1NBTUwyRXhjZXB0aW9uLmh0bWwuCiAqLwoKLyoKICogVGVtcGxhdGUvZGVmYXVsdCBzY3JpcHQgZm9yIFNBTUwyIElEUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTaW5nbGVTaWduT24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNpbmdsZVNpZ25PbiIpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZUF1dGhlbnRpY2F0aW9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlQXV0aGVudGljYXRpb24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZUF1dGhlbnRpY2F0aW9uIik7CiAgICByZXR1cm4gdHJ1ZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZFJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBoYXBwZW5lZCBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTZW5kUmVzcG9uc2UgKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNlbmRSZXNwb25zZSIpOwogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IGF1dGhuUmVxdWVzdDogIithdXRoblJlcXVlc3QpOwogICAgICByZXNwb25zZS5zZW5kUmVkaXJlY3QoImh0dHBzOi8vaWRjLnNjaGV1YmVyLmlvL2FtL1hVSS8/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPURpc3BhdGNoZXImRm9yY2VBdXRoPXRydWUmZ290bz0iK3JlbGF5U3RhdGUpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpZ25SZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICByZXMKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2lnblJlc3BvbnNlICgpIHsKICAgICAgbG9nZ2VyLmVycm9yKCJDaGljYWdvOiBwcmVTaWduUmVzcG9uc2UiKTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZEZhaWx1cmVSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGZhdWx0Q29kZQogKiAgICAgZmF1bHREZXRhaWwKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2VuZEZhaWx1cmVSZXNwb25zZSAoKSB7CiAgICAgIGxvZ2dlci5lcnJvcigiQ2hpY2FnbzogcHJlU2VuZEZhaWx1cmVSZXNwb25zZSIpOwp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e5c302c8-f838-4698-87cc-d7225fc82454\",\"name\":\"EmailAsUsername\",\"description\":\"null\",\"script\":\"b2JqZWN0QXR0cmlidXRlcyA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpCnVzZXJOYW1lID0gb2JqZWN0QXR0cmlidXRlcy5nZXQoInVzZXJOYW1lIikKCmlmKHVzZXJOYW1lKXsKICAvL0Zvcm0gRmlsbAogIG9iamVjdEF0dHJpYnV0ZXMucHV0KCJtYWlsIiwgdXNlck5hbWUpCn0gZWxzZSB7CiAgLy9Tb2NpYWwKICBvYmplY3RBdHRyaWJ1dGVzLnB1dCgidXNlck5hbWUiLCBvYmplY3RBdHRyaWJ1dGVzLmdldCgibWFpbCIpKQp9CgoKc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgb2JqZWN0QXR0cmlidXRlcyk7Ci8vc2hhcmVkU3RhdGUucHV0KCJ1c2VybmFtZSIsIG1haWwpCgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"223739f3-9c54-43b7-9572-3c5338786145\",\"name\":\"Format Username\",\"description\":\"null\",\"script\":\"dmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpOwoKc2hhcmVkU3RhdGUucHV0KCJkaXNwbGF5TmFtZSIsIHVzZXJuYW1lKTsKb3V0Y29tZSA9ICJjb250aW51ZSI7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"2c38c998-aec0-4e56-8d46-bff6e24a704e\",\"name\":\"My Example Library\",\"description\":\"My Example Library\",\"script\":\"dmFyIGkgPSAwOwoKZnVuY3Rpb24gYWRkKGopIHtpICs9IGp9OwpmdW5jdGlvbiBsb2dUb3RhbChsb2cpIHsgbG9nLmluZm8oIlRvdGFsOiAiICsgaSkgfTsKCi8vIGV4cG9ydCBjb25zdGFudApleHBvcnRzLk1TRyA9ICdGaW5hbCBzdW0nOwoKLy8gZXhwb3J0IGZ1bmN0aW9ucwpleHBvcnRzLmFkZCA9IGFkZDsKZXhwb3J0cy5sb2dUb3RhbCA9IGxvZ1RvdGFsOwoKLy9kaXJlY3QgZXhwb3J0IHVzaW5nIGFuIGlubGluZSBkZWNsYXJhdGlvbgpleHBvcnRzLmxvZ1RvdGFsV2l0aE1lc3NhZ2UgPSAobG9nLCBtZXNzYWdlKSA9PiBsb2cuaW5mbyhtZXNzYWdlICsgIjogIiArIGkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"d030f9fb-6d2d-4f5a-834d-b4f6304b8eb9\",\"name\":\"Impossible Traveller\",\"description\":\"null\",\"script\":\"Ly8gR2VvVmVsb2NpdHkgLyBJbXBvc3NpYmxlIEpvdXJuZXkgYXV0aGVudGljYXRpb24gc2NyaXB0Ci8vCi8vIE91dGNvbWVzIGZvciB0aGlzIHNjcmlwdCBhcmU6Ci8vICAgICAibm9Mb2NhdGlvbiIgLSB0aGUgZGV2aWNlJ3MgY3VycmVudCBsb2NhdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIHNoYXJlZFN0YXRlCi8vICAgICAibm9IaXN0b3J5IiAgLSB0aGUgdXNlcidzIHByb2ZpbGUgZG9lc24ndCB5ZXQgY29udGFpbiBwcmV2aW91cyBkZXZpY2UgaGlzdG9yeQovLyAgICAgIm9rIiAgICAgICAgIC0gdGhlIHVzZXIncyBnZW92ZWxvY2l0eSBpcyBsb3dlciB0aGFuIHRoZSBtYXggYWNjZXB0YWJsZSBzcGVlZAovLyAgICAgICAiaW1wb3NzaWJsZSIgLSB0aGUgdXNlcidzIGdlb3ZlbG9jaXR5IGV4Y2VlZHMgbWF4IGFjY2VwdGFibGUgc3BlZWQKTUFYX1ZFTE9DSVRZPTMwMApmdW5jdGlvbiBjYWxjdWxhdGVEaXN0YW5jZShmaXJzdCwgc2Vjb25kKSB7CiAgICB2YXIgZmFjdG9yID0gKE1hdGguUEkgLyAxODApLAogICAgICAgIHRoZXRhLAogICAgICAgIGRpc3Q7CiAgICBmdW5jdGlvbiBkZWdyZWVzVG9SYWRpYW5zKGRlZ3JlZXMpIHsKICAgICAgICByZXR1cm4gZGVncmVlcyAqIGZhY3RvcjsKICAgIH0KICAgIGZ1bmN0aW9uIHJhZGlhbnNUb0RlZ3JlZXMocmFkaWFucykgewogICAgICAgIHJldHVybiByYWRpYW5zIC8gZmFjdG9yOwogICAgfQogICAgdGhldGEgPSBmaXJzdC5sb25naXR1ZGUgLSBzZWNvbmQubG9uZ2l0dWRlOwogICAgZGlzdCA9IE1hdGguc2luKGRlZ3JlZXNUb1JhZGlhbnMoZmlyc3QubGF0aXR1ZGUpKSAqIE1hdGguc2luKGRlZ3JlZXNUb1JhZGlhbnMoc2Vjb25kLmxhdGl0dWRlKSkgKwogICAgICAgIE1hdGguY29zKGRlZ3JlZXNUb1JhZGlhbnMoZmlyc3QubGF0aXR1ZGUpKSAqIE1hdGguY29zKGRlZ3JlZXNUb1JhZGlhbnMoc2Vjb25kLmxhdGl0dWRlKSkgKgogICAgICAgIE1hdGguY29zKGRlZ3JlZXNUb1JhZGlhbnModGhldGEpKTsKICAgIGRpc3QgPSBNYXRoLmFjb3MoZGlzdCk7CiAgICBkaXN0ID0gcmFkaWFuc1RvRGVncmVlcyhkaXN0KTsKICAgIGRpc3QgPSBkaXN0ICogNjAgKiAxLjE1MTU7CiAgICByZXR1cm4gZGlzdDsKfTsKdmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKLy9kZXZpY2VzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZSh1c2VybmFtZSwgImRldmljZVByb2ZpbGVzIikudG9BcnJheSgpOwpsb2dpbkhpc3RvcnkgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCAiZnItYXR0ci1pbXVsdGkxIikudG9BcnJheSgpOwppZiAobG9naW5IaXN0b3J5Lmxlbmd0aCA9PSAwKSBvdXRjb21lID0gIm5vSGlzdG9yeSI7CmVsc2UgewogICAgICBvdXRjb21lID0gIm5vTG9jYXRpb24iOwogICAgICBpZiAoc2hhcmVkU3RhdGUuY29udGFpbnNLZXkoImZvcmdlUm9jay5kZXZpY2UucHJvZmlsZSIpICYmIHNoYXJlZFN0YXRlLmdldCgiZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlIikuY29udGFpbnNLZXkoImxvY2F0aW9uIikpIHsKICAgICAgICB2YXIgdGhpc0RldmljZSA9IHNoYXJlZFN0YXRlLmdldCgiZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlIik7CiAgICAgICAgICBvdXRjb21lID0gIm9rIjsKICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpCiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxvZ2luSGlzdG9yeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIHZhciBlbnRyeSA9IEpTT04ucGFyc2UobG9naW5IaXN0b3J5W2ldKTsKICAgICAgICAgICAgICB2YXIgbGFzdFNlbGVjdGVkRGF0ZSA9IGVudHJ5WyJsYXN0U2VsZWN0ZWREYXRlIl07CiAgICAgICAgICAgICAgdmFyIGxhc3RMb2NhdGlvbiA9IGVudHJ5WyJsb2NhdGlvbiJdOwogICAgICAgICAgICAgIHZhciB0aW1lRGlmZiA9IG5vdyAtIHBhcnNlSW50KGxhc3RTZWxlY3RlZERhdGUpOwogICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBjYWxjdWxhdGVEaXN0YW5jZSh7ICJsYXRpdHVkZSI6IHRoaXNEZXZpY2UuZ2V0KCJsb2NhdGlvbiIpLmdldCgibGF0aXR1ZGUiKSwgImxvbmdpdHVkZSI6IHRoaXNEZXZpY2UuZ2V0KCJsb2NhdGlvbiIpLmdldCgibG9uZ2l0dWRlIikgfSwgbGFzdExvY2F0aW9uKTsKICAgICAgICAgICAgICB2ZWxvY2l0eSA9IGRpc3RhbmNlIC8gKHRpbWVEaWZmIC8gMzYwMDAwMCk7CiAgICAgICAgICAgICAgaWYgKHZlbG9jaXR5ID4gTUFYX1ZFTE9DSVRZKSBvdXRjb21lID0gImltcG9zc2libGUiOwogICAgICAgIH0KICAgIH0KfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"cf3515f0-8278-4ee3-a530-1bad7424c416\",\"name\":\"Alpha OIDC Claims Script\",\"description\":\"Default alpha realm script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"0ca79cb0-ea11-4e87-adac-7f8aeebc8c03\",\"name\":\"Save Mobile OATH Preference\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkKKTsKd2l0aCAoZnIpIHsKICAKICB2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCiAgdmFyIG1mYVByZWZBdHRyaWJ1dGUgPSAiZnItYXR0ci1pbXVsdGkyIgogIHZhciBtZmFUeXBlID0gIiI7CiAgCiAgaWRSZXBvc2l0b3J5LmFkZEF0dHJpYnV0ZSh1c2VybmFtZSwgbWZhUHJlZkF0dHJpYnV0ZSwgWyJvYXRoIl0pOwogIAogIG91dGNvbWUgPSAidHJ1ZSIKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e3b1018f-1b2e-4e96-9950-087bdfa13d6d\",\"name\":\"Set New Favourite\",\"description\":\"null\",\"script\":\"ZnVuY3Rpb24gZ2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSkgewogIHZhciBpZCA9IHNoYXJlZFN0YXRlLmdldCgnX2lkJyk7CiAgdmFyIGZySWRtQ3VzdG9tQXR0cmlidXRlcyA9IGlkUmVwb3NpdG9yeS5nZXRBdHRyaWJ1dGUoaWQsICdmci1pZG0tY3VzdG9tLWF0dHJzJyk7CiAgaWYgKGZySWRtQ3VzdG9tQXR0cmlidXRlcykgewogICAgICB2YXIgZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0ID0gSlNPTi5wYXJzZShTdHJpbmcoZnJJZG1DdXN0b21BdHRyaWJ1dGVzLnRvQXJyYXkoKVswXSkpOwogICAgICAgIHJldHVybiBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdOwogIH0KfQoKZnVuY3Rpb24gc2V0Q3VzdG9tQXR0clZhbHVlIChjdXN0b21BdHRyTmFtZSxjdXN0b21BdHRyVmFsdWUpIHsKICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCAnZnItaWRtLWN1c3RvbS1hdHRycycpOwogIGlmIChmcklkbUN1c3RvbUF0dHJpYnV0ZXMpIHsKICAgIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3QgPSBKU09OLnBhcnNlKFN0cmluZyhmcklkbUN1c3RvbUF0dHJpYnV0ZXMudG9BcnJheSgpWzBdKSk7CiAgICBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdID0gY3VzdG9tQXR0clZhbHVlOwogICAgdmFyIGpzb25fc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0KTsKICAgIGlkUmVwb3NpdG9yeS5zZXRBdHRyaWJ1dGUoaWQsICJmci1pZG0tY3VzdG9tLWF0dHJzIixbanNvbl9zdHJpbmddKTsKICB9Cn0KCnZhciBhdHRyID0gZ2V0Q3VzdG9tQXR0clZhbHVlKCJjdXN0b21fZmF2b3VyaXRlRmFjdG9yIik7CmlmICghYXR0cil7CnNldEN1c3RvbUF0dHJWYWx1ZSAoImN1c3RvbV9mYXZvdXJpdGVGYWN0b3IiLCJXZWJBdXRoTiIpOwp9CgoKCm91dGNvbWUgPSAidHJ1ZSI7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"25e6c06d-cf70-473b-bd28-26931edc476b\",\"name\":\"OAuth2 Validate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Validation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgdmFsaWRhdGVzIHRoZSByZXF1ZXN0ZWQgc2NvcGVzIGFnYWluc3QgdGhlIGFsbG93ZWQgc2NvcGVzLgogKiBJZiBubyBzY29wZXMgYXJlIHJlcXVlc3RlZCwgZGVmYXVsdCBzY29wZXMgYXJlIGFzc3VtZWQuCiAqIFRoZSBzY3JpcHQgaGFzIGZvdXIgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgZGlmZmVyZW50IE9BdXRoMiBmbG93czoKICogICAgICAtIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlCiAqICAgICAgLSB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUKICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHJlcXVlc3RlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgVGhlIHNldCBvZiByZXF1ZXN0ZWQgc2NvcGVzLgogKiBkZWZhdWx0U2NvcGVzIC0gU2V0PFN0cmluZz4gKDEpLgogKiAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBkZWZhdWx0IHNjb3Blcy4KICogYWxsb3dlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgYWxsb3dlZCBzY29wZXMuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIGRlYnVnIGxvZ2dlciBpbnN0YW5jZToKICogICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgICAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9BVVRIMl9WQUxJREFURV9TQ09QRQogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKgogKiBUaHJvd3MgSW52YWxpZFNjb3BlRXhjZXB0aW9uOgogKiAgICAgIC0gaWYgdGhlcmUgYXJlIG5vIHNjb3BlcyByZXF1ZXN0ZWQgYW5kIGRlZmF1bHQgc2NvcGVzIGFyZSBlbXB0eQogKiAgICAgIC0gaWYgYSByZXF1ZXN0ZWQgc2NvcGUgaXMgbm90IGFsbG93ZWQKICoKICogUmV0dXJuIC0gYSBTZXQ8U3RyaW5nPiBvZiB2YWxpZGF0ZWQgc2NvcGVzICgxKS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICgyKSBDbGllbnQgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svaHR0cC9DbGllbnQuaHRtbC4KICovCgovKioKICogRGVmYXVsdCB2YWxpZGF0ZSBzY29wZSBzY3JpcHQuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZVNjb3BlcyAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkU2NvcGVFeGNlcHRpb24KICAgICk7CgogICAgdmFyIHNjb3BlczsKICAgIGlmIChyZXF1ZXN0ZWRTY29wZXMgPT0gbnVsbCB8fCByZXF1ZXN0ZWRTY29wZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgc2NvcGVzID0gZGVmYXVsdFNjb3BlczsKICAgIH0gZWxzZSB7CiAgICAgICAgc2NvcGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KGFsbG93ZWRTY29wZXMpOwogICAgICAgIHNjb3Blcy5yZXRhaW5BbGwocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICBpZiAocmVxdWVzdGVkU2NvcGVzLnNpemUoKSA+IHNjb3Blcy5zaXplKCkpIHsKICAgICAgICAgICAgdmFyIGludmFsaWRTY29wZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICAgICAgaW52YWxpZFNjb3Blcy5yZW1vdmVBbGwoYWxsb3dlZFNjb3Blcyk7CiAgICAgICAgICAgIHRocm93IG5ldyBmckphdmEuSW52YWxpZFNjb3BlRXhjZXB0aW9uKCdVbmtub3duL2ludmFsaWQgc2NvcGUocyknKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKHNjb3BlcyA9PSBudWxsIHx8IHNjb3Blcy5pc0VtcHR5KCkpIHsKICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRTY29wZUV4Y2VwdGlvbignTm8gc2NvcGUgcmVxdWVzdGVkIGFuZCBubyBkZWZhdWx0IHNjb3BlIGNvbmZpZ3VyZWQnKTsKICAgIH0KICAgIHJldHVybiBzY29wZXM7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlICgpIHsKICAgIHJldHVybiB2YWxpZGF0ZVNjb3BlcygpOwp9CgpmdW5jdGlvbiB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_VALIDATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"91d197de-5916-4dca-83b5-9a4df26e7159\",\"name\":\"WordPress Profile Normalization\",\"description\":\"Normalizes raw profile data from WordPress\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJuYW1lKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5hdmF0YXJfVVJMKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"name\":\"shared\",\"description\":\"set the same shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdzaGFyZWRWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzaGFyZWQgYWNyb3NzIGFsbCBuZXN0ZWQgam91cm5leXMuIEl0IGNvbnRhaW5zIGFuIGluZGljYXRvciBpbiB3aGljaCBsZXZlbCBpdCB3YXMgbGFzdCBzZXQuJyk7Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"5e854779-6ec1-4c39-aeba-0477e0986646\",\"name\":\"Config Provider Node Script\",\"description\":\"Script to provide values for a config provider node\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKioKICogVGhlIGZvbGxvd2luZyBzY3JpcHQgaXMgYSBzaW1wbGlmaWVkIHRlbXBsYXRlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0byBidWlsZAogKiB1cCBhIGNvbmZpZyBNYXAgb2JqZWN0IHdpdGggY3VzdG9tIHZhbHVlcy4gVGhlIENvbmZpZyBQcm92aWRlciBOb2RlIHdpbGwgdGhlbgogKiBwcm92aWRlIHRoaXMgY29uZmlnIE1hcCB0byB0aGUgZGVzaXJlZCBub2RlIHR5cGUuIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBNYXAKICogeW91IGJ1aWxkIGhlcmUgaXMgbmFtZWQgJ2NvbmZpZycuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKgogKiBub2RlU3RhdGUgLSBOb2RlIFN0YXRlICgxKQogKiAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoaXMgcmVwcmVzZW50cyB0aGUgY3VycmVudCB2YWx1ZXMgc3RvcmVkIGluIHRoZSBub2RlIHN0YXRlLgogKgogKiBpZFJlcG9zaXRvcnkgLSBQcm9maWxlIERhdGEgKDIpCiAqICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgYSByZXBvc2l0b3J5IHRvIHJldHJpZXZlIHVzZXIgaW5mb3JtYXRpb24uCiAqCiAqIHNlY3JldHMgLSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAoMykKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBTZWNyZXRzIEFQSSBmcm9tIGEgc2NyaXB0aW5nIGNvbnRleHQuCiAqCiAqIHJlcXVlc3RIZWFkZXJzICg0KSAtIE1hcCAoNSkKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIGZvciBhY2Nlc3NpbmcgaGVhZGVycyBpbiB0aGUgbG9naW4gcmVxdWVzdC4KICoKICogbG9nZ2VyIC0gRGVidWcgTG9nZ2luZyAoNikKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2UuCiAqCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoNykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cy4KICoKICogcmVhbG0gLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqCiAqIGV4aXN0aW5nU2Vzc2lvbiAtIE1hcDxTdHJpbmcsIFN0cmluZz4gKDUpCiAqICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LiBUaGUgcmV0dXJuZWQgbWFwIGZyb20KICogICAgICAgICAgU1NPVG9rZW4uZ2V0UHJvcGVydGllcygpICg4KQogKgogKiByZXF1ZXN0UGFyYW1ldGVycyAtIE1hcCAoNSkKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBwYXJhbWV0ZXJzLgogKgogKgogKiBPdXRwdXRzOgogKgogKiBjb25maWcgLSBNYXAgKDUpCiAqICAgICAgICAgICBEZWZpbmUgYW5kIGZpbGwgYSBNYXAgb2JqZWN0IG5hbWVkICdjb25maWcnIHdpdGggY3VzdG9tIHZhbHVlcywgdGhpcyB3aWxsIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlCiAqICAgICAgICAgICBhc3NvY2lhdGVkIG5vZGUgc2VsZWN0ZWQgaW4gdGhlIENvbmZpZ1Byb3ZpZGVyTm9kZS4KICoKICogUmVmZXJlbmNlOgogKiAoMSkgTm9kZSBTdGF0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9pZGNsb3VkLWFtL2xhdGVzdC9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtbm9kZVN0YXRlCiAqICgyKSBQcm9maWxlIERhdGEgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4xL2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1pZC1yZXBvCiAqICgzKSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjEvYXV0aGVudGljYXRpb24tZ3VpZGUvc2NyaXB0aW5nLWFwaS1ub2RlLmh0bWwjc2NyaXB0aW5nLWFwaS1hdXRobi1zZWNyZXRzCiAqICg0KSBSZXF1ZXN0IEhlYWRlcnMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtcmVxdWVzdEhlYWRlcnMuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL01hcC5odG1sCiAqICg2KSBEZWJ1ZyBMb2dnaW5nIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogKDcpIEhUVFAgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg4KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqLwoKY29uZmlnID0gewogICAgImtleTAiOiB7InN1YktleSI6ICJ2YWx1ZTAifSwKICAgICJrZXkxIjogInZhbHVlMSIKfTs=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"CONFIG_PROVIDER_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1d475815-72cb-42eb-aafd-4026989d28a7\",\"name\":\"Social Identity Provider Profile Transformation Script\",\"description\":\"Default global script for Social Identity Provider Profile Transformation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyogRGVmYXVsdCBTb2NpYWwgSWRlbnRpdHkgUHJvdmlkZXIgUHJvZmlsZSBUcmFuc2Zvcm1hdGlvbiBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzICov\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"bae1d54a-e97d-4997-aa5d-c027f21af82c\",\"name\":\"Facebook Profile Normalization\",\"description\":\"Normalizes raw profile data from Facebook\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQ==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"36863ffb-40ec-48b9-94b1-9a99f71cc3b5\",\"name\":\"OIDC Claims Script\",\"description\":\"Default global script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c827d2b4-3608-4693-868e-bbcf86bd87c7\",\"name\":\"Scripted Module - Client Side\",\"description\":\"Default global script for client side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTYtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qIERlZmF1bHQgQXV0aGVudGljYXRpb24gY2xpZW50IHNpZGUgc2NyaXB0IHRvIHVzZSBhcyBhIHRlbXBsYXRlIGZvciBuZXcgc2NyaXB0cyAqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"4c963bb3-7084-43d0-bcdc-a47482cf1825\",\"name\":\"Dummy\",\"description\":\"Dummy\",\"script\":\"Cm91dGNvbWUgPSAidHJ1ZSI7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"8e298710-b55e-4085-a464-88a375a4004b\",\"name\":\"Twitter Profile Normalization\",\"description\":\"Normalizes raw profile data from Twitter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkX3N0ciksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnByb2ZpbGVfaW1hZ2VfdXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnNjcmVlbl9uYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"634fb0b2-8873-4e78-8913-9a669e4f3816\",\"name\":\"Debug Shared State\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCik7CndpdGggKGZyKSB7CiAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgZGVidWcgPSBTdHJpbmcoIlNoYXJlZCBzdGF0ZTogIiArIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkgKyAiXFxuIik7CiAgICAgIGRlYnVnID0gU3RyaW5nKGRlYnVnICsgIlJlcXVlc3QgaGVhZGVyczogIiArIHJlcXVlc3RIZWFkZXJzLnRvU3RyaW5nKCkgKyAiXFxuIik7CiAgICAgIGlmICh0eXBlb2YgZXhpc3RpbmdTZXNzaW9uICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgZGVidWcgPSBTdHJpbmcoZGVidWcgKyAiRXhpc3Rpbmcgc2Vzc2lvbjogIiArICJcXG4iKTsKICAgICAgfSAgCiAgICAgICAgIGxvZ2dlci5lcnJvcigiSk9OSzogIiArIGRlYnVnKTsKICAgICAgc2NyaXB0ID0gU3RyaW5nKCdhbGVydCgiJytkZWJ1ZysnIik7Jyk7CiAgICAgIGFjdGlvbiA9IEFjdGlvbi5zZW5kKG5ldyBTY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2soc2NyaXB0KSkuYnVpbGQoKTsKICB9CiAgb3V0Y29tZSA9ICJ0cnVlIjsKfQ==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1244e639-4a31-401d-ab61-d75133d8dc9e\",\"name\":\"Instagram Profile Normalization\",\"description\":\"Normalizes raw profile data from Instagram\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"ed685f9f-5909-4726-86e8-22bd38b47663\",\"name\":\"Normalized Profile to Identity\",\"description\":\"Converts a normalized social profile into an Identity\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgaWRlbnRpdHkgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgiY24iLCBub3JtYWxpemVkUHJvZmlsZS5kaXNwbGF5TmFtZSksCiAgICAgICAgZmllbGQoInVzZXJOYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUudXNlcm5hbWUpLAogICAgICAgIGZpZWxkKCJpcGxhbmV0LWFtLXVzZXItYWxpYXMtbGlzdCIsIHNlbGVjdGVkSWRwICsgJy0nICsgbm9ybWFsaXplZFByb2ZpbGUuaWQuYXNTdHJpbmcoKSkpKQoKcmV0dXJuIGlkZW50aXR5\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"40a38167-2371-4d49-bbf1-e0e97ace3132\",\"name\":\"pwdlessCheck.js\",\"description\":\"null\",\"script\":\"b3V0Y29tZSA9ICJsZWdhY3kiOwp2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwppZihnZXRDdXN0b21BdHRyVmFsdWUoImN1c3RvbV9wYXNzd29yZGxlc3MiKT09dHJ1ZSkgewogIG91dGNvbWUgPSAicHdkbGVzcyI7Cn0KCmZ1bmN0aW9uIGdldEN1c3RvbUF0dHJWYWx1ZSAoY3VzdG9tQXR0ck5hbWUpCnsKICB2YXIgaWQgPSBzaGFyZWRTdGF0ZS5nZXQoJ19pZCcpOwogIHZhciBmcklkbUN1c3RvbUF0dHJpYnV0ZXMgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKGlkLCAnZnItaWRtLWN1c3RvbS1hdHRycycpOwogIGlmIChmcklkbUN1c3RvbUF0dHJpYnV0ZXMpCiAgewogICAgICB2YXIgZnJJZG1DdXN0b21BdHRyaWJ1dGVzT2JqZWN0ID0gSlNPTi5wYXJzZShTdHJpbmcoZnJJZG1DdXN0b21BdHRyaWJ1dGVzLnRvQXJyYXkoKVswXSkpOwogICAgICAgIHJldHVybiBmcklkbUN1c3RvbUF0dHJpYnV0ZXNPYmplY3RbY3VzdG9tQXR0ck5hbWVdOwogIH0KfQo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"9de3eb62-f131-4fac-a294-7bd170fd4acb\",\"name\":\"Scripted Policy Condition\",\"description\":\"Default global script for Scripted Policy Conditions\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qKgogKiBUaGlzIGlzIGEgUG9saWN5IENvbmRpdGlvbiBleGFtcGxlIHNjcmlwdC4gSXQgZGVtb25zdHJhdGVzIGhvdyB0byBhY2Nlc3MgYSB1c2VyJ3MgaW5mb3JtYXRpb24sCiAqIHVzZSB0aGF0IGluZm9ybWF0aW9uIGluIGV4dGVybmFsIEhUVFAgY2FsbHMgYW5kIG1ha2UgYSBwb2xpY3kgZGVjaXNpb24gYmFzZWQgb24gdGhlIG91dGNvbWUuCiAqLwoKdmFyIHVzZXJBZGRyZXNzLCB1c2VySVAsIHJlc291cmNlSG9zdDsKCmlmICh2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkpIHsKCiAgICB2YXIgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9IGdldENvdW50cnlGcm9tVXNlckFkZHJlc3MoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJDb3VudHJ5IHJldHJpZXZlZCBmcm9tIHVzZXIncyBhZGRyZXNzOiAiICsgY291bnRyeUZyb21Vc2VyQWRkcmVzcyk7CiAgICB2YXIgY291bnRyeUZyb21Vc2VySVAgPSBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpOwogICAgbG9nZ2VyLm1lc3NhZ2UoIkNvdW50cnkgcmV0cmlldmVkIGZyb20gdXNlcidzIElQOiAiICsgY291bnRyeUZyb21Vc2VySVApOwogICAgdmFyIGNvdW50cnlGcm9tUmVzb3VyY2VVUkkgPSBnZXRDb3VudHJ5RnJvbVJlc291cmNlVVJJKCk7CiAgICBsb2dnZXIubWVzc2FnZSgiQ291bnRyeSByZXRyaWV2ZWQgZnJvbSByZXNvdXJjZSBVUkk6ICIgKyBjb3VudHJ5RnJvbVJlc291cmNlVVJJKTsKCiAgICBpZiAoY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21Vc2VySVAgJiYgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21SZXNvdXJjZVVSSSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIFN1Y2NlZWRlZCIpOwogICAgICAgIHJlc3BvbnNlQXR0cmlidXRlcy5wdXQoImNvdW50cnlPZk9yaWdpbiIsIFtjb3VudHJ5RnJvbVVzZXJBZGRyZXNzXSk7CiAgICAgICAgYXV0aG9yaXplZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIEZhaWxlZCIpOwogICAgICAgIGF1dGhvcml6ZWQgPSBmYWxzZTsKICAgIH0KCn0gZWxzZSB7CiAgICBsb2dnZXIubWVzc2FnZSgiUmVxdWlyZWQgcGFyYW1ldGVycyBub3QgZm91bmQuIEF1dGhvcml6YXRpb24gRmFpbGVkLiIpOwogICAgYXV0aG9yaXplZCA9IGZhbHNlOwp9CgovKioKICogVXNlIHRoZSB1c2VyJ3MgYWRkcmVzcyB0byBsb29rdXAgdGhlaXIgY291bnRyeSBvZiByZXNpZGVuY2UuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgdXNlcidzIGNvdW50cnkgb2YgcmVzaWRlbmNlLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21Vc2VyQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlckFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgZ2VvY29kZSA9IEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvY29kZS5yZXN1bHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGdlb2NvZGUucmVzdWx0c1tpXTsKICAgICAgICB2YXIgajsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgcmVzdWx0LmFkZHJlc3NfY29tcG9uZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAocmVzdWx0LmFkZHJlc3NfY29tcG9uZW50c1tpXS50eXBlc1swXSA9PSAiY291bnRyeSIpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYWRkcmVzc19jb21wb25lbnRzW2ldLmxvbmdfbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKLyoqCiAqIFVzZSB0aGUgdXNlcidzIElQIHRvIGxvb2t1cCB0aGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqLwpmdW5jdGlvbiBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgdXNlcklQKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdC5jb3VudHJ5OwogICAgfQp9CgovKioKICogVXNlIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UncyBob3N0IG5hbWUgdG8gbG9va3VwIHRoZSBjb3VudHJ5IHdoZXJlIHRoZSByZXNvdXJjZSBpcyBob3N0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBpbiB3aGljaCB0aGUgcmVzb3VyY2UgaXMgaG9zdGVkLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21SZXNvdXJjZVVSSSgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgZW5jb2RlVVJJQ29tcG9uZW50KHJlc291cmNlSG9zdCkpOwogICAgICByZXF1ZXN0LnNldE1ldGhvZCgiR0VUIik7CgogICAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3QpLmdldCgpOwogICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwoKICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIGlmIChyZXN1bHQpIHsKICAgICAgICByZXR1cm4gcmVzdWx0LmNvdW50cnk7CiAgICB9Cn0KCi8qKgogKiBSZXRyaWV2ZSBhbmQgdmFsaWRhdGUgdGhlIHZhcmlhYmxlcyByZXF1aXJlZCB0byBtYWtlIHRoZSBleHRlcm5hbCBIVFRQIGNhbGxzLgogKgogKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2lsbCBiZSB0cnVlIGlmIHZhbGlkYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkgewogICAgdmFyIHVzZXJBZGRyZXNzU2V0ID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKCJwb3N0YWxBZGRyZXNzIik7CiAgICBpZiAodXNlckFkZHJlc3NTZXQgPT0gbnVsbCB8fCB1c2VyQWRkcmVzc1NldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gYWRkcmVzcyBzcGVjaWZpZWQgZm9yIHVzZXI6ICIgKyB1c2VybmFtZSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdXNlckFkZHJlc3MgPSB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIGFkZHJlc3M6ICIgKyB1c2VyQWRkcmVzcyk7CgogICAgaWYgKCFlbnZpcm9ubWVudCkgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJObyBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiB0aGUgZXZhbHVhdGlvbiByZXF1ZXN0LiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB2YXIgaXBTZXQgPSBlbnZpcm9ubWVudC5nZXQoIklQIik7CiAgICBpZiAoaXBTZXQgPT0gbnVsbCB8fCBpcFNldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gSVAgc3BlY2lmaWVkIGluIHRoZSBldmFsdWF0aW9uIHJlcXVlc3QgZW52aXJvbm1lbnQgcGFyYW1ldGVycy4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB1c2VySVAgPSBpcFNldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIElQOiAiICsgdXNlcklQKTsKCiAgICBpZiAoIXJlc291cmNlVVJJKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIHJlc291cmNlIFVSSSBzcGVjaWZpZWQuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmVzb3VyY2VIb3N0ID0gcmVzb3VyY2VVUkkubWF0Y2goL14oLio6XC9cLykod3d3XC4pPyhbQS1aYS16MC05XC1cLl0rKSg6WzAtOV0rKT8oLiopJC8pWzNdOwogICAgbG9nZ2VyLm1lc3NhZ2UoIlJlc291cmNlIGhvc3Q6ICIgKyByZXNvdXJjZUhvc3QpOwoKICAgIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"POLICY_CONDITION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"01bec3a8-105d-45dc-9f80-d003e1b33fa2\",\"name\":\"updateWebAuthNProfileNickname.js\",\"description\":\"null\",\"script\":\"dmFyIGlkID0gc2hhcmVkU3RhdGUuZ2V0KCJfaWQiKTsKdmFyIHByb2ZpbGVzID0gaWRSZXBvc2l0b3J5LmdldEF0dHJpYnV0ZShpZCwid2ViYXV0aG5EZXZpY2VQcm9maWxlcyIpOwp2YXIgb2JqZWN0QXR0cmlidXRlcyA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwp2YXIgbmV3Tmlja05hbWUgPSBvYmplY3RBdHRyaWJ1dGVzLmdldCgiY3VzdG9tX25pY2tuYW1lIik7Cgp2YXIgcHJvZmlsZXNBcnJheSA9IHByb2ZpbGVzLnRvQXJyYXkoKTsKCmZvciAodmFyIGk9MDsgaTxwcm9maWxlc0FycmF5Lmxlbmd0aDsgaSsrKQp7CiAgcHJvZmlsZXNBcnJheVtpXT1wcm9maWxlc0FycmF5W2ldLnJlcGxhY2UoIk5ldyBTZWN1cml0eSBLZXkiLG5ld05pY2tOYW1lKTsKfQppZFJlcG9zaXRvcnkuc2V0QXR0cmlidXRlKGlkLCJ3ZWJhdXRobkRldmljZVByb2ZpbGVzIixbXSk7CmZvciAodmFyIGk9MDsgaTxwcm9maWxlc0FycmF5Lmxlbmd0aDsgaSsrKQp7CiAgaWRSZXBvc2l0b3J5LmFkZEF0dHJpYnV0ZShpZCwid2ViYXV0aG5EZXZpY2VQcm9maWxlcyIscHJvZmlsZXNBcnJheVtpXSk7Cn0Kb3V0Y29tZSA9ICJzdWNjZXNzIjs=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"d58977ed-0542-4147-8197-973ef7300191\",\"name\":\"Custom Device Match Script\",\"description\":\"Custom Device Match Script\",\"script\":\"LyoKICogQ3VzdG9tIERldmljZSBNYXRjaCBTY3JpcHQKICovCgpvdXRjb21lID0gInRydWUiOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3d97c436-42c0-4dd0-a571-ea6f34f752b3\",\"name\":\"Itsme Profile Normalization\",\"description\":\"Normalizes raw profile data from Itsme\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKaW1wb3J0IG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUKCkpzb25WYWx1ZSBtYW5hZ2VkVXNlciA9IGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuc3ViKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmdpdmVuX25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5mYW1pbHlfbmFtZSksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQpyZXR1cm4gbWFuYWdlZFVzZXI=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"18940a0d-2997-49af-8cb9-9d8da38b4145\",\"name\":\"resetPush.js\",\"description\":\"null\",\"script\":\"aWQgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpOwppZFJlcG9zaXRvcnkuc2V0QXR0cmlidXRlKGlkLCAicHVzaERldmljZVByb2ZpbGVzIixbXSk7CgoKICAgIApvdXRjb21lID0gInRydWUiOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c735de08-f8f2-4e69-aa4a-2d8d3d438323\",\"name\":\"OAuth2 May Act Script\",\"description\":\"Default global script for OAuth2 May Act\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKiB0b2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gdG8gYmUgdXBkYXRlZC4gTXV0YWJsZSBvYmplY3QsIGFsbCBjaGFuZ2VzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gd2lsbCBiZSByZWZsZWN0ZWQuCiAqIGxvZ2dlciAtIGFsd2F5cyBwcmVzZW50LCBjb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIHNjcmlwdE5hbWUgLSBhbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0CiAqIHNlc3Npb24gLSBwcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdAogKiByZXF1ZXN0UHJvcGVydGllcyAtIGFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIHRoZSByZXF1ZXN0IFVSSQogKiAgICAgICAgICAgICAgICAgICAgIHJlYWxtIC0gdGhlIHJlYWxtIHRoYXQgdGhlIHJlcXVlc3QgcmVsYXRlcyB0bwogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBhIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLiBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IKICogICAgICAgICAgICAgICAgICAgICBtb3JlIHByb3BlcnRpZXMuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QKICogICAgICAgICAgICAgICAgICAgICBwcmFjdGljZXMuCiAqIGNsaWVudFByb3BlcnRpZXMgLSBwcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICBjbGllbnRJZCAtIHRoZSBjbGllbnQncyBVcmkgZm9yIHRoZSByZXF1ZXN0IGxvY2FsZQogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBsaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gbGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudAogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFNjb3BlcyAtIGxpc3Qgb2YgdGhlIGFsbG93ZWQgc2NvcGVzIGZvciB0aGUgY2xpZW50CiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzLCBlLmc6CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdE1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyB0ZXN0bWFwIC0+IEtleTEgLT4gVmFsdWUxCiAqCiAqIGlkZW50aXR5IC0gYWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIKICogc2NvcGVzIC0gYWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzCiAqLwovKgppbXBvcnQgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQoKdG9rZW4uc2V0TWF5QWN0KAogICAgSnNvblZhbHVlLmpzb24oSnNvblZhbHVlLm9iamVjdCgKICAgICAgICBKc29uVmFsdWUuZmllbGQoImNsaWVudF9pZCIsICJteUNsaWVudCIpLCAKICAgICAgICBKc29uVmFsdWUuZmllbGQoInN1YiIsICIodXNyIW15QWN0b3IpIikpKSkKKi8=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"OAUTH2_MAY_ACT\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c234ba0b-58a1-4cfd-9567-09edde980745\",\"name\":\"ForgeRock Internal: OAuth2 Access Token Modification Script\",\"description\":\"Internal token modification script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwovLyBTY3JpcHQgaXMgaW50ZW50aW9uYWxseSBlbXB0eQo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":1433147666269,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"58d29080-4563-480b-89bb-1e7719776a21\",\"name\":\"Google Profile Normalization\",\"description\":\"Normalizes raw profile data from Google\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3bd13a46-61c4-4974-8efb-1700c80c64e3\",\"name\":\"Inactive Device Match Script\",\"description\":\"Inactive Device Match Script\",\"script\":\"LyoKICogSW5hY3RpdmUgRGV2aWNlIE1hdGNoIFNjcmlwdAogKi8KCm91dGNvbWUgPSAidHJ1ZSI7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"343b3cc5-38f4-4e37-9d92-8ba0830936da\",\"name\":\"wks-RemoveButton\",\"description\":\"RemoveButton\",\"script\":\"LyogUmVtb3ZlIEJ1dHRvbgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBIaWRlIGJ1dHRvbnMgb24gdGhlIGpvdXJuZXkgcGFnZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfSkiCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICB2YXIgbWVzc2FnZSA9ICIgIgogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIG1lc3NhZ2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"13e3f263-9cd3-4844-8d1c-040fd0dd02eb\",\"name\":\"Device Profile Match Template - Decision Node Script\",\"description\":\"Default global script template for Device Profile Match decision node script for Authentication Tree\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGEgc2ltcGxpZmllZCB0ZW1wbGF0ZSBmb3IgdW5kZXJzdGFuZGluZwogKiB0aGUgYmFzaWNzIG9mIGRldmljZSBtYXRjaGluZy4gX1RoaXMgaXMgbm90IGZ1bmN0aW9uYWxseSBjb21wbGV0ZS5fCiAqIEZvciBhIGZ1bmN0aW9uYWxseSBjb21wbGV0ZSBzY3JpcHQgYXMgd2VsbCBhcyBhIGRldmVsb3BtZW50IHRvb2xraXQsCiAqIHZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9Gb3JnZVJvY2svZm9yZ2Vyb2NrLWRldmljZS1tYXRjaC1zY3JpcHQuCiAqCiAqIEdsb2JhbCBub2RlIHZhcmlhYmxlcyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGlzIHNjb3BlOgogKiAxLiBgc2hhcmVkU3RhdGVgIHByb3ZpZGVzIGFjY2VzcyB0byBpbmNvbWluZyByZXF1ZXN0CiAqIDIuIGBkZXZpY2VQcm9maWxlc0Rhb2AgcHJvdmlkZXMgYWNjZXNzIHRvIHN0b3JlZCBwcm9maWxlcwogKiAzLiBgb3V0Y29tZWAgdmFyaWFibGUgbWFwcyB0byBhdXRoIHRyZWUgbm9kZSBvdXRjb21lczsgdmFsdWVzIGFyZQogKiAgICAndHJ1ZScsICdmYWxzZScsIG9yICd1bmtub3duRGV2aWNlJyAobm90aWNlIF9hbGxfIGFyZSBzdHJpbmdzKS4KICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgcmVxdWVzdCdzIGRldmljZSBwcm9maWxlLgogKiBSZXR1cm5zIHNlcmlhbGl6ZWQgSlNPTiAodHlwZSBzdHJpbmcpOyBwYXJzaW5nIHRoaXMgd2lsbCByZXN1bHQgYQogKiBuYXRpdmUgSlMgb2JqZWN0LgogKi8KdmFyIGluY29taW5nSnNvbiA9IHNoYXJlZFN0YXRlLmdldCgnZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlJykudG9TdHJpbmcoKTsKdmFyIGluY29taW5nID0gSlNPTi5wYXJzZShpbmNvbWluZ0pzb24pOwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgdXNlcidzIHVzZXJuYW1lIGFuZCByZWFsbS4KICogTm90aWNlIHRoZSB1c2Ugb2YgYC5hc1N0cmluZygpYC4KICovCnZhciB1c2VybmFtZSA9IHNoYXJlZFN0YXRlLmdldCgidXNlcm5hbWUiKS5hc1N0cmluZygpOwp2YXIgcmVhbG0gPSBzaGFyZWRTdGF0ZS5nZXQoInJlYWxtIikuYXNTdHJpbmcoKTsKCi8qKgogKiBHZXQgdGhlIHVzZXIncyBzdG9yZWQgcHJvZmlsZXMgZm9yIGFwcHJvcHJpYXRlIHJlYWxtLgogKiBSZXR1cm5zIGEgX3NwZWNpYWxfIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIHByb2ZpbGUgZGF0YQogKi8KdmFyIHN0b3JlZFByb2ZpbGVzID0gZGV2aWNlUHJvZmlsZXNEYW8uZ2V0RGV2aWNlUHJvZmlsZXModXNlcm5hbWUsIHJlYWxtKTsKCi8vIERlZmF1bHQgdG8gYG91dGNvbWVgIG9mICd1bmtub3duRGV2aWNlJwpvdXRjb21lID0gJ3Vua25vd25EZXZpY2UnOwoKaWYgKHN0b3JlZFByb2ZpbGVzKSB7CiAgICB2YXIgaSA9IDA7CiAgICAvLyBOT1RFOiBgLnNpemUoKWAgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBzdG9yZWQgcHJvZmlsZXMKICAgIHZhciBsZW4gPSBzdG9yZWRQcm9maWxlcy5zaXplKCk7CgogICAgZm9yIChpOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIHN0b3JlZCBwcm9maWxlLgogICAgICAgICAqIFJldHVybnMgc2VyaWFsaXplZCBKU09OICh0eXBlIHN0cmluZyk7IHBhcnNpbmcgdGhpcyB3aWxsIHJlc3VsdAogICAgICAgICAqIGEgbmF0aXZlIEpTIG9iamVjdC4KICAgICAgICAgKi8KICAgICAgICB2YXIgc3RvcmVkSnNvbiA9IHN0b3JlZFByb2ZpbGVzLmdldChpKTsKICAgICAgICB2YXIgc3RvcmVkID0gSlNPTi5wYXJzZShzdG9yZWRKc29uKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogRmluZCBhIHN0b3JlZCBwcm9maWxlIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllci4KICAgICAgICAgKi8KICAgICAgICBpZiAoaW5jb21pbmcuaWRlbnRpZmllciA9PT0gc3RvcmVkLmlkZW50aWZpZXIpIHsKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBOb3cgdGhhdCB5b3UndmUgZm91bmQgdGhlIGFwcHJvcHJpYXRlIHByb2ZpbGUsIHlvdSB3aWxsIHBlcmZvcm0KICAgICAgICAgICAgICogdGhlIGxvZ2ljIGhlcmUgdG8gbWF0Y2ggdGhlIHZhbHVlcyBvZiB0aGUgYGluY29taW5nYCBwcm9maWxlCiAgICAgICAgICAgICAqIHdpdGggdGhhdCBvZiB0aGUgYHN0b3JlZGAgcHJvZmlsZS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogVGhlIHJlc3VsdCBvZiB0aGUgbWF0Y2hpbmcgbG9naWMgaXMgYXNzaWduZWQgdG8gYG91dGNvbWVgLiBTaW5jZQogICAgICAgICAgICAgKiB3ZSBoYXZlIHByb2ZpbGVzIG9mIHRoZSBzYW1lIGlkZW50aWZpZXIsIHRoZSB2YWx1ZSAodHlwZSBzdHJpbmcpCiAgICAgICAgICAgICAqIHNob3VsZCBub3cgYmUgZWl0aGVyICd0cnVlJyBvciAnZmFsc2UnIChwcm9wZXJ0aWVzIG1hdGNoZWQgb3Igbm90KS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0b3BpYywgdmlzaXQgdGhpcyBHaXRodWIgcmVwbzoKICAgICAgICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL0ZvcmdlUm9jay9mb3JnZXJvY2stZGV2aWNlLW1hdGNoLXNjcmlwdAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgb3V0Y29tZSA9ICdmYWxzZSc7CiAgICAgICAgfQogICAgfQp9\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"name\":\"Remove Button\",\"description\":\"Remove button from page.\",\"script\":\"LyogUmVtb3ZlIEJ1dHRvbgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBIaWRlIGJ1dHRvbnMgb24gdGhlIGpvdXJuZXkgcGFnZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfSkiCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICB2YXIgbWVzc2FnZSA9ICIgIgogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIG1lc3NhZ2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9Cn0oKSk7\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"472534ec-a25f-468d-a606-3fb1935190df\",\"name\":\"WeChat Profile Normalization\",\"description\":\"Normalizes raw profile data from WeChat\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLm9wZW5pZCksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uaWNrbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5oZWFkaW1ndXJsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLm5pY2tuYW1lKSkp\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6325cf19-a49b-471e-8d26-7e4df76df0e2\",\"name\":\"Okta Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJPa3RhIHJhd1Byb2ZpbGU6ICIrcmF3UHJvZmlsZSkKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5wcmVmZXJyZWRfdXNlcm5hbWUpKSk=\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"7b88752e-5529-459c-a970-1fb78ff0d87f\",\"name\":\"Set Email Verified\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkKKTsKd2l0aCAoZnIpIHsKICAKICB2YXIgdXNlcm5hbWUgPSBzaGFyZWRTdGF0ZS5nZXQoIl9pZCIpCiAgdmFyIGF0dHJpYnV0ZSA9ICJmci1hdHRyLXN0cjEiCiAKICBpZFJlcG9zaXRvcnkuc2V0QXR0cmlidXRlKHVzZXJuYW1lLCBhdHRyaWJ1dGUsIFsidmVyaWZpZWQiXSk7CiAgCiAgb3V0Y29tZSA9ICJ0cnVlIgp9\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1f389a3d-21cf-417c-a6d3-42ea620071f0\",\"name\":\"ForgeRock Internal: OIDC Claims Script\",\"description\":\"Internal OIDC Claims script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6c49bebe-3a62-11ed-a261-0242ac120002\",\"name\":\"Library Script\",\"description\":\"Default global library script to be referenced from other scripts\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjItMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIGlzIGFuIGV4YW1wbGUgbGlicmFyeSBzY3JpcHQgd2l0aCBtZXRob2RzIHRoYXQgY2FuIGJlIHVzZWQgaW4gb3RoZXIgc2NyaXB0cy4KICogVG8gcmVmZXJlbmNlIGl0LCB1c2UgdGhlIGZvbGxvd2luZzoKICoKICogdmFyIGxpYnJhcnkgPSByZXF1aXJlKCJMaWJyYXJ5IFNjcmlwdCIpOwogKgogKiBsaWJyYXJ5LmxvZ0Vycm9yKGxvZ2dlciwgIkVycm9yIG1lc3NhZ2UiKTsKICogbGlicmFyeS5sb2dEZWJ1Zyhsb2dnZXIsICJEZWJ1ZyBtZXNzYWdlIik7CiAqLwoKZnVuY3Rpb24gbG9nRXJyb3IobG9nLCBlcnJvck1lc3NhZ2UpIHsKICBsb2cuZXJyb3IoZXJyb3JNZXNzYWdlKTsKfQoKZnVuY3Rpb24gbG9nV2FybmluZyhsb2csIHdhcm5pbmdNZXNzYWdlKSB7CiAgbG9nLndhcm4od2FybmluZ01lc3NhZ2UpOwp9CgpleHBvcnRzLmxvZ0Vycm9yID0gbG9nRXJyb3I7CmV4cG9ydHMubG9nV2FybmluZyA9IGxvZ1dhcm5pbmc7CgovLyBBbHRlcm5hdGl2ZWx5LCBleHBvcnRzIGNhbiBiZSBkZWNsYXJlZCB1c2luZyBhbiBpbmxpbmUgYXJyb3cgZnVuY3Rpb24KCmV4cG9ydHMubG9nSW5mbyA9IChsb2csIGluZm9NZXNzYWdlKSA9PiBsb2cuaW5mbyhpbmZvTWVzc2FnZSk7CmV4cG9ydHMubG9nRGVidWcgPSAobG9nLCBkZWJ1Z01lc3NhZ2UpID0+IGxvZy5kZWJ1ZyhkZWJ1Z01lc3NhZ2UpOw==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org\",\"creationDate\":1433147666269,\"lastModifiedBy\":\"id=dsameuser,ou=user,dc=openam,dc=forgerock,dc=org\",\"lastModifiedDate\":1433147666269,\"evaluatorVersion\":\"2.0\"}],\"resultCount\":94,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" }, "cookies": [], "headers": [ @@ -114,16 +118,20 @@ }, { "name": "date", - "value": "Sat, 30 Sep 2023 16:45:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:21 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-a3f32770-5881-4c4f-82d9-180a286b5f60" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -133,14 +141,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 780, + "headersSize": 800, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2023-09-30T16:45:21.249Z", - "time": 238, + "startedDateTime": "2024-06-19T21:28:21.994Z", + "time": 124, "timings": { "blocked": -1, "connect": -1, @@ -148,7 +156,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 238 + "wait": 124 } } ], diff --git a/src/test/mock-recordings/ScriptOps_3024995978/updateScript_946092580/1-Update-script-3b2f6836-184c-4ee9-8a1d-557cb01837a5_1504176254/recording.har b/src/test/mock-recordings/ScriptOps_3024995978/updateScript_946092580/1-Update-script-3b2f6836-184c-4ee9-8a1d-557cb01837a5_1504176254/recording.har index 658e4aa97..2542595c3 100644 --- a/src/test/mock-recordings/ScriptOps_3024995978/updateScript_946092580/1-Update-script-3b2f6836-184c-4ee9-8a1d-557cb01837a5_1504176254/recording.har +++ b/src/test/mock-recordings/ScriptOps_3024995978/updateScript_946092580/1-Update-script-3b2f6836-184c-4ee9-8a1d-557cb01837a5_1504176254/recording.har @@ -25,11 +25,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.0-32" + "value": "@rockcarver/frodo-lib/2.0.0-85" }, { "name": "x-forgerock-transactionid", - "value": "frodo-a3f32770-5881-4c4f-82d9-180a286b5f60" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "accept-api-version", @@ -41,14 +41,18 @@ }, { "name": "content-length", - "value": 969 + "value": "969" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" }, { "name": "host", "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 1635, + "headersSize": 1681, "httpVersion": "HTTP/1.1", "method": "PUT", "postData": { @@ -60,11 +64,11 @@ "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts/3b2f6836-184c-4ee9-8a1d-557cb01837a5" }, "response": { - "bodySize": 1126, + "bodySize": 1151, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1126, - "text": "{\"_id\":\"3b2f6836-184c-4ee9-8a1d-557cb01837a5\",\"_rev\":\"-1466669380\",\"name\":\"FrodoTestScript3\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"id=b672336b-41ef-428d-ae4a-e0c082875377,ou=user,ou=am-config\",\"creationDate\":1696092321727,\"lastModifiedBy\":\"id=b672336b-41ef-428d-ae4a-e0c082875377,ou=user,ou=am-config\",\"lastModifiedDate\":1696092321727}" + "size": 1151, + "text": "{\"_id\":\"3b2f6836-184c-4ee9-8a1d-557cb01837a5\",\"_rev\":\"-1564408225\",\"name\":\"FrodoTestScript3\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOw==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"id=ba58ff99-76d3-4c69-9c4a-7f150ac70e2c,ou=user,ou=am-config\",\"creationDate\":1718832502358,\"lastModifiedBy\":\"id=ba58ff99-76d3-4c69-9c4a-7f150ac70e2c,ou=user,ou=am-config\",\"lastModifiedDate\":1718832502358,\"evaluatorVersion\":\"1.0\"}" }, "cookies": [], "headers": [ @@ -102,7 +106,7 @@ }, { "name": "etag", - "value": "\"-1466669380\"" + "value": "\"-1564408225\"" }, { "name": "expires", @@ -122,20 +126,24 @@ }, { "name": "content-length", - "value": "1126" + "value": "1151" }, { "name": "date", - "value": "Sat, 30 Sep 2023 16:45:20 GMT" + "value": "Wed, 19 Jun 2024 21:28:21 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-a3f32770-5881-4c4f-82d9-180a286b5f60" + "value": "frodo-447d3073-7deb-4a25-ad58-3dc0d7dffb62" }, { "name": "strict-transport-security", "value": "max-age=31536000; includeSubDomains; preload;" }, + { + "name": "x-robots-tag", + "value": "none" + }, { "name": "via", "value": "1.1 google" @@ -145,14 +153,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 898, + "headersSize": 918, "httpVersion": "HTTP/1.1", "redirectURL": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts/3b2f6836-184c-4ee9-8a1d-557cb01837a5", "status": 201, "statusText": "Created" }, - "startedDateTime": "2023-09-30T16:45:21.658Z", - "time": 74, + "startedDateTime": "2024-06-19T21:28:22.299Z", + "time": 70, "timings": { "blocked": -1, "connect": -1, @@ -160,7 +168,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 74 + "wait": 70 } } ], diff --git a/src/test/snapshots/ops/ScriptOps.test.js.snap b/src/test/snapshots/ops/ScriptOps.test.js.snap index 524923a16..4814aafc3 100644 --- a/src/test/snapshots/ops/ScriptOps.test.js.snap +++ b/src/test/snapshots/ops/ScriptOps.test.js.snap @@ -18,6 +18,7 @@ exports[`ScriptOps exportScript() 1: Export script by id c9cb4b1e-1cd3-4e5b-8f56 "creationDate": 0, "default": false, "description": "Check if username has already been collected.", + "evaluatorVersion": "1.0", "language": "JAVASCRIPT", "lastModifiedBy": "null", "lastModifiedDate": 0, @@ -61,6 +62,7 @@ exports[`ScriptOps exportScriptByName() 1: Export script by name FrodoTestScript "creationDate": 0, "default": false, "description": "Check if username has already been collected.", + "evaluatorVersion": "1.0", "language": "JAVASCRIPT", "lastModifiedBy": "null", "lastModifiedDate": 0, @@ -97,252 +99,476 @@ exports[`ScriptOps exportScripts() 1: Export all scripts 1`] = ` { "meta": Any, "script": { - "10643e95-873a-4ec0-b713-a7f56760d179": { - "_id": "10643e95-873a-4ec0-b713-a7f56760d179", + "01bec3a8-105d-45dc-9f80-d003e1b33fa2": { + "_id": "01bec3a8-105d-45dc-9f80-d003e1b33fa2", "context": "AUTHENTICATION_TREE_DECISION_NODE", "createdBy": "null", "creationDate": 0, "default": false, - "description": "Check if username has already been collected.", + "description": "null", "evaluatorVersion": "1.0", "language": "JAVASCRIPT", "lastModifiedBy": "null", "lastModifiedDate": 0, - "name": "FrodoTestScript4", + "name": "updateWebAuthNProfileNickname.js", "script": [ - "/* Check Username", - " *", - " * Author: volker.scheuber@forgerock.com", - " * ", - " * Check if username has already been collected.", - " * Return "known" if yes, "unknown" otherwise.", - " * ", - " * This script does not need to be parametrized. It will work properly as is.", - " * ", - " * The Scripted Decision Node needs the following outcomes defined:", - " * - known", - " * - unknown", - " */", - "(function () {", - " if (null != sharedState.get("username")) {", - " outcome = "known";", - " }", - " else {", - " outcome = "unknown";", - " }", - "}());", + "var id = sharedState.get("_id");", + "var profiles = idRepository.getAttribute(id,"webauthnDeviceProfiles");", + "var objectAttributes = sharedState.get("objectAttributes");", + "var newNickName = objectAttributes.get("custom_nickname");", + "", + "var profilesArray = profiles.toArray();", + "", + "for (var i=0; i -1)", + "{", + " outcome = "suspended";", + "}", + "else", + "{", + " var userAttrRaw = idRepository.getAttribute(_id, attribute);", + " if (userAttrRaw && userAttrRaw.iterator().hasNext()) {", + " userAttr = JSON.parse(userAttrRaw.iterator().next().toString());", + " epochAttrMinute = userAttr[0];", + " attemptCount = userAttr[1];", + " attemptCount = attemptCount + 1;", + " }", "", - "import static org.forgerock.json.JsonValue.field", - "import static org.forgerock.json.JsonValue.json", - "import static org.forgerock.json.JsonValue.object", + " //if(", "", - "logger.warning("GitHub rawProfile: "+rawProfile)", + " var newAttr;", + " if(epochCurrentMinute==epochAttrMinute) {", + " newAttr = String("[" + epochAttrMinute.toString() + "," + attemptCount.toString() + "]");", + " }", + " else {", + " attemptCount=1;", + " newAttr = String("[" + epochCurrentMinute.toString() + "," + attemptCount.toString() + "]");", + " }", + " idRepository.setAttribute(_id, "fr-attr-str2",[newAttr]);", "", - "return json(object(", - " field("id", rawProfile.id),", - " field("displayName", rawProfile.name),", - " field("givenName", rawProfile.first_name),", - " field("familyName", rawProfile.last_name),", - " field("photoUrl", rawProfile.picture.data.url),", - " field("email", rawProfile.email),", - " field("username", rawProfile.email)))", + " if(attemptCount>threshold) {", + " outcome = "true";", + " }", + " else {", + " outcome = "false";", + " }", + "}", ], }, - "39c08084-1238-43e8-857f-2e11005eac49": { - "_id": "39c08084-1238-43e8-857f-2e11005eac49", - "context": "OAUTH2_ACCESS_TOKEN_MODIFICATION", + "07ee6240-d106-4e25-a781-5fcabc477d22": { + "_id": "07ee6240-d106-4e25-a781-5fcabc477d22", + "context": "SAML2_SP_ADAPTER", "createdBy": "null", "creationDate": 0, "default": false, - "description": "Default alpha realm script for OAuth2 Access Token Modification", + "description": "null", "evaluatorVersion": "1.0", "language": "JAVASCRIPT", "lastModifiedBy": "null", "lastModifiedDate": 0, - "name": "Alpha OAuth2 Access Token Modification Script", + "name": "FrodoSPAdapter", "script": [ "/*", - " * Copyright 2019-2021 ForgeRock AS. All Rights Reserved.", + " * Copyright 2023 ForgeRock AS. All Rights Reserved", " *", - " * Use of this code requires a commercial software license with ForgeRock AS", + " * Use of this code requires a commercial software license with ForgeRock AS.", " * or with one of its affiliates. All use shall be exclusively subject", " * to such license between the licensee and ForgeRock AS.", " */", "", "/*", - " * This script lets you modify information associated with an OAuth2 access token", - " * with methods provided by the AccessToken (1) interface.", - " * The changes made to OAuth2 access tokens will directly impact the size of the CTS tokens,", - " * and, similarly, the size of the JWTs if client-based OAuth2 tokens are utilized.", - " * When adding/updating fields make sure that the token size remains within client/user-agent limits.", + " * The script has these top level functions that could be executed during a SAML2 flow.", + " * - preSingleSignOnRequest", + " * - preSingleSignOnProcess", + " * - postSingleSignOnSuccess", + " * - postSingleSignOnFailure", + " * - postNewNameIDSuccess", + " * - postTerminateNameIDSuccess", + " * - preSingleLogoutProcess", + " * - postSingleLogoutSuccess", " *", - " * Defined variables:", - " * accessToken - AccessToken (1).", - " * The access token to be updated.", - " * Mutable object, all changes to the access token will be reflected.", - " * scopes - Set (6).", - " * Always present, the requested scopes.", - " * requestProperties - Unmodifiable Map (5).", - " * Always present, contains a map of request properties:", - " * requestUri - The request URI.", - " * realm - The realm that the request relates to.", - " * requestParams - A map of the request params and/or posted data.", - " * Each value is a list of one or more properties.", - " * Please note that these should be handled in accordance with OWASP best practices:", - " * https://owasp.org/www-community/vulnerabilities/Unsafe_use_of_Reflection.", - " * clientProperties - Unmodifiable Map (5).", - " * Present if the client specified in the request was identified, contains a map of client properties:", - " * clientId - The client's URI for the request locale.", - " * allowedGrantTypes - List of the allowed grant types (org.forgerock.oauth2.core.GrantType) for the client.", - " * allowedResponseTypes - List of the allowed response types for the client.", - " * allowedScopes - List of the allowed scopes for the client.", - " * customProperties - A map of the custom properties of the client.", - " * Lists or maps will be included as sub-maps; for example:", - " * customMap[Key1]=Value1 will be returned as customMap -> Key1 -> Value1.", - " * To add custom properties to a client, update the Custom Properties field", - " * in AM Console > Realm Name > Applications > OAuth 2.0 > Clients > Client ID > Advanced.", - " * identity - AMIdentity (3).", - " * Always present, the identity of the resource owner.", - " * session - SSOToken (4).", - " * Present if the request contains the session cookie, the user's session object.", - " * scriptName - String (primitive).", - " * Always present, the display name of the script.", - " * logger - Always present, the "OAuth2Provider" debug logger instance:", - " * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-logger.html#scripting-api-global-logger.", - " * Corresponding log files will be prefixed with: scripts.OAUTH2_ACCESS_TOKEN_MODIFICATION.", - " * httpClient - HTTP Client (8).", - " * Always present, the HTTP Client instance:", - " * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-http-client.html#scripting-api-global-http-client.", + " * Please see the JavaDoc for the interface for more information about these methods.", + " * https://backstage.forgerock.com/docs/am/7.3/_attachments/apidocs/org/forgerock/openam/saml2/plugins/SPAdapter.html", + " * Note that the initialize method is not supported in the scripts.", " *", - " * Return - no value is expected, changes shall be made to the accessToken parameter directly.", + " * Defined variables. Check the documentation on the respective functions for the variables available to it.", + " *", + " * hostedEntityId - String", + " * Entity ID for the hosted IDP", + " * realm - String", + " * Realm of the hosted IDP", + " * idpEntityId - String", + " * The entity ID for the Identity Provider for which the sign-on request will be sent.", + " * request - HttpServletRequest (1)", + " * Servlet request object", + " * response - HttpServletResponse (2)", + " * Servlet response object", + " * authnRequest - AuthnRequest (3)", + " * The authentication request sent that is sent from the Service Provider.", + " * session - SSOToken (4)", + " * The single sign-on session. The reference type of this is Object and would need to be casted to SSOToken.", + " * res - Response (5)", + " * The SSO Response received from the Identity Provider.", + " * profile - String", + " * The protocol profile that is used, this will be one of the following values from SAML2Constants (6):", + " * - SAML2Constants.HTTP_POST", + " * - SAML2Constants.HTTP_ARTIFACT", + " * - SAML2Constants.PAOS", + " * out - PrintWriter (7)", + " * The PrintWriter that can be used to write to.", + " * isFederation - boolean", + " * Set to true if using federation, otherwise false.", + " * failureCode - int", + " * An integer holding the failure code when an error has occurred. For potential values see SPAdapter.", + " * userId - String", + " * The unique universal ID of the user with whom the new name identifier request was performed.", + " * idRequest - ManageNameIDRequest (8)", + " * The new name identifier request, this will be null if the request object is not available", + " * idResponse - ManageNameIDResponse (9)", + " * The new name identifier response, this will be null if the response object is not available", + " * binding - String", + " * The binding used for the new name identifier request. This will be one of the following values:", + " * - SAML2Constants.SOAP", + " * - SAML2Constants.HTTP_REDIRECT", + " * logoutRequest - LogoutRequest (10)", + " * The single logout request.", + " * logoutResponse - LogoutResponse (11)", + " * The single logout response.", + " * spAdapterScriptHelper - SpAdapterScriptHelper (12)", + " * An instance of SpAdapterScriptHelper containing helper methods. See Javadoc for more details.", + " * logger - Logger instance", + " * https://backstage.forgerock.com/docs/am/7/scripting-guide/scripting-api-global-logger.html#scripting-api-global-logger.", + " * Corresponding log files will be prefixed with: scripts.