@valueflows/vf-graphql-holochain
Version:
GraphQL schema bindings for the Holochain implementation of ValueFlows
95 lines • 18.8 kB
JavaScript
/**
* Resolvers for Process fields
*
* @package: HoloREA
* @since: 2019-09-12
*/
import { injectTypename, DEFAULT_VF_MODULES, VfModule } from '../types.js';
import { mapZomeFn, extractEdges } from '../connection.js';
import planQueries from '../queries/plan.js';
export default (enabledVFModules = DEFAULT_VF_MODULES, dnaConfig, conductorUri) => {
const hasHistory = -1 !== enabledVFModules.indexOf(VfModule.History);
const hasObservation = -1 !== enabledVFModules.indexOf(VfModule.Observation);
const hasProcessSpecification = -1 !== enabledVFModules.indexOf(VfModule.ProcessSpecification);
const hasCommitment = -1 !== enabledVFModules.indexOf(VfModule.Commitment);
const hasIntent = -1 !== enabledVFModules.indexOf(VfModule.Intent);
const hasPlan = -1 !== enabledVFModules.indexOf(VfModule.Plan);
const hasAgent = -1 !== enabledVFModules.indexOf(VfModule.Agent);
const readRevision = mapZomeFn(dnaConfig, conductorUri, 'observation', 'process', 'get_revision');
const readEvents = mapZomeFn(dnaConfig, conductorUri, 'observation', 'economic_event_index', 'query_economic_events');
const readCommitments = mapZomeFn(dnaConfig, conductorUri, 'planning', 'commitment_index', 'query_commitments');
const readIntents = mapZomeFn(dnaConfig, conductorUri, 'planning', 'intent_index', 'query_intents');
const readProcessBasedOn = mapZomeFn(dnaConfig, conductorUri, 'specification', 'process_specification', 'get_process_specification');
const readPlan = planQueries(dnaConfig, conductorUri)['plan'];
const readAgent = mapZomeFn(dnaConfig, conductorUri, 'agent', 'agent', 'get_agent');
return Object.assign({
nextProcesses: () => {
throw new Error('resolver unimplemented');
},
previousProcesses: () => {
throw new Error('resolver unimplemented');
},
}, (hasObservation ? {
observedInputs: injectTypename('EconomicEvent', async (record) => {
const results = await readEvents({ params: { inputOf: record.id } });
return extractEdges(results);
}),
observedOutputs: injectTypename('EconomicEvent', async (record) => {
const results = await readEvents({ params: { outputOf: record.id } });
return extractEdges(results);
}),
unplannedInputs: () => {
throw new Error('resolver unimplemented');
},
unplannedOutputs: () => {
throw new Error('resolver unimplemented');
},
previous: () => {
throw new Error('resolver unimplemented');
},
next: () => {
throw new Error('resolver unimplemented');
},
} : {}), (hasCommitment ? {
committedInputs: injectTypename('Commitment', async (record) => {
const results = await readCommitments({ params: { inputOf: record.id } });
return extractEdges(results);
}),
committedOutputs: injectTypename('Commitment', async (record) => {
const results = await readCommitments({ params: { outputOf: record.id } });
return extractEdges(results);
}),
} : {}), (hasIntent ? {
intendedInputs: async (record) => {
const results = await readIntents({ params: { inputOf: record.id } });
return extractEdges(results);
},
intendedOutputs: async (record) => {
const results = await readIntents({ params: { outputOf: record.id } });
return extractEdges(results);
},
} : {}), (hasProcessSpecification ? {
basedOn: async (record) => {
return (await readProcessBasedOn({ address: record.basedOn })).processSpecification;
},
} : {}), (hasPlan ? {
plannedWithin: async (record) => {
return (await readPlan(record, { id: record.plannedWithin }));
},
} : {}), (hasAgent ? {
involvedAgents: () => {
throw new Error('resolver unimplemented');
},
workingAgents: async (record) => {
return (await Promise.all((record.workingAgents || []).map((address) => readAgent({ address })))).map((agentResponse) => agentResponse.agent);
},
inScopeOf: async (record) => {
return (await Promise.all((record.inScopeOf || []).map((address) => readAgent({ address })))).map((agentResponse) => agentResponse.agent);
},
} : {}), (hasHistory ? {
revision: async (record, args) => {
return (await readRevision(args)).process;
},
} : {}));
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc29sdmVycy9wcm9jZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFpQixjQUFjLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUE0RixNQUFNLGFBQWEsQ0FBQTtBQUNuTCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBaUIxRCxPQUFPLFdBQVcsTUFBTSxvQkFBb0IsQ0FBQTtBQUk1QyxlQUFlLENBQUMsbUJBQStCLGtCQUFrQixFQUFFLFNBQXdCLEVBQUUsWUFBb0IsRUFBRSxFQUFFO0lBQ25ILE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUM1RSxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUM5RixNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzFFLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbEUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM5RCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMs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RSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN2SSxDQUFDO0tBQ0YsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQ1AsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ1osUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFlLEVBQUUsSUFBMkMsRUFBb0IsRUFBRTtZQUNqRyxPQUFPLENBQUMsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7UUFDM0MsQ0FBQztLQUNGLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNSLENBQUE7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlc29sdmVycyBmb3IgUHJvY2VzcyBmaWVsZHNcbiAqXG4gKiBAcGFja2FnZTogSG9sb1JFQVxuICogQHNpbmNlOiAgIDIwMTktMDktMTJcbiAqL1xuXG5pbXBvcnQgeyBETkFJZE1hcHBpbmdzLCBpbmplY3RUeXBlbmFtZSwgREVGQVVMVF9WRl9NT0RVTEVTLCBWZk1vZHVsZSwgUmVhZFBhcmFtcywgQnlSZXZpc2lvbiwgUHJvY2Vzc1NwZWNpZmljYXRpb25BZGRyZXNzLCBBZ2VudEFkZHJlc3MsIEFkZHJlc3NhYmxlSWRlbnRpZmllciB9IGZyb20gJy4uL3R5cGVzLmpzJ1xuaW1wb3J0IHsgbWFwWm9tZUZuLCBleHRyYWN0RWRnZXMgfSBmcm9tICcuLi9jb25uZWN0aW9uLmpzJ1xuXG5pbXBvcnQge1xuICBQcm9jZXNzLFxuICBQcm9jZXNzUmVzcG9uc2UsXG4gIEVjb25vbWljRXZlbnQsXG4gIENvbW1pdG1lbnQsXG4gIEludGVudCxcbiAgUHJvY2Vzc1NwZWNpZmljYXRpb24sXG4gIFBsYW4sXG4gIEVjb25vbWljRXZlbnRDb25uZWN0aW9uLFxuICBDb21taXRtZW50Q29ubmVjdGlvbixcbiAgSW50ZW50Q29ubmVjdGlvbixcbiAgUHJvY2Vzc1NwZWNpZmljYXRpb25SZXNwb25zZSxcbiAgQWdlbnQsXG4gIEFjY291bnRpbmdTY29wZVxufSBmcm9tICdAdmFsdWVmbG93cy92Zi1ncmFwaHFsJ1xuaW1wb3J0IHBsYW5RdWVyaWVzIGZyb20gJy4uL3F1ZXJpZXMvcGxhbi5qcydcbmltcG9ydCB7IENvbW1pdG1lbnRTZWFyY2hJbnB1dCwgRWNvbm9taWNFdmVudFNlYXJjaElucHV0LCBJbnRlbnRTZWFyY2hJbnB1dCB9IGZyb20gJy4vem9tZVNlYXJjaElucHV0VHlwZXMuanMnXG5pbXBvcnQgeyBBZ2VudFJlc3BvbnNlIH0gZnJvbSAnLi4vbXV0YXRpb25zL2FnZW50LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCAoZW5hYmxlZFZGTW9kdWxlczogVmZNb2R1bGVbXSA9IERFRkFVTFRfVkZfTU9EVUxFUywgZG5hQ29uZmlnOiBETkFJZE1hcHBpbmdzLCBjb25kdWN0b3JVcmk6IHN0cmluZykgPT4ge1xuICBjb25zdCBoYXNIaXN0b3J5ID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5IaXN0b3J5KVxuICBjb25zdCBoYXNPYnNlcnZhdGlvbiA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuT2JzZXJ2YXRpb24pXG4gIGNvbnN0IGhhc1Byb2Nlc3NTcGVjaWZpY2F0aW9uID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5Qcm9jZXNzU3BlY2lmaWNhdGlvbilcbiAgY29uc3QgaGFzQ29tbWl0bWVudCA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuQ29tbWl0bWVudClcbiAgY29uc3QgaGFzSW50ZW50ID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5JbnRlbnQpXG4gIGNvbnN0IGhhc1BsYW4gPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLlBsYW4pXG4gIGNvbnN0IGhhc0FnZW50ID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5BZ2VudClcblxuICBjb25zdCByZWFkUmV2aXNpb24gPSBtYXBab21lRm48QnlSZXZpc2lvbiwgUHJvY2Vzc1Jlc3BvbnNlPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ29ic2VydmF0aW9uJywgJ3Byb2Nlc3MnLCAnZ2V0X3JldmlzaW9uJylcbiAgY29uc3QgcmVhZEV2ZW50cyA9IG1hcFpvbWVGbjxFY29ub21pY0V2ZW50U2VhcmNoSW5wdXQsIEVjb25vbWljRXZlbnRDb25uZWN0aW9uPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ29ic2VydmF0aW9uJywgJ2Vjb25vbWljX2V2ZW50X2luZGV4JywgJ3F1ZXJ5X2Vjb25vbWljX2V2ZW50cycpXG4gIGNvbnN0IHJlYWRDb21taXRtZW50cyA9IG1hcFpvbWVGbjxDb21taXRtZW50U2VhcmNoSW5wdXQsIENvbW1pdG1lbnRDb25uZWN0aW9uPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ3BsYW5uaW5nJywgJ2NvbW1pdG1lbnRfaW5kZXgnLCAncXVlcnlfY29tbWl0bWVudHMnKVxuICBjb25zdCByZWFkSW50ZW50cyA9IG1hcFpvbWVGbjxJbnRlbnRTZWFyY2hJbnB1dCwgSW50ZW50Q29ubmVjdGlvbj4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdwbGFubmluZycsICdpbnRlbnRfaW5kZXgnLCAncXVlcnlfaW50ZW50cycpXG4gIGNvbnN0IHJlYWRQcm9jZXNzQmFzZWRPbiA9IG1hcFpvbWVGbjxSZWFkUGFyYW1zLCBQcm9jZXNzU3BlY2lmaWNhdGlvblJlc3BvbnNlPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ3NwZWNpZmljYXRpb24nLCAncHJvY2Vzc19zcGVjaWZpY2F0aW9uJywgJ2dldF9wcm9jZXNzX3NwZWNpZmljYXRpb24nKVxuICBjb25zdCByZWFkUGxhbiA9IHBsYW5RdWVyaWVzKGRuYUNvbmZpZywgY29uZHVjdG9yVXJpKVsncGxhbiddXG4gIGNvbnN0IHJlYWRBZ2VudCA9IG1hcFpvbWVGbjxSZWFkUGFyYW1zLCBBZ2VudFJlc3BvbnNlPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ2FnZW50JywgJ2FnZW50JywgJ2dldF9hZ2VudCcpXG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAge1xuICAgICAgbmV4dFByb2Nlc3NlczogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICAgIHByZXZpb3VzUHJvY2Vzc2VzOiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgIH0sXG4gICAgKGhhc09ic2VydmF0aW9uID8ge1xuICAgICAgb2JzZXJ2ZWRJbnB1dHM6IGluamVjdFR5cGVuYW1lKCdFY29ub21pY0V2ZW50JywgYXN5bmMgKHJlY29yZDogUHJvY2Vzcyk6IFByb21pc2U8RWNvbm9taWNFdmVudFtdPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZWFkRXZlbnRzKHsgcGFyYW1zOiB7IGlucHV0T2Y6IHJlY29yZC5pZCB9IH0pXG4gICAgICAgIHJldHVybiBleHRyYWN0RWRnZXMocmVzdWx0cylcbiAgICAgIH0pLFxuXG4gICAgICBvYnNlcnZlZE91dHB1dHM6IGluamVjdFR5cGVuYW1lKCdFY29ub21pY0V2ZW50JywgYXN5bmMgKHJlY29yZDogUHJvY2Vzcyk6IFByb21pc2U8RWNvbm9taWNFdmVudFtdPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZWFkRXZlbnRzKHsgcGFyYW1zOiB7IG91dHB1dE9mOiByZWNvcmQuaWQgfSB9KVxuICAgICAgICByZXR1cm4gZXh0cmFjdEVkZ2VzKHJlc3VsdHMpXG4gICAgICB9KSxcblxuICAgICAgdW5wbGFubmVkSW5wdXRzOiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgICAgdW5wbGFubmVkT3V0cHV0czogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICAgIHByZXZpb3VzOiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNDb21taXRtZW50ID8ge1xuICAgICAgY29tbWl0dGVkSW5wdXRzOiBpbmplY3RUeXBlbmFtZSgnQ29tbWl0bWVudCcsIGFzeW5jIChyZWNvcmQ6IFByb2Nlc3MpOiBQcm9taXNlPENvbW1pdG1lbnRbXT4gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcmVhZENvbW1pdG1lbnRzKHsgcGFyYW1zOiB7IGlucHV0T2Y6IHJlY29yZC5pZCB9IH0pXG4gICAgICAgIHJldHVybiBleHRyYWN0RWRnZXMocmVzdWx0cylcbiAgICAgIH0pLFxuXG4gICAgICBjb21taXR0ZWRPdXRwdXRzOiBpbmplY3RUeXBlbmFtZSgnQ29tbWl0bWVudCcsIGFzeW5jIChyZWNvcmQ6IFByb2Nlc3MpOiBQcm9taXNlPENvbW1pdG1lbnRbXT4gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcmVhZENvbW1pdG1lbnRzKHsgcGFyYW1zOiB7IG91dHB1dE9mOiByZWNvcmQuaWQgfSB9KVxuICAgICAgICByZXR1cm4gZXh0cmFjdEVkZ2VzKHJlc3VsdHMpXG4gICAgICB9KSxcbiAgICB9IDoge30pLFxuICAgIChoYXNJbnRlbnQgPyB7XG4gICAgICBpbnRlbmRlZElucHV0czogYXN5bmMgKHJlY29yZDogUHJvY2Vzcyk6IFByb21pc2U8SW50ZW50W10+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJlYWRJbnRlbnRzKHsgcGFyYW1zOiB7IGlucHV0T2Y6IHJlY29yZC5pZCB9IH0pXG4gICAgICAgIHJldHVybiBleHRyYWN0RWRnZXMocmVzdWx0cylcbiAgICAgIH0sXG5cbiAgICAgIGludGVuZGVkT3V0cHV0czogYXN5bmMgKHJlY29yZDogUHJvY2Vzcyk6IFByb21pc2U8SW50ZW50W10+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJlYWRJbnRlbnRzKHsgcGFyYW1zOiB7IG91dHB1dE9mOiByZWNvcmQuaWQgfSB9KVxuICAgICAgICByZXR1cm4gZXh0cmFjdEVkZ2VzKHJlc3VsdHMpXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc1Byb2Nlc3NTcGVjaWZpY2F0aW9uID8ge1xuICAgICAgYmFzZWRPbjogYXN5bmMgKHJlY29yZDogeyBiYXNlZE9uOiBQcm9jZXNzU3BlY2lmaWNhdGlvbkFkZHJlc3MgfSk6IFByb21pc2U8UHJvY2Vzc1NwZWNpZmljYXRpb24+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCByZWFkUHJvY2Vzc0Jhc2VkT24oeyBhZGRyZXNzOiByZWNvcmQuYmFzZWRPbiB9KSkucHJvY2Vzc1NwZWNpZmljYXRpb25cbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgICAoaGFzUGxhbiA/IHtcbiAgICAgIHBsYW5uZWRXaXRoaW46IGFzeW5jIChyZWNvcmQ6IFByb2Nlc3MpOiBQcm9taXNlPFBsYW4+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCByZWFkUGxhbihyZWNvcmQsIHsgaWQ6IHJlY29yZC5wbGFubmVkV2l0aGluIH0pKVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNBZ2VudCA/IHtcbiAgICAgIGludm9sdmVkQWdlbnRzOiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgICAgd29ya2luZ0FnZW50czogYXN5bmMgKHJlY29yZDogeyB3b3JraW5nQWdlbnRzOiBBZ2VudEFkZHJlc3NbXSB9KTogUHJvbWlzZTxBZ2VudFtdPiA9PiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgUHJvbWlzZS5hbGwoKHJlY29yZC53b3JraW5nQWdlbnRzIHx8IFtdKS5tYXAoKGFkZHJlc3MpPT5yZWFkQWdlbnQoe2FkZHJlc3N9KSkpKS5tYXAoKGFnZW50UmVzcG9uc2UpID0+IGFnZW50UmVzcG9uc2UuYWdlbnQpXG4gICAgICB9LFxuICAgICAgaW5TY29wZU9mOiBhc3luYyAocmVjb3JkOiB7IGluU2NvcGVPZjogQWdlbnRBZGRyZXNzW10gfSk6IFByb21pc2U8QWNjb3VudGluZ1Njb3BlW10+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbCgocmVjb3JkLmluU2NvcGVPZiB8fCBbXSkubWFwKChhZGRyZXNzKT0+cmVhZEFnZW50KHthZGRyZXNzfSkpKSkubWFwKChhZ2VudFJlc3BvbnNlKSA9PiBhZ2VudFJlc3BvbnNlLmFnZW50KVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNIaXN0b3J5ID8ge1xuICAgICAgcmV2aXNpb246IGFzeW5jIChyZWNvcmQ6IFByb2Nlc3MsIGFyZ3M6IHsgcmV2aXNpb25JZDogQWRkcmVzc2FibGVJZGVudGlmaWVyIH0pOiBQcm9taXNlPFByb2Nlc3M+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCByZWFkUmV2aXNpb24oYXJncykpLnByb2Nlc3NcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgKVxufVxuIl19