'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.declarePin = exports.generateStyle = exports.generateInputPinHTML = exports.generateOutputPinHTML = exports.Pin = exports.PinAction = void 0; const structures_1 = require("@itharbors/structures"); const TYPE = {}; class PinAction extends structures_1.Action { // details: D & PinActionDetail; constructor(pin, details) { const cDetails = details; cDetails.blockName = pin.pathData.blockName; cDetails.index = pin.pathData.index; super(cDetails); // this.details = cDetails; this.pin = pin; } exec(params) { } revertAction() { return new PinAction(this.pin, {}); } } exports.PinAction = PinAction; class Pin { constructor() { this.color = 'white'; this.line = ''; this.style = ''; this.pathData = { blockName: '', index: 0, }; this.refs = {}; } init(details, desc, blockName, index) { this.details = details; this.pathData.blockName = blockName; this.pathData.index = index; this.desc = desc; } exec(action) { if (!this.$root) { return; } const nodeRoot = this.$root.getRootNode(); if (nodeRoot) { nodeRoot.host.dispatch('dirty', { detail: { action, }, }); } } onInit() { } onUpdate() { } } exports.Pin = Pin; Pin.type = 'unknown'; // todo 考虑数据冲突 function generateIcon(pin) { if (pin.icon) { return /*html*/ ``; } return ''; } function generateTitle(pin) { if (pin.name) { return /*html*/ `${pin.name}`; } return ''; } /** * 生成 output pin 的 HTML * @param pin * @param details * @returns */ function generateOutputPinHTML(pin, details) { const type = pin.dataType; const define = TYPE[type] || TYPE['unknown']; const pinI = new define(); const color = pinI.color ? `--param-color: ${pinI.color};` : ''; const $pin = document.createElement('div'); $pin.classList.add('pin'); $pin.classList.add('out'); $pin.classList.add(type + ''); // @ts-ignore $pin.__pin = pinI; $pin.innerHTML = /*html*/ `${pinI.style ? `` : ''}
${generateTitle(pin)} ${generateIcon(pin)}
`; const $refList = $pin.querySelectorAll('[ref]'); Array.prototype.forEach.call($refList, ($ref) => { const ref = $ref.getAttribute('ref'); if (ref) { pinI.refs[ref] = $ref; } }); pinI.details = details; // pinI.onInit(); // pinI.onUpdate(details); return $pin; } exports.generateOutputPinHTML = generateOutputPinHTML; /** * 生成 input pin 的 HTML * @param pin * @param pinData * @param blockName * @param lineMap * @returns */ function generateInputPinHTML(pin, pinDataList, index, blockName, lineMap) { const type = pin.dataType; const define = TYPE[type] || TYPE['unknown']; const pinI = new define(); const color = pinI.color ? `--param-color: ${pinI.color};` : ''; let connected = false; for (const id in lineMap) { const line = lineMap[id]; if (line && line.output.node === blockName && line.output.param === pin.tag) { connected = true; } } const $pin = document.createElement('div'); $pin.classList.add('pin'); $pin.classList.add('in'); $pin.classList.add(type + ''); // @ts-ignore $pin.__pin = pinI; $pin.innerHTML = /*html*/ `${pinI.style ? `` : ''}
${generateIcon(pin)} ${generateTitle(pin)}
${pinI.contentSlot ? `
${pinI.contentSlot}
` : ''}
${pinI.childrenSlot ? `
${pinI.childrenSlot.map(child => '
' + child + '
').join('')}
` : ''} `; const $refList = $pin.querySelectorAll('[ref]'); Array.prototype.forEach.call($refList, ($ref) => { const ref = $ref.getAttribute('ref'); if (ref) { pinI.refs[ref] = $ref; } }); const pinData = pinDataList[index]; pinI.init(pinData, pin, blockName, index); pinI.$root = $pin; pinI.onInit(); pinI.onUpdate(); return $pin; } exports.generateInputPinHTML = generateInputPinHTML; /** * 生成 pin 的样式代码 * @param config * @returns */ function generateStyle(blockDesc) { return /*css*/ ` .pin { --param-color: #fff; --line—margin: 6px; line-height: calc(var(--header-height) - 4px); margin: var(--line—margin) 10px 0 10px; position: relative; } .pin:last-child { padding-bottom: var(--line—margin); } .pin.in { } .pin.out { text-align: right; } .pin.in > .point[hidden], .pin.out > .point[hidden] { display: none; } .pin.in > .point, .pin.out > .point { display: block; border: 1px solid var(--param-color); transform: rotate(45deg); width: 7px; height: 7px; position: absolute; top: 6px; transition: all 0.2s; background: var(--background-color); z-index: 1; cursor: pointer; } .pin.in > .point { left: -14px; } .pin.out > .point { right: -14px; } .pin.in > .point:hover, .pin.in > .point[active], .pin.out > .point:hover, .pin.out > .point[active] { background: var(--param-color); } .pin > .body { display: flex; } .pin > .body > .name { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .pin > .body > .name > .name { padding: 0 6px; } .pin > .body > .slot-content { flex: 1; display: flex; width: 120px; } .pin > .children, .pin > .children > div { margin-top: calc(var(--line—margin) * 0.5); } .pin > .body > .slot-content[hidden], .pin > .children[hidden] { display: none; } `; } exports.generateStyle = generateStyle; function declarePin(define) { const type = define.type; TYPE[type] = define; } exports.declarePin = declarePin; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jsb2NrLWZvcmdlL3Bpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7OztBQWFiLHNEQUcrQjtBQU0vQixNQUFNLElBQUksR0FFTixFQUFFLENBQUM7QUFPUCxNQUFhLFNBQXdCLFNBQVEsbUJBQTJCO0lBSXBFLGdDQUFnQztJQUVoQyxZQUFZLEdBQVEsRUFBRSxPQUFVO1FBQzVCLE1BQU0sUUFBUSxHQUFHLE9BQThCLENBQUM7UUFDaEQsUUFBUSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUM1QyxRQUFRLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3BDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksQ0FBQyxNQUVKO0lBRUQsQ0FBQztJQUVELFlBQVk7UUFDUixPQUFPLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNKO0FBeEJELDhCQXdCQztBQUVELE1BQWEsR0FBRztJQUFoQjtRQUdJLFVBQUssR0FBRyxPQUFPLENBQUM7UUFDaEIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLFVBQUssR0FBRyxFQUFFLENBQUM7UUFHWCxhQUFRLEdBQUc7WUFDUCxTQUFTLEVBQUUsRUFBRTtZQUNiLEtBQUssRUFBRSxDQUFDO1NBQ1gsQ0FBQztRQU9GLFNBQUksR0FBbUMsRUFBRSxDQUFDO0lBK0I5QyxDQUFDO0lBNUJHLElBQUksQ0FBQyxPQUFVLEVBQUUsSUFBcUIsRUFBRSxTQUFpQixFQUFFLEtBQWE7UUFDcEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQWM7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNiLE9BQU87U0FDVjtRQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFnQixDQUFDO1FBQ3hELElBQUksUUFBUSxFQUFFO1lBQ1QsUUFBUSxDQUFDLElBQW9CLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtnQkFDN0MsTUFBTSxFQUFFO29CQUNKLE1BQU07aUJBQ1Q7YUFDSixDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRCxNQUFNO0lBRU4sQ0FBQztJQUVELFFBQVE7SUFFUixDQUFDOztBQWhETCxrQkFpREM7QUFoRFUsUUFBSSxHQUFHLFNBQVMsQ0FBQztBQWtENUIsY0FBYztBQUVkLFNBQVMsWUFBWSxDQUFDLEdBQW9CO0lBQ3RDLElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtRQUNWLE9BQU8sUUFBUSxDQUFBLG1CQUFtQixHQUFHLENBQUMsSUFBSSxjQUFjLENBQUM7S0FDNUQ7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxHQUFvQjtJQUN2QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUU7UUFDVixPQUFPLFFBQVEsQ0FBQSw2QkFBNkIsR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUM7S0FDOUU7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLHFCQUFxQixDQUFDLEdBQW9CLEVBQUUsT0FBdUI7SUFDL0UsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQTZCLENBQUM7SUFDL0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QyxNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO0lBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUVoRSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztJQUU5QixhQUFhO0lBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFFbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTs7O2NBR2xFLGFBQWEsQ0FBQyxHQUFHLENBQUM7Y0FDbEIsWUFBWSxDQUFDLEdBQUcsQ0FBQzs7OzswQkFJTCxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxLQUFLLDRDQUE0QyxHQUFHLENBQUMsR0FBRyxXQUFXLElBQUksc0NBQXNDLENBQUM7SUFFMUssTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksR0FBRyxFQUFFO1lBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDekI7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3ZCLGlCQUFpQjtJQUNqQiwwQkFBMEI7SUFDMUIsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQXBDRCxzREFvQ0M7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsR0FBb0IsRUFBRSxXQUFzQixFQUFFLEtBQWEsRUFBRSxTQUFpQixFQUFFLE9BQWdEO0lBQ2pLLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxRQUE2QixDQUFDO0lBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztJQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFaEUsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLEtBQUssTUFBTSxFQUFFLElBQUksT0FBTyxFQUFFO1FBQ3RCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixJQUNJLElBQUk7WUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTO1lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEVBQy9CO1lBQ0UsU0FBUyxHQUFHLElBQUksQ0FBQztTQUNwQjtLQUNKO0lBRUQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFOUIsYUFBYTtJQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBRWxCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFBLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7OztjQUdsRSxZQUFZLENBQUMsR0FBRyxDQUFDO2NBQ2pCLGFBQWEsQ0FBQyxHQUFHLENBQUM7O1VBRXRCLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLDZCQUE2QixTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTs7O01BRzlHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsNkJBQTZCLEdBQUcsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFOzBCQUM1SixHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxLQUFLLDJDQUEyQyxHQUFHLENBQUMsR0FBRyxXQUFXLElBQUkscUNBQXFDLENBQUM7SUFFeEssTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksR0FBRyxFQUFFO1lBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDekI7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVuQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNkLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQixPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBckRELG9EQXFEQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQUMsU0FBNEI7SUFDdEQsT0FBTyxPQUFPLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0E0RWIsQ0FBQztBQUNOLENBQUM7QUE5RUQsc0NBOEVDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLE1BQWtDO0lBQ3pELE1BQU0sSUFBSSxHQUFJLE1BQWdDLENBQUMsSUFBSSxDQUFDO0lBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEIsQ0FBQztBQUhELGdDQUdDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFBpbiDlvJXohJrlhoXnva7nmoTnsbvlnotcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IExpbmVJbmZvIH0gZnJvbSAnQGl0aGFyYm9ycy91aS1ncmFwaCc7XG5pbXBvcnQgdHlwZSB7IEJhc2VFbGVtZW50IH0gZnJvbSAnQGl0aGFyYm9ycy91aS1jb3JlJztcbmltcG9ydCB0eXBlIHsgSVBpbkRlc2NyaXB0aW9uLCBJQmxvY2tEZXNjcmlwdGlvbiwgUGluRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHtcbiAgICBIVE1MR3JhcGhGb3JnZUVsZW1lbnQsXG59IGZyb20gJy4vZm9yZ2UnO1xuXG5pbXBvcnQge1xuICAgIEFjdGlvbixcbiAgICBBY3Rpb25MaXN0LFxufSBmcm9tICdAaXRoYXJib3JzL3N0cnVjdHVyZXMnO1xuXG5leHBvcnQgdHlwZSBEaXJ0eURldGFpbCA9IHtcbiAgICBhY3Rpb24/OiBBY3Rpb247XG59O1xuXG5jb25zdCBUWVBFOiB7XG4gICAgW2tleTogc3RyaW5nXTogbmV3KC4uLmFyZ3M6IGFueVtdKSA9PiBQaW5cbn0gPSB7fTtcblxudHlwZSBQaW5BY3Rpb25EZXRhaWwgPSB7XG4gICAgYmxvY2tOYW1lOiBzdHJpbmc7XG4gICAgaW5kZXg6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjbGFzcyBQaW5BY3Rpb248RCBleHRlbmRzIHt9PiBleHRlbmRzIEFjdGlvbjxEICYgUGluQWN0aW9uRGV0YWlsPiB7XG5cbiAgICBwaW46IFBpbjtcblxuICAgIC8vIGRldGFpbHM6IEQgJiBQaW5BY3Rpb25EZXRhaWw7XG5cbiAgICBjb25zdHJ1Y3RvcihwaW46IFBpbiwgZGV0YWlsczogRCkge1xuICAgICAgICBjb25zdCBjRGV0YWlscyA9IGRldGFpbHMgYXMgRCAmIFBpbkFjdGlvbkRldGFpbDtcbiAgICAgICAgY0RldGFpbHMuYmxvY2tOYW1lID0gcGluLnBhdGhEYXRhLmJsb2NrTmFtZTtcbiAgICAgICAgY0RldGFpbHMuaW5kZXggPSBwaW4ucGF0aERhdGEuaW5kZXg7XG4gICAgICAgIHN1cGVyKGNEZXRhaWxzKTtcbiAgICAgICAgLy8gdGhpcy5kZXRhaWxzID0gY0RldGFpbHM7XG4gICAgICAgIHRoaXMucGluID0gcGluO1xuICAgIH1cblxuICAgIGV4ZWMocGFyYW1zOiB7XG4gICAgICAgIGZvcmdlOiBIVE1MR3JhcGhGb3JnZUVsZW1lbnRcbiAgICB9KSB7XG5cbiAgICB9XG5cbiAgICByZXZlcnRBY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUGluQWN0aW9uKHRoaXMucGluLCB7fSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGluPEQgPSB7IFtrZXk6IHN0cmluZ106IGFueSB9PiB7XG4gICAgc3RhdGljIHR5cGUgPSAndW5rbm93bic7XG5cbiAgICBjb2xvciA9ICd3aGl0ZSc7XG4gICAgbGluZSA9ICcnO1xuICAgIHN0eWxlID0gJyc7XG4gICAgZGV0YWlscz86IEQ7XG5cbiAgICBwYXRoRGF0YSA9IHtcbiAgICAgICAgYmxvY2tOYW1lOiAnJyxcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgfTtcblxuICAgIGRlc2MhOiBJUGluRGVzY3JpcHRpb247XG5cbiAgICBjb250ZW50U2xvdD86IHN0cmluZztcbiAgICBjaGlsZHJlblNsb3Q/OiBzdHJpbmdbXTtcblxuICAgIHJlZnM6IHsgW2tleTogc3RyaW5nXTogSFRNTEVsZW1lbnQgfSA9IHt9O1xuICAgICRyb290PzogSFRNTEVsZW1lbnQ7XG5cbiAgICBpbml0KGRldGFpbHM6IEQsIGRlc2M6IElQaW5EZXNjcmlwdGlvbiwgYmxvY2tOYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgICAgICAgdGhpcy5wYXRoRGF0YS5ibG9ja05hbWUgPSBibG9ja05hbWU7XG4gICAgICAgIHRoaXMucGF0aERhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy5kZXNjID0gZGVzYztcbiAgICB9XG5cbiAgICBleGVjKGFjdGlvbjogQWN0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy4kcm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vZGVSb290ID0gdGhpcy4kcm9vdC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3Q7XG4gICAgICAgIGlmIChub2RlUm9vdCkge1xuICAgICAgICAgICAgKG5vZGVSb290Lmhvc3QgYXMgQmFzZUVsZW1lbnQpLmRpc3BhdGNoKCdkaXJ0eScsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSW5pdCgpIHtcblxuICAgIH1cblxuICAgIG9uVXBkYXRlKCkge1xuXG4gICAgfVxufVxuXG4vLyB0b2RvIOiAg+iZkeaVsOaNruWGsueqgVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUljb24ocGluOiBJUGluRGVzY3JpcHRpb24pIHtcbiAgICBpZiAocGluLmljb24pIHtcbiAgICAgICAgcmV0dXJuIC8qaHRtbCovYDx1aS1pY29uIHZhbHVlPVwiJHtwaW4uaWNvbn1cIj48L3VpLWljb24+YDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVRpdGxlKHBpbjogSVBpbkRlc2NyaXB0aW9uKSB7XG4gICAgaWYgKHBpbi5uYW1lKSB7XG4gICAgICAgIHJldHVybiAvKmh0bWwqL2A8c3BhbiBjbGFzcz1cIm5hbWVcIiB0aXRsZT1cIiR7cGluLm5hbWV9XCI+JHtwaW4ubmFtZX08L3NwYW4+YDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIOeUn+aIkCBvdXRwdXQgcGluIOeahCBIVE1MXG4gKiBAcGFyYW0gcGluXG4gKiBAcGFyYW0gZGV0YWlsc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlT3V0cHV0UGluSFRNTChwaW46IElQaW5EZXNjcmlwdGlvbiwgZGV0YWlsczogeyB2YWx1ZTogYW55IH0pIHtcbiAgICBjb25zdCB0eXBlID0gcGluLmRhdGFUeXBlIGFzIGtleW9mIHR5cGVvZiBUWVBFO1xuICAgIGNvbnN0IGRlZmluZSA9IFRZUEVbdHlwZV0gfHwgVFlQRVsndW5rbm93biddO1xuICAgIGNvbnN0IHBpbkkgPSBuZXcgZGVmaW5lKCk7XG4gICAgY29uc3QgY29sb3IgPSBwaW5JLmNvbG9yID8gYC0tcGFyYW0tY29sb3I6ICR7cGluSS5jb2xvcn07YCA6ICcnO1xuXG4gICAgY29uc3QgJHBpbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICRwaW4uY2xhc3NMaXN0LmFkZCgncGluJyk7XG4gICAgJHBpbi5jbGFzc0xpc3QuYWRkKCdvdXQnKTtcbiAgICAkcGluLmNsYXNzTGlzdC5hZGQodHlwZSArICcnKTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICAkcGluLl9fcGluID0gcGluSTtcblxuICAgICRwaW4uaW5uZXJIVE1MID0gLypodG1sKi9gJHtwaW5JLnN0eWxlID8gYDxzdHlsZT4ke3Bpbkkuc3R5bGV9PC9zdHlsZT5gIDogJyd9XG4gICAgPGRpdiBjbGFzcz1cImJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj5cbiAgICAgICAgICAgICR7Z2VuZXJhdGVUaXRsZShwaW4pfVxuICAgICAgICAgICAgJHtnZW5lcmF0ZUljb24ocGluKX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8di1ncmFwaC1ub2RlLXBhcmFtICR7cGluLmhpZGVQaW4gPyAnaGlkZGVuJyA6ICcnfSBzdHlsZT1cIiR7Y29sb3J9XCIgY2xhc3M9XCJwb2ludFwiIGRpcmVjdGlvbj1cIm91dHB1dFwiIG5hbWU9XCIke3Bpbi50YWd9XCIgdHlwZT1cIiR7dHlwZX1cIiByb2xlPVwicmlnaHRcIj48L3YtZ3JhcGgtbm9kZS1wYXJhbT5gO1xuXG4gICAgY29uc3QgJHJlZkxpc3QgPSAkcGluLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyZWZdJyk7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCgkcmVmTGlzdCwgKCRyZWYpID0+IHtcbiAgICAgICAgY29uc3QgcmVmID0gJHJlZi5nZXRBdHRyaWJ1dGUoJ3JlZicpO1xuICAgICAgICBpZiAocmVmKSB7XG4gICAgICAgICAgICBwaW5JLnJlZnNbcmVmXSA9ICRyZWY7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHBpbkkuZGV0YWlscyA9IGRldGFpbHM7XG4gICAgLy8gcGluSS5vbkluaXQoKTtcbiAgICAvLyBwaW5JLm9uVXBkYXRlKGRldGFpbHMpO1xuICAgIHJldHVybiAkcGluO1xufVxuXG4vKipcbiAqIOeUn+aIkCBpbnB1dCBwaW4g55qEIEhUTUxcbiAqIEBwYXJhbSBwaW5cbiAqIEBwYXJhbSBwaW5EYXRhXG4gKiBAcGFyYW0gYmxvY2tOYW1lXG4gKiBAcGFyYW0gbGluZU1hcFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlSW5wdXRQaW5IVE1MKHBpbjogSVBpbkRlc2NyaXB0aW9uLCBwaW5EYXRhTGlzdDogUGluRGF0YVtdLCBpbmRleDogbnVtYmVyLCBibG9ja05hbWU6IHN0cmluZywgbGluZU1hcDogeyBba2V5OiBzdHJpbmddOiBMaW5lSW5mbyB8IHVuZGVmaW5lZCB9KSB7XG4gICAgY29uc3QgdHlwZSA9IHBpbi5kYXRhVHlwZSBhcyBrZXlvZiB0eXBlb2YgVFlQRTtcbiAgICBjb25zdCBkZWZpbmUgPSBUWVBFW3R5cGVdIHx8IFRZUEVbJ3Vua25vd24nXTtcbiAgICBjb25zdCBwaW5JID0gbmV3IGRlZmluZSgpO1xuICAgIGNvbnN0IGNvbG9yID0gcGluSS5jb2xvciA/IGAtLXBhcmFtLWNvbG9yOiAke3BpbkkuY29sb3J9O2AgOiAnJztcblxuICAgIGxldCBjb25uZWN0ZWQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGlkIGluIGxpbmVNYXApIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGxpbmVNYXBbaWRdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBsaW5lICYmXG4gICAgICAgICAgICBsaW5lLm91dHB1dC5ub2RlID09PSBibG9ja05hbWUgJiZcbiAgICAgICAgICAgIGxpbmUub3V0cHV0LnBhcmFtID09PSBwaW4udGFnXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0ICRwaW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAkcGluLmNsYXNzTGlzdC5hZGQoJ3BpbicpO1xuICAgICRwaW4uY2xhc3NMaXN0LmFkZCgnaW4nKTtcbiAgICAkcGluLmNsYXNzTGlzdC5hZGQodHlwZSArICcnKTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICAkcGluLl9fcGluID0gcGluSTtcblxuICAgICRwaW4uaW5uZXJIVE1MID0gLypodG1sKi9gJHtwaW5JLnN0eWxlID8gYDxzdHlsZT4ke3Bpbkkuc3R5bGV9PC9zdHlsZT5gIDogJyd9XG4gICAgPGRpdiBjbGFzcz1cImJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj5cbiAgICAgICAgICAgICR7Z2VuZXJhdGVJY29uKHBpbil9XG4gICAgICAgICAgICAke2dlbmVyYXRlVGl0bGUocGluKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICR7cGluSS5jb250ZW50U2xvdCA/IGA8ZGl2IGNsYXNzPVwic2xvdC1jb250ZW50XCIgJHtjb25uZWN0ZWQgPyAnaGlkZGVuJyA6ICcnfT4ke3BpbkkuY29udGVudFNsb3R9PC9kaXY+YCA6ICcnfVxuICAgIDwvZGl2PlxuXG4gICAgJHtwaW5JLmNoaWxkcmVuU2xvdCA/IGA8ZGl2IGNsYXNzPVwiY2hpbGRyZW5cIiAke2Nvbm5lY3RlZCA/ICdoaWRkZW4nIDogJyd9PiR7cGluSS5jaGlsZHJlblNsb3QubWFwKGNoaWxkID0+ICc8ZGl2IGNsYXNzPVwic2xvdC1jaGlsZHJlblwiPicgKyBjaGlsZCArICc8L2Rpdj4nKS5qb2luKCcnKX08L2Rpdj5gIDogJyd9XG4gICAgPHYtZ3JhcGgtbm9kZS1wYXJhbSAke3Bpbi5oaWRlUGluID8gJ2hpZGRlbicgOiAnJ30gc3R5bGU9XCIke2NvbG9yfVwiIGNsYXNzPVwicG9pbnRcIiBkaXJlY3Rpb249XCJpbnB1dFwiIG5hbWU9XCIke3Bpbi50YWd9XCIgdHlwZT1cIiR7dHlwZX1cIiByb2xlPVwibGVmdFwiPjwvdi1ncmFwaC1ub2RlLXBhcmFtPmA7XG5cbiAgICBjb25zdCAkcmVmTGlzdCA9ICRwaW4ucXVlcnlTZWxlY3RvckFsbCgnW3JlZl0nKTtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKCRyZWZMaXN0LCAoJHJlZikgPT4ge1xuICAgICAgICBjb25zdCByZWYgPSAkcmVmLmdldEF0dHJpYnV0ZSgncmVmJyk7XG4gICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICAgIHBpbkkucmVmc1tyZWZdID0gJHJlZjtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcGluRGF0YSA9IHBpbkRhdGFMaXN0W2luZGV4XTtcblxuICAgIHBpbkkuaW5pdChwaW5EYXRhLCBwaW4sIGJsb2NrTmFtZSwgaW5kZXgpO1xuICAgIHBpbkkuJHJvb3QgPSAkcGluO1xuICAgIHBpbkkub25Jbml0KCk7XG4gICAgcGluSS5vblVwZGF0ZSgpO1xuICAgIHJldHVybiAkcGluO1xufVxuXG4vKipcbiAqIOeUn+aIkCBwaW4g55qE5qC35byP5Luj56CBXG4gKiBAcGFyYW0gY29uZmlnXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVTdHlsZShibG9ja0Rlc2M6IElCbG9ja0Rlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIC8qY3NzKi9gXG4ucGluIHtcbiAgICAtLXBhcmFtLWNvbG9yOiAjZmZmO1xuICAgIC0tbGluZeKAlG1hcmdpbjogNnB4O1xuXG4gICAgbGluZS1oZWlnaHQ6IGNhbGModmFyKC0taGVhZGVyLWhlaWdodCkgLSA0cHgpO1xuICAgIG1hcmdpbjogdmFyKC0tbGluZeKAlG1hcmdpbikgMTBweCAwIDEwcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnBpbjpsYXN0LWNoaWxkIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tbGluZeKAlG1hcmdpbik7XG59XG4ucGluLmluIHtcblxufVxuLnBpbi5vdXQge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuLnBpbi5pbiA+IC5wb2ludFtoaWRkZW5dLCAucGluLm91dCA+IC5wb2ludFtoaWRkZW5dIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4ucGluLmluID4gLnBvaW50LCAucGluLm91dCA+IC5wb2ludCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcGFyYW0tY29sb3IpO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbiAgICB3aWR0aDogN3B4O1xuICAgIGhlaWdodDogN3B4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDZweDtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycztcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kLWNvbG9yKTtcbiAgICB6LWluZGV4OiAxO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5waW4uaW4gPiAucG9pbnQge1xuICAgIGxlZnQ6IC0xNHB4O1xufVxuLnBpbi5vdXQgPiAucG9pbnQge1xuICAgIHJpZ2h0OiAtMTRweDtcbn1cbi5waW4uaW4gPiAucG9pbnQ6aG92ZXIsXG4ucGluLmluID4gLnBvaW50W2FjdGl2ZV0sXG4ucGluLm91dCA+IC5wb2ludDpob3Zlcixcbi5waW4ub3V0ID4gLnBvaW50W2FjdGl2ZV1cbntcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXJhbS1jb2xvcik7XG59XG5cbi5waW4gPiAuYm9keSB7XG4gICAgZGlzcGxheTogZmxleDtcbn1cbi5waW4gPiAuYm9keSA+IC5uYW1lIHtcbiAgICBmbGV4OiAxO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuLnBpbiA+IC5ib2R5ID4gLm5hbWUgPiAubmFtZSB7XG4gICAgcGFkZGluZzogMCA2cHg7XG59XG5cbi5waW4gPiAuYm9keSA+IC5zbG90LWNvbnRlbnQge1xuICAgIGZsZXg6IDE7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB3aWR0aDogMTIwcHg7XG59XG5cbi5waW4gPiAuY2hpbGRyZW4sIC5waW4gPiAuY2hpbGRyZW4gPiBkaXYge1xuICAgIG1hcmdpbi10b3A6IGNhbGModmFyKC0tbGluZeKAlG1hcmdpbikgKiAwLjUpO1xufVxuXG4ucGluID4gLmJvZHkgPiAuc2xvdC1jb250ZW50W2hpZGRlbl0sIC5waW4gPiAuY2hpbGRyZW5baGlkZGVuXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cbiAgICBgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyZVBpbihkZWZpbmU6IG5ldyguLi5hcmdzOiBhbnlbXSkgPT4gUGluKSB7XG4gICAgY29uc3QgdHlwZSA9IChkZWZpbmUgYXMgdW5rbm93biBhcyB0eXBlb2YgUGluKS50eXBlO1xuICAgIFRZUEVbdHlwZV0gPSBkZWZpbmU7XG59XG4iXX0=